嵌入式技术william hill官网
直播中

juju宇哥

8年用户 1394经验值
擅长:479809
私信 关注
[问答]

如果MSP里没有值,那中断向量表里的堆栈指针从哪来呢

放弃芯片启动到第一次上下文切换之前的栈内容,将 MSP 设置启动时的值 这一段是rtt标准版里的内容

LDR r0, =SCB_VTOR
LDR r0, [r0]
LDR r0, [r0]
MSR msp, r0

第一条是把SCB_VTOR寄存器的地址放在r0里,

第二条是把r0处地址的内容放进r0,也就是把SCB_VTOR的内容放进r0

第三条是把r0处地址的内容放进r0,因为SCB_VTOR存放的是中断向量表相对0x0000 0000的偏移地址,如果把中断向量表理解成数组,所以就相当于把中断向量表的第一个元素放进r0,而根据启动文件,中断向量表第一个元素是堆栈指针,第二个是复位函数
我的理解正确吗?

把中断向量表里的堆栈指针放到MSP寄存器里,像鸡生蛋还是蛋生鸡,堆栈指针最开始是在哪呢?如果MSP里没有值,那中断向量表里的堆栈指针从哪来呢?

回帖(3)

张红

2022-10-12 10:10:33
看启动代码入口第二个U32
举报

juju宇哥

2022-10-12 10:10:45
什么意思,启动代码是一个文件,没有参数啊
举报

张红

2022-10-12 10:10:56
说错了,是在第1个

__Vectors       DCD     __initial_sp               ; Top of Stack
                DCD     Reset_Handler              ; Reset Handler
                DCD     NMI_Handler                ; NMI Handler
举报

更多回帖

发帖
×
20
完善资料,
赚取积分