Go Down

Topic: Comunicação RF-Protocolo (Read 25251 times) previous topic - next topic

hugo007

Nao resisti e até fui tirar um print dentro de um exe gerado pelo VB.
Gostava de perguntar ao senhores da microsoft para que é que o exe necessita de conter a minha localização no disco do programa que fiz.
Ou melhor que funcionalidade extra isso dará ao programa lol
Isto é uma gota há mais basta olhar com atenção no editor de hexadecimal.
Não é de estranhar porque é tão fácil crackar programas no windows e o fiasco que é ...
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

vasr

Não fazia ideia que tinha este tipo de conteudos num executável de visual basic.

vasr


Tu queres é isto..

http://en.wikipedia.org/wiki/Cyclic_redundancy_check

Não é uma soma. Em todo o caso podes definir o resultado da soma como int.



Mas já nao fiz como int?

bubulindo


Tens razão é algum como especificaste mas penso que ao fazer a soma já é uma boa forma de eliminar erros de receção de dados.

Achas? Se enviares "10" e receberes "01" o teu algoritmo falha...



Mas já nao fiz como int?


Tu disseste isto:


Trama de envio terá que conter o valor da soma mas como é superior a 255 surge o problema.Alguma sugestão?

O que implica que o teu calculo está a ser modificado para unsigned char (ou byte se preferires).

Logo parece ser bastante óbvio que não estás a fazer int.

Outra coisa...

Code: [Select]
int checksumENVIA(){
  unsigned long soma=0;
  for(int i=5;i>=2;i--){
    soma+=int(buf[i]);
  }
  return soma;
}

Porque é que soma é unsigned long e tu retornas um inteiro?
This... is a hobby.

vasr

Desde já obrigado pelas observações dadas ao código.
Acerca da soma para deteção de erros, existe essa falha sim. Estive a ler o artigo que me enviaste, percebi que é feito através de somas consecutivas de um polinómio de 3ºgrau, 1 bit a direita até o resultado ser zero. Não consegui perceber é como implementar isso no meu código.Algum exemplo mais simples?
Em relação a segunda problema do valor inteiro, a função retorna um inteiro.Eu tenho coloca-lo num byte que é o buffer de envio.Ou escapa-me alguma coisa?



fabio_h

para checksum faz duas variaveis, uma variavel faz xor em toda array e a outra faz um sum, no final some ou "xore" as duas, a probabilidade de de má recepção alterar os dados e o checksum é muito pequena... se usar um byte de checksum 1 em 256 possibilidades, e com dois bytes 1 em 65536.

vasr

Estou a colocar os elementos na string ndets forma:
Code: [Select]
void loop(){
if (Serial.available() > 8) {
    temp[2]='\0';
    valor[3]='\0';
    for(int i=0;i<3;i++){
      for( int j=0;j<2;j++){
        temp[j] = Serial.read();
      }
      buf1[i]=atoi(temp);
    }
    for( int i=0;i<4;i++){
      valor[i] = Serial.read();
    }
    buf1[3] = atoi(valor)
    vw_send((uint8_t *)buf1,7);
  }
}

Como faço o "xor" tendo em conta o código?Com o atoi fica num valor numérico.

bubulindo

Ou usas isto:

http://www.nongnu.org/avr-libc/user-manual/group__util__crc.html
This... is a hobby.

vasr

Obrigado pelo artigo, tentei analisa-lo mas não consigo perceber como funciona e por consequência como integra-lo no meu código. Se poderes dar uma explicação breve agradecia.
E em relação ao inteiro que coloco na string que referi nos tópicos anteriores?

Obrigado pela ajuda.

vasr

Em relação a deteção de erros encontrei este artigo:
http://www.di.ubi.pt/~pprata/sdtf/Tk_codigosErros_Manuela.pdf

vasr

Pelo que percebi terei que utilizar o valor ASCII e não seu valor numero e fazer(deteção de erros pelo checksum).Portanto terei que enviar o seu valor não é numerico mas no código ASCII. Será este o caminho?

bubulindo

Ser ASCII ou não, não interfere para fazer um checksum.

Tu escolhes o que te dá mais jeito. Já expliquei milhentas vezes os prós e contras de ambas.
This... is a hobby.

Go Up