Go Down

Topic: Dúvida:Código EEPROM (Read 816 times) previous topic - next topic

vasr

Tenho dúvidas em perceber o seguinte código.Este código referece a leitura e escrita de dados numa EEPROM.
Code: [Select]
#define WR_PNT_ADD 0x000
unsigned int Rd1(){
byte low=Read(RD_PNT_ADD);//Função que lé dados da EEPROM
byte hi=Read(RD_PNT_ADD+1);
return((hi<<8)+low);//Nao sei que isto faz, 1º dúvida
}

void Rd2(){
Write(RD_PNT_ADD,(byte) (pnt & 0x00FF));//Função escreve dados,2º dúvida
Write(RD_PNT_ADD+1,(byte (pnt>>8));//3ºdúvida
}


Desde já obrigado pela ajuda.

HugoPT

Quote
byte low=Read(RD_PNT_ADD);//Função que lé dados da EEPROM

Nao conheco a funçao Read() .Onde arranjaste esse codigo?
Quote

return((hi<<8)+low);//Nao sei que isto faz, 1º dúvida

A tua funçao devolte um int(2 bytes).Como tu queres retornar um int e leste byte a byte tens de os juntar.este << (operador) desloca para a esquerda 8 vezes o byte hi.Assim o resultado disso vai ser teres o hi byte e o lowbyte dentro do int retornado na funçao.
Em todo o caso olhando para as tua duvidas a seguir é semelhante mas o que prentendes fazer concretamente ?
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

vasr

Será que podias-me explicar melhor?

bubulindo

Esse código está incompleto.

Quando o meteste na IDE, ele compilou ou deu erros? Isto funciona? Ou não testaste ainda?

As tuas dúvidas são acerca de byte shift. Se procurares pelo termo na net é simples de perceber o que é. Basicamente estás a compôr uma variável de 16 bits com duas de 8 bits.
This... is a hobby.

vasr

Podem-me dar um exemplo?Já fiz uma pesquisa mas ainda não consegui perceber.

bubulindo

http://social.msdn.microsoft.com/Forums/vstudio/en-US/0e2c882b-4bf4-4773-a7f0-233d8a6a2c15/byte-shifting

Vê a primeira resposta.

http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Flanguage%2Fref%2Fbitshe.htm

Se souberes tipos de dados e como os valores são guardados, isto é relativamente simples de compreender. Aliás, vai à calculadora do Windows, mete em modo programador.

Escreve 30000 e vais ver uma sequência de bits, correcto?

Essa sequência tem 2 bytes ou seja 16 bits. Ao fazeres byte shift estás efectivamente a passar os bytes para a direita ou esquerda.

This... is a hobby.

bubulindo

Code: [Select]


void setup() {
  Serial.begin(19200);
  unsigned int val_int = 1;
  for (unsigned char i=0; i<7; i++) {
     Serial.print("Shifting ");
     Serial.print(i);
     Serial.println("positions = ");
     Serial.println((val_int << i), BIN);
     Serial.println((val_int << i), DEC);
  }
}


void loop(){}

This... is a hobby.

Go Up