两个问题:
1:CM3权威指南157页有这样一句话:子程序中可以随意使用R0-R3、R12,若使用R4-R11,必须在使用前PUSH,使用后POP回来,当时想如果子程序如果像响应异常一样就解释得通(响应异常会自动保护现场:依次把xPSR、PC、LR、R12、R0-R3压入堆栈)但网上查了一下,子程序需要手动保护现场,可是os_cpu_a.asm文件中OS_CPU_SR_Save、OS_CPU_SR_Save等函数都没有保护现场,软仿一下,也没发现编译器插入一些保护现场的指令,这样没有问题吗。
2:os_cpu_a.asm文件中OSStartHighRdy函数
LDR R0, =OSRunning ; OSRunning = TRUE
MOVS R1, #1
STRB R1, [R0] ; *((U8*))R0=R1
这几句的目的是将OSRunning置1 ,最后一句的用意相当于*((U8*))R0=R1,可OSRunning时BOOLen型变量,并不是地址。
|