请问下,UCOS的任务堆栈结构应该要与相应的硬件平台一致吧?
我使用的已经硬件平台是STM32,我在看他os_cpu_a.asm的汇编文件发现,OS_CPU_PendSVHandler_nosave
PUSH {R14} ; Save LR exc_return value
LDR R0, =OSTaskSwHook ; OSTaskSwHook();
BLX R0
POP {R14}
LDR R0, =OSPrioCur ; OSPrioCur = OSPrioHighRdy;
LDR R1, =OSPrioHighRdy
LDRB R2,
STRB R2,
LDR R0, =OSTCBCur ; OSTCBCur= OSTCBHighRdy;
LDR R1, =OSTCBHighRdy
LDR R2,
STR R2,
LDR R0, ; R0 is new process SP; SP = OSTCBHighRdy->OSTCBStkPtr;
LDM R0, {R4-R11} ; Restore r4-11 from new process stack
ADDS R0, R0, #0x20
MSR PSP, R0 ; Load PSP with new process SP
ORR LR, LR, #0x04 ; Ensure exception return uses process stack
CPSIE I
BX LR ; Exception return will restore remaining context
这个时候的PSP指向的栈结构从顶部到底部依次存放R0,R1,R2,R3,R12,R14,Entry Point,xPSR;我的问题是当他离开systickISR时,他是否应该先使用出栈指令弹出R0,R1,R2,R3,R12,R14;使SP指向Entry point?...换个角度想,也就是任务的堆栈结构与程序的本身的堆栈结构必须是一致的...不知道是不是?..请各位提供点意见{:handshake:} entry point是什么玩意?
建立任务时的堆栈结构是山寨中断时的堆栈结构的。
R0,R1,R2,R3,R12,R14,Entry Point,xPSR这些是中断时硬件自动入栈的,同理在执行中断返回时这些会按相反顺序自动出栈 SNOOKER 发表于 2012-10-21 20:42 static/image/common/back.gif
entry point是什么玩意?
建立任务时的堆栈结构是山寨中断时的堆栈结构的。
R0,R1,R2,R3,R12,R14,Entry Poi ...
谢谢...刚才自己仔细分析。。弄懂了
页:
[1]