yuzhongzhen 发表于 2018-3-29 10:11:54

MDK临界区

转载请注明出处:http://blog.csdn.net/wqx521
Keil临界区


view plain copy



[*]/*********************************************************************************************************
[*]** 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检查是否开中断   */

有种类似于互斥锁的感觉,就是这段代码不能被中断打断。这两个接口保证了代码的原子性。

----------------------------------华丽的分界线-----------------------------北京万邦易嵌科技有限公司:专业提供单片机、M3/M4、linux、Android、QT技术服务、技术培训。详细咨询请加QQ:715493858
页: [1]
查看完整版本: MDK临界区