查帖子有人发过这样的一段代码:
OS_ENTER_CRITICAL
CPSID I ; Disable all the interrupts
  USH {R1,R2}
LDR R1, =OSInterrputSum ; OSInterrputSum++
LDRB R2, [R1]
ADD R2, R2, #1
STRB R2, [R1]
  OP {R1,R2}
BX LR
;/***************************************************************************************
;* 函数名称: OS_EXIT_CRITICAL
;*
;* 功能描述: 退出临界区
;*
;* 参 数: None
;*
;* 返 回 值: None
;*****************************************************************************************/
OS_EXIT_CRITICAL
  USH {R1, R2}
LDR R1, =OSInterrputSum ; OSInterrputSum--
LDRB R2, [R1]
SUB R2, R2, #1
STRB R2, [R1]
MOV R1, #0
CMP R2, #0 ; if OSInterrputSum=0,enable
; interrupts如果OSInterrputSum=0,
MSREQ PRIMASK, R1
POP {R1, R2}
BX LR
以上代码不知是什么版本的。
现在战舰版的例程中只看到 OS_CPU_EXT INT32U OSInterrputSum;的声明,没用应用到。请问原子是这回事吗 |