[ACON][要約]組み込みシステムアーキテクチャネットワークの組み込みシステム基礎Chapter 4-Boot-upプロセス
4.1. IVT (Interrupt Vector Table)
4.2. 手順1:メモリレイアウト
リンクスパイラルナイフの
.text
には、まずIVTに関する部分が含まれるべきである..text : {
*(.isr_vector),
*(.text),
*(.rodata)
} > FLASH // Flash에 할당되는 읽기전용 내용들
システムを起動するには、まずIVTを実行し、reset handler関数を実行します.これにより、
.bss
、.data
節で定義された要素を初期化することができるからである.したがって、.text
の一番上には、flashで読み取り専用の.isr_vector
を指すポインタがあるはずです.4.3. ステップ2:起動コード
IVTは、GCCのattribute
section
を使用して定義される. __attribute__ ((section(".isr_vector")))
void (* const IV[])(void) {
(void (*)(void))(END_STACK), // Stack pointer 초기값 지정
isr_reset,
isr_nmi,
...
}
// ISR은 parameter도 return도 없다.
void isr_reset(void) {
/*...구현...*/
while(1) {}
}
// 사용자 정의 ISR 또는 빈 ISR은 오버라이드 될 수 있도록 __weak 심볼을 사용한다.
void isr_user(void)__weak {
/*...구현...*/
while(1) {}
}
MCUが電源を入れると、IVTの上部に定義されたreset handlerが最初に動作します.
.data
と.bss
節の初期化を実行します!.bss
セグメントを0
セグメントに初期化し、.data
セグメントおよび.bss
セグメントをRAMの実際のセグメントにコピーする.main()
関数を呼び出すことができる.Rinker Scripterは、仮想メモリアドレス(VMA)とLoad Memory Address(LMA)を分離するメカニズムを提供します.もちろん、MCUにはMMUがないので、いずれも物理アドレスであるが、flashで定義された
.data
のアドレスはコンパイル時に実際のRAMにマッピングされた位置を決定できないため、このメカニズムが必要である.AT
キーワードと_stored_data
という名前のRinker scriptor変数を使用します.△内容が複雑で、翻訳が難解で、それだけでスキップした.4.4. ステップ3:スタックの割り当て
END_STACK
という未使用RAM領域の終了アドレスが格納されている.IVTはflashに格納されており、実行時に計算できないため、予め定義された定数値である必要があります.(複数のブートおよびマルチシステムデバッグ、および
.utils
共有ライブラリの内容は省略する.)Reference
この問題について([ACON][要約]組み込みシステムアーキテクチャネットワークの組み込みシステム基礎Chapter 4-Boot-upプロセス), 我々は、より多くの情報をここで見つけました https://velog.io/@embeddedjune/에이콘요약-임베디드-시스템-아키텍처-사물인터넷을-위한-임베디드-시스템의-기초-Chapter-4-Boot-up-Processテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol