ucos OS_ENTER_CRITICAL

 

 今天又看了一下ucos保护临界段代码,ucos是利用禁止中断来保护临界段的。

ucos给我们提供了三种方法:

一:直接关中断和直接开中断。即成对使用,保证临界段的安全。

二:先把原来的中断状态压入栈中,然后再关闭中断。恢复时直接从栈中返回原来存储的中断状态。

三:先保存原来的中断状态到一个变量中,然后再关闭中断。

 

三种情况我都说完了,下面我说一下为什么有这三种形态:

其实,这三种方法从应用上可分为两种,可嵌套和不可嵌套。

其实大家分析一下,所谓保护临界段代码就是关中断,在操作系统内部本身就是关中断、然后开中断。这是没有问题的,但大家想一下,操作系统给用户提供了一些编程接口,当用户希望用同样关中断的方法来保护共享数据时。比如用户写的代码如下:

关中断

调用系统服务

其他操作

开中断

大家想一下,本来用户想保存从用户关中断和开中断这些代码的,不过你调用了操作系统的服务,如果你是用的方法是不可嵌套的,那在退出操作系统代码时已经开中断了。违背了用户的愿望。所以我们操作系统提供可嵌套的关 开中断的方法。这种嵌套是针对高层应用程序的。在操作系统内部这个嵌套是没有任何意义的。

那有一点疑惑可能你会提出,那中断最好是支持嵌套了,是,这个没错。但大家想一想我们想嵌套,就必须保存原来的状态寄存器的值,而前提是机器要有支持读状态寄存器的指令。如果没有这样的指令,只能采取第一种最不好的方案了。

这也是为什么ucos要分这三个情况。它是定义了一个宏,关中断和开中断时用这个宏做。这个宏用条件编译实现具体的关中断和开中断的方法。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值