Цитата(sinc_func @ Oct 20 2011, 09:03)

RW_IRAM1 0x10000000 0x00008000 { ; RW data
.ANY (+RW +ZI)
}
}
+ZI управляет нулевой инициализацией
Просто ZI убрать - не катит, остальную память чистить надо.
А вот так:
RW_IRAM1 0x10000000 0x00007f00 { ; RW data
.ANY (+RW +ZI)
}
RW_IRAM2 0x10007f00 0x00000100 { ; RW data no-zi
.ANY (+RW)
}
а потом принудительно в IRAM2 положить нужное - от того как сейчас почти не отличается...
В одном - в инклюдах: #define prev_state (*((PREV_STATE*)0x10007f00))
В другом - __attribute__((section("RW_IRAM2"))) PREV_STATE prev_state;
В обоих случаях правятся конфиги линкера, что чревато. Через пару лет забудешь, перетащишь эти исходники в другой проект - проблем не оберешься.
Цитата(Harvester @ Oct 20 2011, 09:19)

В микрочиповском C30, который по-сути GCC, есть такие атрибуты, как
__attribute__((noload)) - выделить место под переменную, но не инициализировать ее
__attribute__((persistent)) - не инициализировать и не обнулять переменную при старте
Наверное и в Keil-е должно быть что-то похожее.
warning: #1207-D: attribute "persistent" ignored
warning: #1207-D: attribute "noload" ignored
Если и есть - я не нашел. Полдня в документации копался.