I. 概要:
スタートアップ ファイルは次の主な機能を実行します。
This module performs:
- Set the initial SP //设置初始化堆栈空间
- Set the initial PC == Reset_Handler //设置PC指针
- Set the vector table entries with the exceptions ISR address //设置中断向量表
- Configure the clock system //设置系统时钟
- Branches to __main in the C library (which eventually calls main()). //进入C语言 main()
詳細は、
SCM STM32 スタートアップファイルの詳細解説(アセンブリ言語解析)_MCU スタートアップファイル_KaminLuo のブログ - CSDN ブログを参照してください。
STM32F4 スタートアップ コード分析_mcd アプリケーション チーム_JXDZ のブログ - CSDN ブログ
2. いくつかの重要なポイントと問題点
ポイント1:ベクタテーブルの設定
カーネルが発生した例外に応答すると、対応する例外ハンドラーが実行されます。例外サービス プログラムのエントリ アドレスを決定するために、カーネルはポインタの配列と同様にベクトル テーブルを使用してクエリを実行します。各添え字は例外を表し、内部の値がプログラム アドレスになります。リセット後はレジスタの値が 0 であるため、プログラムの次のジャンプを決定するには 0x0000 0000 にベクタ テーブルが必要となるため、テーブルはアドレス 0x0000 0000 にマップされます。
質問 1: 異常イベントは、対応する割り込み処理関数にどのように対応しますか。つまり、割り込み関数のアドレスを見つけるための添字はどのように生成されますか?
割り込みイベントと割り込み関数の対応は、ハードウェアとソフトウェアの両方によって決まります。
ハードウェア レベルでは、マイクロコントローラーの周辺機器 (タイマー、シリアル ポートなど) が特定の割り込み信号を生成し、これらの割り込み信号が対応する割り込みイベントをトリガーします。たとえば、タイマーがオーバーフローするとタイマー割り込みイベントがトリガーされ、シリアル ポートがデータを受信するとシリアル ポート受信割り込みイベントがトリガーされます。(ハード割り込み)
ソフトウェア レベルでは、開発者は、特定の割り込みが正しくトリガーされるように割り込みコントローラー (NVIC、ネスト ベクトル割り込みコントローラーなど) を構成し、対応する割り込み処理関数を指定する必要があります。(ソフト割り込み)
一般に、割り込みイベントおよび割り込み機能に対応する設定は、次の手順に分かれています。
- 周辺モジュールを設定します。周辺モジュールが割り込みイベントを生成できるように、動作モード、割り込みイネーブル、およびその他のパラメータを設定します。
- 割り込みコントローラを設定します。割り込みコントローラに関連するレジスタまたはソフトウェア インターフェイスを使用して、割り込み優先順位を設定したり、特定の割り込みソースを有効にしたりできます。
- 割り込み処理関数の記述: コード内に割り込み処理関数を記述し、割り込みイベントの種類に応じて対応する動作を実行します。割り込み処理関数のアドレスと割り込み番号のバインドは、通常、メモリベクタテーブルに割り込み処理関数のアドレスを書き込むことで実現されます。
- グローバル割り込みイネーブルを有効にする: 適切な場所でグローバル割り込みイネーブルのスイッチをオンにし、割り込みが正常に応答できるようにします。
具体的な設定方法や操作方法は、ハードウェアプラットフォームやプログラミング言語、開発ツールの違いにより異なる場合があることに注意してください。使用するハードウェアプラットフォームや開発ツールのドキュメントやサンプルプログラムにより、具体的な構成や設定方法を知ることができます。