А задача такая - сохранить в EEPROM (а потом прочитать) переменную, размер которой несколько (больше одного) байт. EEPROM умеет работать только с байтами или последовательностью байт.
Ваша функция записи в EEPROM скорее всего будет уметь писать в EEPROM побайтово некоторый буфер в памяти программы некоторой длины. Прототипы функций какие-нибудь такие:
Код:
void EEPROM_write( int startAddr, const void* buff, size_t length );
void EEPROM_read( int startAddr, void* buff, size_t length );
Внутри вы кастите указалель на void к указателю на массив uint8_t (или к типу, с которым работает функция записи/чтения одного байта) и пишете/считываете буфер побайтово в цикле.
Вызов этих функций в вашей программе будет примерно таким:
Код:
double myDirtyVar;
EEPROM_write( EEPROM_DIRTY_VAR_ADDR, &myDirtyVar, sizeof(myDirtyVar) );
EEPROM_read( EEPROM_DIRTY_VAR_ADDR, &myDirtyVar, sizeof(myDirtyVar) );
И учтите, что если в процессе записи отключится питание микропроцессора, то запишется только часть состояния вашей переменной. В качественном изделии требуется защита от подобных неприятностей.
Этими же функциями можно писать/считывать произвольные структуры целиком, но требуется аккуратность с выравниванием полей структур, чтобы не расходовать зря ячейки EEPROM. Гуглите
Код:
#pragma pack