Keil临界区
/*********************************************************************************************************
** Function name: __ENTER_CIRTICAL, __EXIT_CIRTICAL
** Descriptions: 临界区代码保护宏
** input parameters: 返回总中断标志 , 原总中断标志
** Descriptions: 必须成对调用,这对宏之间的操作将关闭总中断,退出临界区后恢复原总中断设置
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
/* 对应KEIL/RVMDK */
__asm unsigned char __enterCirtical(void)
{MRS R0, PRIMASK /* 返回原总中断的状态 */CPSID I /* 关闭总中断 */BX LR
}
__asm void __intEnable()
{CPSIE I /* 打开总中断 */BX LR
}#define __ENTER_CIRTICAL() __enterCirtical() /* 进入临界区关闭总中断 */
#define __EXIT_CIRTICAL(isEnable) if(isEnable == 0) {__intEnable();} /* 根据isEnable检查是否开中断 */
有种类似于互斥锁的感觉,就是这段代码不能被中断打断。这两个接口保证了代码的原子性。