#define OS_CRITICAL_METHOD 3 //
#define OS_ENTER_CRITICAL() {cpu_sr = OS_CPU_SR_Save(); }
#define OS_EXIT_CRITICAL() {OS_CPU_SR_Restore(cpu_sr)}
OS_ENTER_CRITICAL()
...................................... //临界区(中断被屏蔽,避免有其他任务或中断进入临界区)
OS_EXIT_CRITICAL()
例如函数 OS_CPU_SR OS_CPU_SR_Save(void); // 函数在汇编实现,用EXPORT关键字在C调用
C代码
OS_CPU_SR OS_CPU_SR_Save(void);
汇编代码
EXPORT OS_CPU_SR_Save ;
OS_CPU_SR_Save
MRS R0,CPSR ; Set IRQ and FIQ bits in CPSR to disable all interrupts
ORR R1,R0,#NO_INT
MSR CPSR_c,R1 ; 关IRQ和FIQ中断
MRS R1,CPSR ; Confirm that CPSR contains the proper interrupt disable flags
AND R1,R1,#NO_INT
CMP R1,#NO_INT
BNE OS_CPU_SR_Save ; Not properly disabled (try again)
BX LR ; 函数返回,根据规则返回值在R0中(RO中保存关中断前CPSR值)