在学习RTOS的过程中,发现如下表格,即在中断或者异常处理函数中,r14返回EXC_RETURN:

以下是个人的浅显理解:
- 中断处理函数时,MCU进入handler模式,只能使用MSP指针。比如,当发生中断嵌套时,中断返回后进入Handler模式。
- 应用程序时,MCU进入线程模式,可以使用MSP指针或者PSP指针。比如裸机程序使用MSP,FreeRTOS在启动第一个任务之前使用MSP,但是启动任务后使用PSP指针。
- MSP指向的是系统栈,即启动文件中分配的栈空间。其中__initial_sp指向栈底,栈的生长方向从高地址向低地址。
Stack_Size EQU 0xC00
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
__initial_sp
- PSP指向创建任务时,动态或者静态分配的栈空间。
osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 256)
defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL)
|