Цитата(alexeyv @ May 29 2015, 05:19)

Код
val1 = eeprom_read_byte(eeprom_var1);
1. Во всех ваших примерах надо добавить
&eeprom_var1...
2. Лет 10 как никаких проблем с EEPROM нет, да и те, что были, вами лично надуманы. Единственное, что было это:
http://www.nongnu.org/avr-libc/user-manual...prom_corruption А привычка у вас плохая осталась - компилятор не проверяет типизацию при обращении к данным.
Возникает дополнительный шанс совершить ошибку.
3. Вообще с eeprom правильно работать следующим образом:
Через typedef определяете структуру, содержащую все данные из EEPROM:
Код
typedef struct
{
uint8_t __dummy; // don't use zero address
uint8_t var1;
float var2;
...
} eeprom_data_t;
Задаёте значения своим переменным:
Код
EEMEM eeprom_data_t eeprom =
{
.var1 = 33U,
.var2 = 333.0f
};
Работаете с ними:
Код
extern EEMEM eeprom_data_t eeprom;
uint8_t x = eeprom_read_byte(&eeprom.var1);
...
eeprom_update_byte(&eeprom.var1, x);
float f = eeprom_read_float(&eeprom.var2);
...
eeprom_update_float(&eeprom.var2, f);
В таком случае вы дополнительно обеспечиваете гарантию неизменности задуманной вами очерёдности данных в EEPROM,
независимо от версий и причуд компилятора (хорошо бы, конечно, использовать ещё и атрибут __packed, но для вводного курса этого и так достаточно).
Также, благодаря
update вместо
write вы упрощаете пользовательское приложение и подливаете срок службы EEPROM.
Урок окончен)))