大家好,在移植到STM32的UCOS项目里有一段代码我看不懂,向大家请教:
OSStartHighRdy
MOVS R0, #0 ; Set the PSP to 0 for initial context switch call
MSR PSP, R0
LDR R0, __OS_Running ; OSRunning = TRUE
MOVS R1, #1
STRB R1, [R0]
LDR R0, =NVIC_INT_CTRL ; Trigger the PendSV exception (causes context switch)
LDR R1, =NVIC_PENDSVSET
STR R1, [R0]
CPSIE I ; Enable interrupts at processor level
OSStartHang
B OSStartHang ; Should never get here
问题1:为什么把PSP初始化为0?既然使用递减堆栈,我觉得应该初始化到最高地址才对,所以不明白。
问题2:程序最后有一个无限循环,注释说永远不应该运行到这里,为什么?是不是因为开中断了,所以程序会跳到PendSV的中断服务程序里? |