Жил-был проект, функция SystemInit была самодельная, задавала частоту PLL и от нее частоты шин. Дальше выполнялась __main, задавала переменные, и переходила к Main.
Решил я добавить в SystemInit инициализацию FSMC (контроллера внешней памяти). Не могу вспомнить, зачем. Вроде, что-то не инициализировалось. [Кстати, стандартная SystemInit тоже так делает.] Заодно и всю остальную периферию инициализировал. До выполнения __main. И теперь эта __main очищает мои переменные, отвечающие за режимы работы прибора, лежащие во внутренней Backup SRAM. Предполагаю, что раньше она просто не могла добраться до этих переменных.
Что наблюдаю в отладчике: Жму Reset - переменные заполнены абракадаброй, но это не настоящее их содержимое, просто доступа нет. После выполнения SystemInit читается их реальное значение, бывшее до сброса. После выполнения __main все эти переменные обнуляются!
Вопрос - что, так и должно быть? И раньше не обнулялись переменные только оттого, что __main не могла до них добраться? В исходниках переменные описаны с атрибутами, в скаттере секции описаны, переменные положены, куда положено (

)... Типа, вот так:
volatile uint32_t Signature __attribute((section("backup")));
RW_IRAM2 0x40024000 UNINIT 0x00001000 { ; Backup RAM
Main.o (backup)
}
Да, имею вариант вернуться к прежней SystemInit. Но для чего-то мне же понадобилось инициализировать контроллер внешней памяти до __main...
Как заставить Keil не инициализировать избранные глобальные переменные?