есть задача:
есть программа, использующая массив констант. Массив большой, 2кб. В разных устройствах на ATMEGA8, программа одна и та же, а массив меняется. Хотелось бы сделать так, чтобы не приходилось заново компилировать программу в IAR, а разместить массив со 2-го килобайта флеш и задать достаточно большим чтобы туда гарантированно уместился массив. Далее, прошивая процессор, сначала прошивать программу во все устройства, а потом дошивать по смещению код. Таким образом, пользователям нужно будет только зашивать программу и бинарный массив бывшего EEPROM. Компилятор IAR им будет не нужен.
Чтобы было понятнее, ATMEGA8 ранее использовала EEPROM для хранения массива, а теперь его хочется хранить внутри, так как по сути он статичный, и сама программа атмеги его изменять не будет.
Вот примерно как я пытаюсь сделать (2000 байт резервирую с адреса 2048):
__flash const unsigned char ee_content [2000] @2048;
Но в этом случае компилятор инициализирует его нулями и пихает в выходной HEX портянку нулей, естественно после прошивки такого что-то записать по этим адресам во флеш нельзя.
Писать портянку 0xFF и так 2000 раз как-то неприятно.
Конструкция типа
__no_init __flash const unsigned char ee_content [2000] @2048;
не работает, так как совместное использование __no_init и __flash не одобряет компилятор.
Как заставить IAR разместить во флеш 2 кило неинициализируемого массива, с определенного адреса, и при выполнении кода в атмеге иметь на него указатель?