该模板,os_cpu_a.asm
OS_EXIT_CRITICAL
PUSH {R1, R2}
LDR R1, =Os_Enter_Sum ; Os_Enter_Sum--
LDRB R2, [R1]
SUB R2, R2, #1
STRB R2, [R1]
MOV R1, #0
CMP R2, #0
IF OS_CRITICAL_INT_PRIO > 0
MSREQ BASEPRI, R1
ELSE
MSREQ PRIMASK, R1
ENDIF
POP {R1, R2}
BX LR
改函数有问题, MSREQ PRIMASK, R1 会无条件执行, 即使R2不等于0,也会执行。只是给的例程很难发现这个错误而已。 |