スタートアップコードの処理
テクニカル・ノート 181205J
アーキテクチャ:
All
コンポーネント:
compiler
更新日:
2018/12/18 6:22
はじめに
スタートアップ時の処理内容について説明します。
解説
スタートアップ時の処理内容(__iar_program_start ~ main()まで)については、下記のとおりです。
Cortex-M0/M3/M4 VectorTable: thumb¥vector_table_M.s or thumb¥cstartup_M.c __iar_program_start //Reset
→
デフォルトプログラムエントリ:thumb¥cstartup_M.s or thumb¥cstartup_M.c
void __iar_program_start(void)
{
__iar_init_core();
__iar_init_vfp();
__cmain();
}
→
main()前の初期化:thumb¥cmain.s
void __cmain(void)
{
__low_level_init();
__iar_data_init3();
main();
}
→
User’s Application: main.c
int main(void) { … }
該当のソースコードは、Embedded Workbench for Armインストール先のarm¥arm¥src¥libフォルダ以下に格納されています。
製品版ライセンスの場合、Embedded Workbench for Arm 6.50以降(LMS2)では、ライブラリファイルの抽出を行ってください。また、それ以前のバージョンでは製品版インストーラをご使用ください。評価版ライセンスの場合、一部含まれないファイルがあります。
- main()実行前の初期化処理内容
主な初期化フェーズは下記の項目となります。
・スタックポインタの設定
・変数をゼロで初期化
・変数の初期化
・main()の呼び出し
- 初期化処理のデバッグ
[プロジェクト]->[オプション]->[デバッガ]->[設定]
内の「指定位置まで実行」のチェックを外すとリセット直後からプログラムが開始します。
初期化処理のソースコードを直接ワークスペース内にドロップすることで初期化コードを確認でき、初期化処理内のデバッグ作業を可能にします。
テクニカルーノート作成対象製品:Embedded Workbench for Armバージョン:8.32.1
まとめ
main()実行前の初期化処理について説明しました。
全ての製品名は、それぞれの所有者の商標または登録商標です