这两天闲来无事,正在移植uCOS-II,看见很多人这样实现进入与退出临界区的两个函数:
“*OS_ENTER_CRITICAL()&OS_EXIT_CRITICAL().这两个函数分别是退出临界区和进入临界区的宏指令实现。主要用于在进入临界区之前关闭中断,在退出临界区的时候恢复原来的中断状态。它的实现比较简单,可以直接开关中断来实现,也可以通过保存关闭/ 恢复中断屏蔽位来实现。”
如果进入临界区的时候用关闭中断、退出临界区的时候再打开中断来实现,是否会造成这种情况发生:代码在临界区的运行时间过长,造成此中断长时间不可用?
如果用如下方式实现不更好:
1、进入临界区时:关中断->检查临界资源是否被占用->未被占用则标志使用临界资源->开中断;
2、根据步骤1使用或者不使用临界资源;使用完毕后进入步骤3,若不使用则其他处理;
3、退出临界资源:关中断->标志临界资源可用->开中断
其中1和3用同一个中断。
临界资源只是需要互斥使用而已啊,为什么有些处理方式是长时间禁止中断呢?
还在深入理解ARM处理器中,此稚嫩的疑问先做记录,带全面理解ARM处理器后需解开此疑问。