Я не смог найти в Интернете ни одного хорошего документа о программировании STM32. Собственные документы STM не объясняют ничего, кроме функций регистрации. Я буду очень признателен, если кто-нибудь сможет объяснить мои следующие вопросы?
Я заметил, что во всех примерах программ, которые предоставляет STM, локальные переменные для main () всегда определяются вне функции main () (с периодическим использованием ключевого слова static). Есть ли для этого какие-то причины? Следует ли мне следовать подобной практике? Следует ли мне избегать использования локальных переменных внутри основного?
У меня есть глобальная переменная, которая обновляется в дескрипторе прерывания часов. Я использую ту же переменную внутри другой функции как условие цикла. Разве мне не нужно обращаться к этой переменной с помощью некоторой формы атомарной операции чтения? Как я могу узнать, что прерывание часов не меняет своего значения в середине выполнения функции? Должен ли я отменять прерывание часов каждый раз, когда мне нужно использовать эту переменную внутри функции? (Однако мне это кажется крайне неэффективным, поскольку я использую его как условие цикла. Я считаю, что должны быть лучшие способы сделать это).
Keil автоматически вставляет код запуска, написанный на ассемблере (например, startup_stm32f4xx.s). Этот код запуска имеет следующие операторы импорта: IMPORT SystemInit IMPORT __main. В "C" это имеет смысл. Однако в C ++ и main, и system_init имеют разные имена (например, _ int _main__void). Как этот стартовый код может работать на C ++ даже без использования "extern" C "" (я пробовал, и это сработало). Как может компоновщик c ++ (armcc --cpp) связать эти операторы с правильными функциями?