OSStartHighRdy
LDR R4, =NVIC_SYSPRI2 ; set the PendSV exception priority
LDR R5, =NVIC_PENDSV_PRI
STR R5, [R4]
MOV R4, #0 ; set the PSP to 0 for initial context switch call
MSR PSP, R4
LDR R4, =OSRunning ; OSRunning = TRUE
MOV R5, #1
STRB R5, [R4]
;??????×???????????????
LDR R4, =NVIC_INT_CTRL ;rigger the PendSV exception (causes context switch)
LDR R5, =NVIC_PENDSVSET
STR R5, [R4]
CPSIE I ;enable interrupts at processor level
OSStartHang
B OSStartHang ;should never get here
第一:为什么用R4,R5而不像官方移植那样用R0,R1?因为CM3手册上
用汇编写代码时,R0-R3, R12可以随便使用,而使用R4‐R11,
则必须先PUSH,后POP。
第二: EXPORT ItDisAll 好像没用吧?
第三:为什么要用
#if OS_CRITICAL_METHOD == 4
void OS_ENTER_CRITICAL (void);
void OS_EXIT_CRITICAL (void);
#endif
而不用
#if OS_CRITICAL_METHOD == 3 /* See OS_CPU_A.ASM */
OS_CPU_SR OS_CPU_SR_Save(void);
void OS_CPU_SR_Restore(OS_CPU_SR cpu_sr);
#endif
好像两者的效果一样。。。
|