Предлагаю в этой ветке отражать передовые методы работы с pgmspace.h и eeprom.h
Может, потом закрепить тему. Тем более, что видны динамичные изменения в этой области.
Для начала. WINAVR-20071221 + Avr Studio 4.13 sp2 build 571
Делаю большой проект. Выложить не могу. Вкратце суть проблемы.
Использую хедер, в котором сведены вместе все параметры, хранящиеся в EEPROM
paramset.h
Код
#ifndef PARAMSET_H
#define PARAMSET_H 1
EEMEM uint16_t nominal_rpm = 500;
EEMEM uint8_t amplitude = 208;
................... etc
#endif
Хедер включается в разные модули. Их много. Везде константы из еепрома пользуются популярностью

И, BTW, надо иметь на выходе файл *.eep для начальной заливки.
Для того, чтобы все работало, приходится объявлять параметры дважды - в основном модуле с инициализацией, а в остальных - как extern, т.е.
Код
#ifndef PARAMSET_H
#define PARAMSET_H 1
#ifdef _IN_MAIN_
EEMEM uint16_t nominal_rpm = 500;
EEMEM uint8_t amplitude = 208;
................... etc
#else
extern EEMEM uint16_t nominal_rpm;
extern EEMEM uint8_t amplitude;
................... etc
#endif
#endif
Потом, в основной программе
Код
#define _IN_MAIN_ 1
#include "paramset.h"
Иначе - чушь в распределении адресов.
Как избежать двойного объявления переменных в приведенном примере, ессно, без использования макросов?
Возможно ли это вообще?