0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

GReq_mcu168 来源:typedef 作者:typedef 2022-07-11 10:01 次阅读

01

临界段与临界资源

操作系统中有有两个名词,临界段和临界资源。

01

临界段

代码的临界段也称为临界区,指处理时不可分割的代码。一旦这部分代码开始执行,则不允许任何中断打入。为确保临界段代码的执行,在进入临界段之前要关中断,而临界段代码执行完以后要立即开中断。

02

临界资源

临界资源在一段时间内只允许一个进程访问的资源。又称独占资源。资源可以是输入输出设备,例如打印机、键盘、显示器,资源也可以是一个变量,一个结构或一个数组等。

02

三种临界区管理机制

2.1

示例代码

在µC/OS-II中有三种临界区管理方式,是在oc_cpu.h文件中通过宏OS_CRITICAL_METHOD来控制,如下图为8086临界区实现方式

ce86d1f6-00bb-11ed-ba43-dac502259ad0.png

2.2

PSW(程序状态字)

不管是何种芯片,进入临界区的思想是不变的,就是失能控制PSW(Program Status Word)中的IF(中断标志位)标志位。8086的标志寄存器如下图所示。不同芯片的PSW略微不同。

ce9b1d14-00bb-11ed-ba43-dac502259ad0.png

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三种临界区管理机制

文章出处:【微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 显示器
    +关注

    关注

    21

    文章

    4782

    浏览量

    138557
  • 操作系统
    +关注

    关注

    37

    文章

    6376

    浏览量

    122200
  • 代码
    +关注

    关注

    30

    文章

    4588

    浏览量

    67222

原文标题:µC/OS三种临界区管理机制

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    运放的三种应用

    运放在电路中主要存在三种应用,放大器,滤波器,振荡器。再这三种应用电路中,运放的两大特点虚短虚断仍然成立吗? 在阻尼振荡器中,工作过程是否按照我描述的这样,在反相输入端加一个近似锯齿波的电流源,正半
    发表于 01-26 16:18

    UCOS-IIOS_CFG中文注释V2.80版

    电子发烧友网站提供《UCOS-IIOS_CFG中文注释V2.80版.rar》资料免费下载
    发表于 11-03 11:40 0次下载
    UCOS-<b class='flag-5'>II</b>的<b class='flag-5'>OS</b>_CFG中文注释V2.80版

    基于ARM与μC-OS-II的弯管流量计的研究与设计

    电子发烧友网站提供《基于ARM与μC-OS-II的弯管流量计的研究与设计.pdf》资料免费下载
    发表于 10-25 11:03 0次下载
    基于ARM与μC-<b class='flag-5'>OS-II</b>的弯管流量计的研究与设计

    基于ARM9和μC-OS-II的SD卡文件系统设计与实现

    电子发烧友网站提供《基于ARM9和μC-OS-II的SD卡文件系统设计与实现.pdf》资料免费下载
    发表于 10-24 09:56 0次下载
    基于ARM9和μC-<b class='flag-5'>OS-II</b>的SD卡文件系统设计与实现

    嵌入式操作系统在什么情况下我们需要考虑临界

    对于什么情况下我们才应该考虑临界的问题
    发表于 10-15 07:41

    请问如何用单片机让极管出现三种不同的电平状态?

    如何用单片机让极管出现三种不同的电平状态?
    发表于 10-10 06:56

    STM32嵌入式操作系统介绍

    的分配、任务调度,控制、协调并发活动。• 目前在嵌入式领域广泛使用的操作系统有:嵌入式实时操作系统FreeRTOS、µC/OS-II、RThread、WindowsCE、VxWorks 等等.
    发表于 09-28 06:59

    工业交换机管理方式的全面指南

    工业交换机管理方式的选择和实施对于构建高效可靠的网络基础设施至关重要。不同的管理方式适用于不同的网络环境和应用需求,需要综合考虑网络规模、拓扑结构、人员配备等因素。通过合理选择和采用最佳实践,可以最大限度地提升工业交换机的管理
    的头像 发表于 09-12 11:46 452次阅读
    工业交换机<b class='flag-5'>管理方式</b>的全面指南

    uC/OS-II—邮箱介绍

    在uC/OS-II中邮箱是线程(任务)通讯的一种,使用邮箱能够发送一个指针,当然也可以发送指针大小的数据。
    的头像 发表于 09-11 15:35 805次阅读

    uC/OS-II内存管理方法详解

    ucos内存管理方法十分小巧,实时性好,非常值得借鉴。
    的头像 发表于 09-11 15:32 725次阅读
    uC/<b class='flag-5'>OS-II</b>内存<b class='flag-5'>管理</b>方法详解

    关于CNAS调整认可变更管理方式的通知

    关于CNAS调整认可变更管理方式的通知
    发表于 08-15 14:40 4次下载

    华为防火墙的管理方式配置

    由于在对防火墙设备配置管理方式时,涉及到了AAA这个概念,索性就将AAA的相关介绍简单写一下。
    的头像 发表于 07-20 10:26 1891次阅读
    华为防火墙的<b class='flag-5'>管理方式</b>配置

    临界管理实现的硬件方式(2)#计算机

    计算机
    学习硬声知识
    发布于 :2023年07月17日 15:07:30

    临界管理实现的硬件方式(1)#计算机

    计算机
    学习硬声知识
    发布于 :2023年07月17日 15:06:32

    Cortex-M裸机环境下临界区保护的三种实现

    今天给大家分享的是Cortex-M裸机环境下,临界区保护的三种实现。
    的头像 发表于 07-07 09:06 614次阅读
    Cortex-M裸机环境下<b class='flag-5'>临界</b>区保护的<b class='flag-5'>三种</b>实现