Прошу прощение за невнимательность к теме, т.к. для себя уже нашёл выход. Вот, что я накрутил:
Код
//!< Названия доступных режимов обогрева
#define MODE_WEEK_NAME "Недельный"
#define MODE_DAYLY_NAME "Суточный"
#define MODE_SMS_NAME "SMS"
#define NUM_OF_MODE 3
//!< Идентификаторы доступных режимов обогрева
#define MODE_DAYLY_ID 0
#define MODE_WEEK_ID 1
#define MODE_SMS_ID 2
//<! Структура для хранения в eeprom
typedef eeprom struct
{
int DayTemp[7];
int NightTemp[7];
unsigned char StartDayTime[2];
unsigned char FinishDayTime[2];
} eeprom_mode_t;
//<! Структура для хранения во flash
typedef flash struct
{
unsigned char ModeID;
unsigned char ModeName[10];
} flash_mode_t;
typedef struct
{
eeprom eeprom_mode_t *e; //<! Указатель на eeprom, лежащий в обычной памяти
flash flash_mode_t *f; //<! Указатель на flash, лежащий в обычной памяти
} mode_t;
//!< Данные для инициализации структуры eeprom_mode_t
//<! Суточный режим
eeprom eeprom_mode_t ep1 =
{ {23, 23, 23, 23, 23, 15, 15}, {15, 15, 15, 15, 15, 15, 15}, {6, 30}, {19, 0} };
//<! Недельный режим
eeprom eeprom_mode_t ep2 =
{ {21, 21, 21, 21, 21, 21, 21}, {20, 20, 20, 20, 20, 20, 20}, {7, 0}, {22, 0} };
//<! Режим SMS
eeprom eeprom_mode_t ep3;
//!< Данные для инициализации структуры flash_mode_t
flash flash_mode_t fp1 = { MODE_DAYLY_ID, MODE_DAYLY_NAME }; //<! Суточный режим
flash flash_mode_t fp2 = { MODE_WEEK_ID, MODE_WEEK_NAME }; //<! Недельный режим
flash flash_mode_t fp3 = { MODE_SMS_ID, MODE_SMS_NAME }; //<! Режим SMS
//<! Объявление массива структур modes
mode_t modes[ NUM_OF_MODE ] = { {&ep1, &fp1}, {&ep2, &fp2},{&ep3, &fp3} };
Инициализация немного сложна, зато обращение выглядит просто:
Код
int id =modes[i].f->ModeID;
Хотя можно было объявить массив указателей fpи ep, но хрен редьки не слаще, тогда при его инициализации нужно было указывать что-то вроде
mode_t modes[ NUM_OF_MODE ] = { {&ep, &fp}, {&ep+xx, &fp+yy},{&ep+2*xx, &fp+2*yy} };
где xx, yy размер структур
Цитата(_Pasha @ May 16 2008, 19:50)

А в структуре, которая нужна автору, добавить индексы, по которым можно найти нужные значения из флеша
Код
typedef struct
{
eeprom unsigned short int ModeID_Index; // хватит же 256 доступных мемберов ?
eeprom unsigned short int ModeName_Index;
eeprom int DayTemp[7];
eeprom int NightTemp[7];
eeprom unsigned char StartDayTime[2];
eeprom unsigned char FinishDayTime[2];
}mode_t
Я решил константы записать во флеш, а переменнные в eeprom, поэтому не смог бы применить вашу конструкцию