STM 32 F 4 XX起動ファイル分析
STM 32 F 4 XX起動ファイル分析-STM 32 F 4 XX起動ファイルダウンロードアドレス
リード:STM 32 F 4 XX起動ファイルの役割初期化設定SP、すなわちスタックポインタ 初期化設定PCポインタリセット割込み処理関数、すなわちPC=Reset_Handler 割り込みサービスプログラム(ISR)アドレスを導入する割り込みベクトルテーブル を設定する.システムクロックとSTM 324 xG-EVALボードに外部からマウントSRAMをデータストレージとして使用し、外部で完了したSysteminitは を完了する. Cライブラリへ移動_main、すなわちmain()関数でコードの実行を行う CortexM 4をリセットすると、プロセッサはスレッドモードになり、特権優先度となり、スタックは、ビットMSPメインスタック に設定される.
1、スタックの設定
アドレッシング方式
説明
pop=LDM
push=STM
FA
フルインクリメント
LDMFA
LDMDA
STMFA
STMIB
FD
ぜんげんすい
LDMFD
LDMIA
STMFD
STMDB
EA
Nullインクリメント
LDMEA
LDMDB
STMEA
STMIA
ED
空の減算
LDMED
LDMIB
STMED
STMDA
フルインクリメント:SPは最後の押し込まれた要素を指し、SPはメモリアドレスの増加方向にフルインクリメント:SPは最後の押し込まれた要素を指し、SPはメモリアドレスの減少方向に空インクリメントを増加する:SPは最後の押し込まれた要素の次の空のアドレスを指す.SPはメモリアドレスの増加方向に空の減少を増加します:SPは最後の押し込まれた要素の次の空のアドレスを指して、SPはメモリアドレスの減少方向に増加します
2、ヒープの設置
3、位置合わせと指令セットの設定
4、割込みベクトルテーブルの設定
5、割込みベクトル関数の構築
6、ユーザースタックとスタックの初期化
7、プロセス全体の分析まずスタックを割り当て、スタック 割り込みベクトルテーブルセグメント を設定する.初期化スタック(外部呼び出し) は割り込み処理関数を構築し、コードセグメント(割り込みリセット処理関数が含まれており、システム全体を初期化しmain()関数にジャンプして実行できる) を構築する.
リード:STM 32 F 4 XX起動ファイルの役割
1、スタックの設定
Stack_Size EQU 0x00000400 ; 1024
AREA STACK, NOINIT, READWRITE, ALIGN=3 ; STACK, , ,8
;AREA ,ALIGN = 3, 2 3 , 8
Stack_Mem SPACE Stack_Size ; , 1024 , Stack_Mem
__initial_sp ; , , ,STM32
アドレッシング方式
説明
pop=LDM
push=STM
FA
フルインクリメント
LDMFA
LDMDA
STMFA
STMIB
FD
ぜんげんすい
LDMFD
LDMIA
STMFD
STMDB
EA
Nullインクリメント
LDMEA
LDMDB
STMEA
STMIA
ED
空の減算
LDMED
LDMIB
STMED
STMDA
フルインクリメント:SPは最後の押し込まれた要素を指し、SPはメモリアドレスの増加方向にフルインクリメント:SPは最後の押し込まれた要素を指し、SPはメモリアドレスの減少方向に空インクリメントを増加する:SPは最後の押し込まれた要素の次の空のアドレスを指す.SPはメモリアドレスの増加方向に空の減少を増加します:SPは最後の押し込まれた要素の次の空のアドレスを指して、SPはメモリアドレスの減少方向に増加します
2、ヒープの設置
Heap_Size EQU 0x00000200 ; 512
AREA HEAP, NOINIT, READWRITE, ALIGN=3 ; HEAP, , ,8
__heap_base ;
Heap_Mem SPACE Heap_Size ;
__heap_limit ;
3、位置合わせと指令セットの設定
PRESERVE8 ; 8
THUMB ; THUMB , THUMB
4、割込みベクトルテーブルの設定
AREA RESET, DATA, READONLY ; RESET, , , 8 , PRESERVE8
EXPORT __Vectors ;
EXPORT __Vectors_End ;
EXPORT __Vectors_Size ; ,
;EXPORT ( linux EXPORT_SYMBOL(symbol))
;DCD , , 8
__Vectors DCD __initial_sp ; ,
DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; NMI Handler
DCD HardFault_Handler ;
DCD MemManage_Handler ; MPU
DCD BusFault_Handler ;
DCD UsageFault_Handler ;
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD SVC_Handler ; SVCall Handler
DCD DebugMon_Handler ; Debug Monitor Handler
DCD 0 ; Reserved
DCD PendSV_Handler ; PendSV Handler
DCD SysTick_Handler ;
; STM32
; External Interrupts
DCD WWDG_IRQHandler ; Window WatchDog
... ...
DCD HASH_RNG_IRQHandler ; Hash and Rng
DCD FPU_IRQHandler ; FPU
__Vectors_End ;
__Vectors_Size EQU __Vectors_End - __Vectors ;
5、割込みベクトル関数の構築
AREA |.text|, CODE, READONLY ; .text(C .text, C ), ,
; Reset handler
Reset_Handler PROC
EXPORT Reset_Handler [WEAK] ;WEAK, ,
IMPORT SystemInit ; SystemInit
IMPORT __main ; __main , main()
LDR R0, =SystemInit
BLX R0 ;
LDR R0, =__main
BX R0 ;
ENDP
; Dummy Exception Handlers (infinite loops which can be modified)
NMI_Handler PROC
EXPORT NMI_Handler [WEAK]
B . ;
ENDP
... ... ... ...
6、ユーザースタックとスタックの初期化
ALIGN ; , 4
;*******************************************************************************
; User Stack and Heap initialization
;*******************************************************************************
IF :DEF:__MICROLIB ; ( keil option target )
EXPORT __initial_sp ;
EXPORT __heap_base ;
EXPORT __heap_limit ;
ELSE
IMPORT __use_two_region_memory ; __use_two_region_memory
EXPORT __user_initial_stackheap ; __user_initial_stackheap
__user_initial_stackheap
LDR R0, = Heap_Mem ;
LDR R1, =(Stack_Mem + Stack_Size) ;
LDR R2, = (Heap_Mem + Heap_Size) ;
LDR R3, = Stack_Mem ;
BX LR ; mov pc, lr
; , ARM
ALIGN
ENDIF
END
7、プロセス全体の分析