- Forums
- Resources
- About
- Groups
Close
接着上贴的话题继续聊,
有的工程师知道Cortex M内核有两个Stack Pointer, 有的不知道. 知道这两个Stack Pointer的也不一定对他们各自的特点完全掌握. 本贴简单分享下.
先概述下:
MSP, PSP是两个物理上独立的寄存器, 通过SP或者R13能访问到其中一个,通过MSP, PSP的名字两者都可以访问
同一时刻内核使用其中之一作为Stack Pointer
Handler模式永远使用MSP, Thread模式可以使用MSP,也可以使用PSP,由CONTROL寄存器来控制
复位后所有的Cortex M内核使用MSP, 处于Thread模式
PSP一般用于RTOS隔离内核与用户任务(内核使用MSP, 用户任务使用PSP)
使用PSP不是强制的, 只是为隔离提供方便, 即使是有RTOS的应用, 也可以选择不使用PSP.
Flash的第一个Word是MSP的初始值, 复位后硬件会将其装入MSP, PSP需要用户程序初始化. 因为硬件就配置好了初始的Stack Pointer. 所以Cortex M的启动程序完全可以使用C语言来编写.
某些工具生成的启动文件有装载MSP的语句, 纯属多余,可放心大胆删除掉.
/* ================== START OF VECTOR ROUTINES ============================= */ .align 1 .thumb /* Reset Handler */ .thumb_func .globl Reset_Handler .type Reset_Handler, %function Reset_Handler: ldr sp,=__initial_sp #ifndef __SKIP_SYSTEM_INIT ldr r0, =SystemInit blx r0 #endif
只有注册用户才能在此添加评论。 如果您已经注册,请登录。 如果您还没有注册,请注册并登录。