Выссказывания IgorKossak относились к автору.
Автор не указывал, что у него нет обращения к переменной. То есть при объявлении типа:
__eeprom unsigned char zast[4] = {23,34,56,78};
и обращении типа
i=zast[j];
компилятор всё разместит как надо и сформирует оба файла. У меня, кпримеру, всё прекрасно формируется. Можно также явно указать адресс размещения этого массива. Либо посредством прямого указания (через @) либо адресуя сегмент соответствующий.
Всё это чётко описано в документации. Последовательность размещения переменных в EEPROM будет соответствовать последовательности объявления соответствующих переменных. Можно размещать и структуру в EEPROM. Для этого ключевое слово __eeprom должно быть вынесено за поле объявления. Не допускается только растусовка полей (одно в EEPROM, другое в ОЗУ), что совершенно очевидно и так. Хотя чётко описано в документации.
Цитата
STRUCTURES AND MEMORY TYPES
For structures, the entire object is placed in the same memory type. It is not possible to
place individual structure members in different memory types.
In the example below, the variable gamma is a structure placed in eeprom memory.
struct MyStruct
{
int alpha;
int __flash * beta; /* Pointer to variables in flash memory */
};
__eeprom struct MyStruct gamma;
The following declaration is incorrect:
struct MySecondStruct
{
int blue;
__eeprom int green; /* Error! */
};