STM32 プログラミングに関する適切なドキュメントがインターネット上で見つかりませんでした。STM 自身のドキュメントには、レジスタ機能以外の説明はありません。誰かが私の次の質問を説明していただければ幸いです。
STM が提供するすべてのサンプル プログラムで、main() のローカル変数は常に main() 関数の外で定義されていることに気付きました (ときどき static キーワードを使用します)。その理由はありますか?同様の慣行に従う必要がありますか?メイン内でローカル変数を使用しないようにする必要がありますか?
クロック割り込みハンドル内で更新されるグローバル変数があります。別の関数内で同じ変数をループ条件として使用しています。何らかの形式のアトミック読み取り操作を使用して、この変数にアクセスする必要はありませんか? 関数の実行中にクロック割り込みの値が変化しないことをどのように確認できますか? 関数内でこの変数を使用する必要があるたびに、クロック割り込みをキャンセルする必要がありますか? (ただし、ループ条件として使用しているため、これは非常に効果がないように思えます。より良い方法があるはずです)。
Keil は、アセンブリで記述されたスタートアップ コード (つまり、startup_stm32f4xx.s) を自動的に挿入します。このスタートアップ コードには、次のインポート ステートメントがあります。 IMPORT SystemInit IMPORT __main .「C」では、意味があります。ただし、C++ では、main と system_init の名前が異なります (例: _ int _main__void)。このスタートアップ コードは、「extern "C"」を使用しなくても C++ で機能することができます (私が試したところ、機能しました)。c++ リンカ (armcc --cpp) はどのようにしてこれらのステートメントを正しい関数に関連付けることができますか?