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

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

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

    关注

    22

    文章

    5080

    浏览量

    142148
  • 操作系统
    +关注

    关注

    37

    文章

    7191

    浏览量

    126266
  • 代码
    +关注

    关注

    30

    文章

    4907

    浏览量

    71246

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    MEMS中的三种测温方式

    在集成MEMS芯片的环境温度测量领域,热阻、热电堆和PN结原理是三种主流技术。热阻是利用热敏电阻,如金属铂或注入硅的温度电阻系数恒定,即电阻随温度线性变化的特性测温,电阻变化直接对应绝对温度,需恒流源供电。
    的头像 发表于 07-16 13:58 ?871次阅读
    MEMS中的<b class='flag-5'>三种</b>测温<b class='flag-5'>方式</b>

    1553B总线常见三种组网方式

    1553B总线作为航空电子系统中的关键通信协议,其组网方式直接影响系统的可靠性和实时性。本文将深入解析1553B总线的三种典型组网结构:单总线结构、双冗余总线和多总线分层架构,并结合实际应用场景分析
    的头像 发表于 06-21 17:39 ?556次阅读
    1553B总线常见<b class='flag-5'>三种</b>组网<b class='flag-5'>方式</b>

    信号隔离器三种供电方式的区别

    信号隔离器是一重要的信号隔离装置,其供电方式主要有独立供电、回路供电和输出回路供电三种。以下是这三种供电方式的详细区别: 一、独立供电 1
    的头像 发表于 04-17 16:23 ?530次阅读
    信号隔离器<b class='flag-5'>三种</b>供电<b class='flag-5'>方式</b>的区别

    redis三种集群方案详解

    在Redis中提供的集群方案总共有三种(一般一个redis节点不超过10G内存)。
    的头像 发表于 03-31 10:46 ?872次阅读
    redis<b class='flag-5'>三种</b>集群方案详解

    三种太赫兹波的产生方式

    本文简单介绍了三种太赫兹波的产生方式。 太赫兹波(THz)是一电磁波,在电磁波谱上位于红外与微波之间。太赫兹光子能量在1-10 meV范围之间,在光谱分析、医疗成像、移动通信方面都有非常广阔
    的头像 发表于 02-17 09:09 ?2162次阅读
    <b class='flag-5'>三种</b>太赫兹波的产生<b class='flag-5'>方式</b>

    示波器的三种触发模式

    示波器的触发方式不仅影响波形捕捉的时机,还决定了显示的波形是否稳定。 常见的触发模式有三种: 单次触发 (Single)、 正常触发 (Normal)和 自动触发 (Auto)。下面将对这三种触发
    的头像 发表于 01-07 11:04 ?8681次阅读
    示波器的<b class='flag-5'>三种</b>触发模式

    systemd journal收集日志的三种方式

    随着 systemd 成了主流的 init 系统,systemd 的功能也在不断的增加,比如对系统日志的管理。Systemd 设计的日志系统好处多多,这里笔者就不再赘述了,本文笔者主要介绍 systemd journal 收集日志的三种
    的头像 发表于 10-23 11:50 ?958次阅读
    systemd journal收集日志的<b class='flag-5'>三种</b><b class='flag-5'>方式</b>

    I2S有左对齐,右对齐跟标准的I2S三种格式,那么这三种格式各有什么优点呢?

    大家好,关于I2S格式,有两个疑问请教一下 我们知道I2S有左对齐,右对齐跟标准的I2S三种格式,那么这三种格式各有什么优点呢? 而且对于标准的I2S格式,32FS传输16bit的数据,48fs传输24bit的数据,最低位会移动到右声道,是否意味着该数据被丢弃了?还是有
    发表于 10-21 08:23

    优化MSP430上用于uC/OS-II的内存

    电子发烧友网站提供《优化MSP430上用于uC/OS-II的内存.pdf》资料免费下载
    发表于 10-18 10:16 ?0次下载
    优化MSP430上用于uC/<b class='flag-5'>OS-II</b>的内存

    Windows管理内存的三种主要方式

    Windows操作系统提供了多种方式管理内存,以确保系统资源的有效利用和性能的优化。以下是关于Windows管理内存的三种主要方式的详细阐
    的头像 发表于 10-12 17:09 ?2573次阅读

    mosfet的三种工作状态及工作条件是什么

    )的不同,可以工作在三种主要状态:截止状态、线性和饱和。 1. 截止状态 工作状态描述 : 当VGS小于MOSFET的开启电压(VGS(TH))时,MOSF
    的头像 发表于 10-06 16:51 ?6772次阅读

    隔离开关的三种连锁方式介绍

    的必要手段。通过连锁机制,可以有效防止在断路器未断开的情况下对隔离开关进行操作,从而避免潜在的安全隐患。 隔离开关的三种连锁方式 隔离开关与断路器之间的闭锁:这种闭锁方式确保了在断路器未断开之前,隔离开关无
    的头像 发表于 09-19 11:54 ?3024次阅读

    单片机的三种总线结构

    单片机的三种总线结构包括地址总线(Address Bus, AB)、数据总线(Data Bus, DB)和控制总线(Control Bus, CB)。这三种总线在单片机内部及与外部设备之间的数据传输
    的头像 发表于 09-10 11:32 ?7413次阅读

    shell脚本执行的三种方式及区别

    在Linux系统中,Shell脚本是一非常实用的工具,用于自动化执行一系列命令。Shell脚本可以大大提高工作效率,简化复杂的任务。在这篇文章中,我们将介绍Shell脚本执行的三种方式及其区别
    的头像 发表于 08-30 15:24 ?2343次阅读

    简述三种esp32的开发方式是什么

    ESP32是一款由乐鑫(Espressif)推出的低功耗、高性能的Wi-Fi和蓝牙双模无线通信芯片,广泛应用于物联网、智能家居、智能硬件等领域。本文将详细介绍三种ESP32的开发方式:Arduino
    的头像 发表于 08-20 09:11 ?8958次阅读