Цитата(IgorKossak @ Jul 22 2007, 20:24)

Ко всему выше сказанному добавлю, что инициализация переменных, лежащих в еепром, осуществляется не самой программой пользователя, а компилятором/линкером на этапе сборки программы.
Чтобы проинициализировать еепром МК, нужно создать файл прошивки (см. опции линкера) области еепром.
Как сделать раздельные файлы прошивок для флеш и еепром на форуме неоднократно писалось (hex файлы).
И еще
Переменные с атрибутом __eeprom не могут быть локальными, т.е. они не могут быть объявленными внутри функции (кроме префикса static). Пример:
Код
int __eeprom aaa; /* глобальная переменная, инициализация на старте программы */
void MYFunc(...)
{
char __eeprom xxx; /* ошибка - локальная переменная */
....
static char __eeprom ууу = 0; /* статическая переменная, инициализация на старте программы */
....
int zzz = aaa + yyy; /* код для обращения к EEPROM генерится автоматически */
...
yyy++; /* см. коммент выше, но надо подумать и об оптимизации:))) т.к. здеся читает из еепром в статическую память, инкрементирует и пишет опять в еепром, возможно последние две операции лучше делать после того, как поработали с копией в статической памяти данных */
}