中级会员
- 积分
- 487
- 金钱
- 487
- 注册时间
- 2017-12-25
- 在线时间
- 105 小时
|
发表于 2018-4-2 16:28:10
|
显示全部楼层
本帖最后由 Lyanzh 于 2018-4-2 16:29 编辑
一些临时变量也要保存在任务堆栈里吧,应该有更深层的原因,我也不是很清楚,请楼主去探究。
至于任务控制块和任务堆栈的关系,任务控制块是为了方便管理任务而设的结构体,任务堆栈用来在任务切换时保存和恢复任务现场。在这里,任务控制块的第一项就是任务堆栈的地址指针,方便汇编代码的操作,请看这里:
------------------------------
PendSV_Handler
CPSID I ; Prevent interruption during context switch
MRS R0, PSP ; PSP is process stack pointer
CBZ R0, PendSVHandler_nosave ; Skip register save the first time
SUBS R0, R0, #0x20 ; Save remaining regs r4-11 on process stack
STM R0, {R4-R11}
LDR R1, =OSTCBCurPtr ; OSTCBCurPtr->OSTCBStkPtr = SP;
LDR R1, [R1]
STR R0, [R1] ; R0 is SP of process being switched out
-------------------------------
OSTCBCurPtr就是任务堆栈的地址
我也只会这么多了... |
|