µC/OS-II三种临界区管理方式

01
临界段与临界资源
操作系统中有有两个名词,临界段和临界资源。
01
临界段
代码的临界段也称为临界区,指处理时不可分割的代码。一旦这部分代码开始执行,则不允许任何中断打入。为确保临界段代码的执行,在进入临界段之前要关中断,而临界段代码执行完以后要立即开中断。
02
临界资源
临界资源在一段时间内只允许一个进程访问的资源。又称独占资源。资源可以是输入输出设备,例如打印机、键盘、显示器,资源也可以是一个变量,一个结构或一个数组等。
02
三种临界区管理机制
2.1
示例代码
在µc/os-ii中有三种临界区管理方式,是在oc_cpu.h文件中通过宏os_critical_method来控制,如下图为8086临界区实现方式
2.2
psw(程序状态字)
不管是何种芯片,进入临界区的思想是不变的,就是失能控制psw(program status word)中的if(中断标志位)标志位。8086的标志寄存器如下图所示。不同芯片的psw略微不同。
2.3
方法1
方法1是直接将os_enter_critical()和os_exit_critical()定义为处理器的关闭(cli)和打开(sti)中断指令。sti(set interrupt) 为开中断,cli(clear interrupt) 为关中断,这里设置的是psw(program status word)中的中断标志位。
但这种方法有一个隐患,如果在关闭中断后调用µc/os函数,当函数返回后,中断将被打开!严格意义上的关闭中断应该是执行os_enter_critical()后中断始终是关闭的, 方法1显然不满足要求。但方法1的优点是简单,执行速度快(只有一条指令)。
2.4
方法二
os_enter_critical()会在关中断前保存之前的标志寄存器内容到堆栈中,随之将中断关闭,os_exit_critical()从堆栈中恢复之前保存的状态。
pushf是将标志寄存器入栈,popf是将栈顶的内容弹出到标志寄存器中。
但是一些编译器不能很好地优化内联代码,因此,此方法可能无法正常工作。因为编译器可能不够智能,无法知道堆栈指针已经被更改(通过pushf指令),此时再想去访问堆栈中的数据极大可能出现错误的值,从而导致应用程序的崩溃。
2.5
方法三
一些编译器提供了扩展的接口允许用户获取psw中的值,并将此状态值保存在声明的变量中,随之将中断关闭,在退出临界区时,在将上面保存的值恢复到psw中。
oscpusavesr以及oscpurestoresr是在os_cpu_a.s文件中定义的,使用汇编指令实现的。
这种方法的优点就是安全可靠,缺点就是执行速度较上面两种慢,因为进入和退出临界区的汇编代码可能不止一条,而且还需要访问内存变量cpu_sr。
原文标题:µc/os三种临界区管理机制
文章出处:【微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。


大陆未来在NAND市场将占一席之地,NANDFlash市况吃紧
万能的prompt还能做可控文本生成
microLED的材料应用需求方案
蒲公英异地组网解决方案
华为首款智能音箱专利曝光
µC/OS-II三种临界区管理方式
Mobileye携长城汽车推出自动驾驶解决方案
设备商在向潜在客户推销产品时是否满足网络安全需求?
通过人工智能投资实现投资回报方面仍然存在重大挑战
了解ARINC 661及其在认证环境中的优势
具有轨至轨输出级的LTC6241模数转换器的性能及应用分析
马斯克宣布:跟“小蓝鸟”说再见 TWTR的LOGO将换成“X”标志
华为p10怎么样?华为p10最新消息:双摄加持,功能丰富,华为P10堪称摄影师利器
扬尘检测仪安装在哪里?扬尘在线监测仪布点位置
外汇局跨境区块链平台是怎样展示自己的
关于小米6和红米Pro 2的那些新鲜事!
数电票时代,企业如何与供应商实现高效对账协同?
京东物流:未来5年使用机器人数量将超过10万台
元宇宙概念是什么意思?元宇宙最直白的解释
利用NB-IoT技术的机房智能门禁设计