问题1 ,PSP = 0 是为了设置一个标志, 应该 PendSV 会对这个标志判断,以初始化任务的堆栈。不过这是猜测。因为我手头的 UCOS 代码不是你这样的。而是下面这样:
OSStartHighRdy
LDR r0, =OSRunning ; OSRunning = 1
MOV r1, #1
STRB r1, [r0]
LDR r5, =OSTCBHighRdy ; Get highest priority task TCB address
LDR r5, [r5] ; get stack pointer
LDR sp, [r5] ; switch to the new stack
POP {r3-R12}
LDR r0, [sp,#0x1c]
MSR apsr, r0
POP {r0-r3,r12,r14}
ADD sp,sp,#8
bx lr
问题2: 分析完全正确。
|