unsigned long в EEPROM

sirik
Offline
Зарегистрирован: 10.11.2012

Добрый день

Есть счетчик, тип unsigned long, от 0 до 999999. Как его записать в EEPROM и потом считать?

Я так понимаю, что его надо разделить на кусочки до 255, но как именно не представляю

ps/ хотя тут: http://www.arduino.ru/Reference/Library/EERPOM/write, в коде, идет речь о размере в 512

sirik
Offline
Зарегистрирован: 10.11.2012

Нашел библитеку для сохранения/чтения unsigned long http://www.freeduino.ru/arduino/sample_EEPROM.html

maksim
Offline
Зарегистрирован: 12.02.2012

А еще б вы тему такую же нашли прежде чем эту заводить.

xzeus
Offline
Зарегистрирован: 15.07.2015
unsigned long epromread(byte addr) 
{
unsigned long temp;  
temp=(EEPROM.read(addr)); 
*((byte*) ((void*) &temp+1))=EEPROM.read(addr+1);
*((byte*) ((void*) &temp+2))=EEPROM.read(addr+2);
*((byte*) ((void*) &temp+3))=EEPROM.read(addr+3);
*((byte*) ((void*) &temp+4))=EEPROM.read(addr+4);
*((byte*) ((void*) &temp+5))=EEPROM.read(addr+5);
*((byte*) ((void*) &temp+6))=EEPROM.read(addr+6);
*((byte*) ((void*) &temp+7))=EEPROM.read(addr+7);
return temp;
}  

void epromwrite(byte addr, unsigned long vollue)
{
  EEPROM.write(addr,vollue);
  EEPROM.write(addr+1,*((byte*) ((void*) &vollue+1)));
  EEPROM.write(addr+2,*((byte*) ((void*) &vollue+2)));
  EEPROM.write(addr+3,*((byte*) ((void*) &vollue+3)));
  EEPROM.write(addr+4,*((byte*) ((void*) &vollue+4)));
  EEPROM.write(addr+5,*((byte*) ((void*) &vollue+5)));
  EEPROM.write(addr+6,*((byte*) ((void*) &vollue+6)));
  EEPROM.write(addr+7,*((byte*) ((void*) &vollue+7)));
} 

 

maksim
Offline
Зарегистрирован: 12.02.2012

Почти, только еще необходимо учитывать, что для 8-битных МК unsigned long имеет длину 4 байта, а не 8.

UPD: и адресация в большенстве случаев будет больше одного байта.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А unsigned long везде имеет длину 4 байта. 8 - это long long.