打印
[牛人杂谈]

uCOS临界处理_开启中断,关闭中断 恢复中断最初状态

[复制链接]
814|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ideafor|  楼主 | 2016-5-18 22:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
解释一下:?
   有两个任务1和2(任务1优先级<任务2优先级),使用了同一个一个全局变量。(有点废话了,全局变量当然是公用的)?

中断来了!中断打断了任务1,中断退出之后,一定退回到任务1继续往下执行吗??
   答案是否定的!!答案是否定的!因为在中断退出前,实现了任务切换,更高优先级的,就绪的任务被执行!!所以说中断退出后,程序可能跳转到任务2!!?
   如果任务2中修改了nGlobalVar变量,那在执行任务1的时候,任务就不会走向刚才的分支结构了。程序就可能出问题!!

方法:?


在执行分支结构之前,禁止中断;在执行完分支结构,才开启中断。

恩,主意不错。可是问题又来了

   
   假设在关闭中断的程序里面调用了subFun()函数,而子函数同样也有关闭中断,开启中断的处理。那么很
有可能在临界区并没有执行完成的条件下,中断被打开了。临界区的一部分被截掉了!!!!


这种情况,又怎么解决呢?


临界处理_关闭中断,恢复中断最初状态                        
接上文,那个问题怎么解决呢?

在上文的主程序中声明一个cpu_sr变量,在subFun函数中也声明一个cpu_sr变量

主程序中:
cpu_sr = ARMCoreDisableIntExt();//cpu_sr开始是开启中断的状态
……
//subFun函数

cpu_sr = ARMCoreDisableIntExt();//cpu_sr此时是关闭中断的状态
……
ARMCoreRestoreIntStatus(cpu_sr );//恢复cpu到关闭中断的状态

……
ARMCoreRestoreIntStatus(cpu_sr );//恢复cpu到开始状态

看看,多巧妙,通过一个局部变量,实现了这个保护临界代码的功能

程序=数据结构 + 算法
沙发
yiyigirl2014| | 2016-5-18 22:48 | 只看该作者
所有的硬件中断都可以在这个系统里面使用吗?

使用特权

评论回复
板凳
玛尼玛尼哄| | 2016-5-31 22:10 | 只看该作者
这书咋样,讲解的好懂不?

使用特权

评论回复
地板
gejigeji521| | 2016-7-27 23:32 | 只看该作者
学ucOS ,要学这个吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

149

帖子

1

粉丝