标签:
其实很简单:
OS_cpu_a.asm文件中:
1 OS_ENTER_CRITICAL 2 CPSID I ;Disable all the interrupts 3 PUSH {R1,R2} 4 LDR R1,=OSInterrputSum;OSInterrputSum++ 5 LDRB R2,[R1] 6 ADD R2, R2,#1 7 STRB R2,[R1] 8 POP {R1,R2} 9 BX LR
1 ;/*************************************************************************************** 2 ;* 函数名称: OS_EXIT_CRITICAL 3 ;* 4 ;* 功能描述: 退出临界区 5 ;* 6 ;* 参 数: None 7 ;* 8 ;* 返 回 值: None 9 ;*****************************************************************************************/ 10 OS_EXIT_CRITICAL 11 PUSH {R1, R2} 12 LDR R1,=OSInterrputSum;OSInterrputSum-- 13 LDRB R2,[R1] 14 SUB R2, R2,#1 15 STRB R2,[R1] 16 MOV R1,#0 17 CMP R2,#0 ; if OSInterrputSum=0,enable 18 ; interrupts如果OSInterrputSum=0, 19 MSREQ PRIMASK, R1 20 POP {R1, R2} 21 BX LR
1 #define OS_CRITICAL_METHOD 3 2 #if OS_CRITICAL_METHOD == 3 3 #define OS_ENTER_CRITICAL() {cpu_sr = OS_CPU_SR_Save();} 4 #define OS_EXIT_CRITICAL() {OS_CPU_SR_Restore(cpu_sr);} 5 #endif 6 ;函数返回值存储在R0中 7 OS_CPU_SR_Save 8 MRS R0, PRIMASK ;保存全局中断标志 ; Set prio int mask to mask all (except faults除了故障中断) 9 CPSID I ;关中断 10 BX LR 11 ;通过R0传递参数 12 OS_CPU_SR_Restore 13 MSR PRIMASK, R0 ;恢复全局中断标志 14 BX LR
标签:
原文地址:http://www.cnblogs.com/cposture/p/4291510.html