问题1:JumpAddress 地址为什么指向 APPLICATION_ADDRESS + 4 ; MSP 主堆栈指针为什么指向 APPLICATION_ADDRESS ;问题2:为什么需要做以下判断7 z4 ^, ]: ?' ^- g5 x) k$ i
- if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000) {
( k2 f! L' `/ ^4 H6 f0 _ - }
复制代码
9 i$ ?$ }( p& l6 S$ n6 n问题1分析:
% a' v& O7 U3 E, ^/ _$ q从startup_stm32f4xx.s 中的启动代码可以看出:程序开始第一条指令地址为 CSTACK,第二条指令地址为复位指令
1 F! \( L. P4 c1 q' p* s! F' O! l, @- EXTERN iar_program_start EXTERN SystemInit$ l( K5 N* x" J# a2 U* W' U* a# f2 D
- PUBLIC vector_table& g$ V2 p( r8 T/ {2 ~
+ L t3 E$ \- m/ X& m$ z k8 i2 S- DATA# I; M i. @' l0 d% ]
- vector_table
4 H! l) b+ @$ n. x0 A* v% Z3 o6 k - <font color="#ff0000">DCD sfe(CSTACK) ; APPLICATION_ADDRESS</font>9 w( I4 K. n1 H& y; o7 y' z( k
- <font color="#0000ff">DCD Reset_Handler ; Reset Handler ; APPLICATION_ADDRESS + 4</font>
+ A; n3 [) D; v) y* E$ F" O. q2 b
~) ~: u/ }$ U' }5 a- G6 x5 D1 L6 _; z- DCD NMI_Handler ; NMI Handler; [3 i- `. W% a9 g
- DCD HardFault_Handler ; Hard Fault Handler DCD MemManage_Handler ; MPU Fault Handler DCD BusFault_Handler ; Bus Fault Handler DCD UsageFault_Handler ; Usage Fault Handler DCD 0 ; Reserved$ v/ C# F c1 K. I/ l
- DCD 0 ; Reserved9 s, O( _4 @! R
- DCD 0 ; Reserved
/ R: c! Q) N# A* b, f7 h - DCD 0 ; Reserved+ u J+ G1 Z# T$ L; S8 q
- DCD SVC_Handler ; SVCall Handler
: y& J. l4 m% |$ h1 A1 {9 A; q - DCD DebugMon_Handler ; Debug Monitor Handler: H: ~9 m, w$ k9 W- [& G: F, n
- DCD 0 ; Re served# @" F& v+ | z% P8 c9 Z
- DCD PendSV_Handler ; PendSV Handler8 I$ B& m! S ~9 {) i/ Q% J6 |
- DCD SysTick_Handler ; SysTick Handler0 ~; e5 `) k' L1 c
% |! f5 |% r F# |
复制代码 当程序启动时首先要执行复位程序,因此 JumpAddress 地址指向复位指令地址(即APPLICATION_ADDRESS + 4) ; MSP 对应的是主堆栈指针,指向 CSTACK 地址(即 APPLICATION_ADDRESS)." ]! y) Q- R ^8 d
M9 e2 E3 O: S3 X3 X0 L- S0 h$ |* ]7 J2 l# q/ h8 n/ B& N
问题2分析:ApplicationAddress 存放的是程序的主堆栈地址,CSTACK 堆栈地址指向 RAM,而 RAM 的 起始地址是 0x20000000; 因此上面的判断语句执行:判断用户代码的堆栈地址是否落在:0x20000000~0x2001ffff 区间 中,这个区间的大小为 128K., L& s, z% z$ F0 k7 w8 f
. w, T0 z* n1 k- m4 \2 i N
STM32 MCU IAPä¾ç¨è·³è½¬å°APP代ç ç®è¦åæ.pdf
(38.67 KB, 下载次数: 22)
|