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

    文章

    5158

    浏览量

    144746
  • 操作系统
    +关注

    关注

    37

    文章

    7432

    浏览量

    129599
  • 代码
    +关注

    关注

    30

    文章

    4976

    浏览量

    74359

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    AI技术时代三种全新工作模式如何实现

    AI技术正在重塑我们的工作。前沿企业以“人类主导、智能体运营”为核心,形成三种AI技术的融合模式:人类+AI技术助手、人机混合、人类主导智能体运营,这些模式不仅提升效率,更在重构协作方式,帮助组织以更低的阻力迈向成功。
    的头像 发表于 01-29 15:08 727次阅读

    C语言的缓冲(缓存)详解

    能够协调工作,避免低速的输入输出设备占用CPU,解放出CPU,使其能够高效率工作。   缓冲的类型   缓冲 分为三种类型:全缓冲、行缓冲和不带缓冲。   1) 全缓冲   在这种情况下,当
    发表于 01-14 07:30

    C语言中实现函数宏的三种方式

    在宏的第一个分号后便结束。即 a = b 和 b = tmp 均不受控制语句所作用。 因此,在工程中,一般使用三种方式来对函数宏进行封装,分别为 {}、do{...}while(0
    发表于 12-29 07:34

    请问CW32芯片的三种工作模式是什么?

    CW32芯片的三种工作模式是什么?
    发表于 12-26 06:48

    FreeRTOS和uC/OS-II的功能特性

    AWS 条款)。 uC/OS-II: 核心功能: 任务调度(固定优先级抢占式 + 时间片轮询)、信号量、互斥锁(带优先级继承)、消息邮箱、消息队列、事件标志、内存分区管理、软件定时器。 内存管理
    发表于 11-17 08:17

    FreeRTOS与uC/OS-II如何选择?

    /OS-II: 你非常熟悉 Jean Labrosse 的书或其设计理念。 你在维护一个历史悠久的、基于 uC/OS-II 的项目。 你的应用对极端可靠性和确定性有非常高的要求(其严谨的设计和历史认证背景
    发表于 11-13 07:15

    伺服电机的三种制动方式有什么区别?

    伺服电机作为自动化控制系统中执行元件的核心部件,其制动性能直接影响设备的定位精度和安全可靠性。目前主流的伺服电机制动方式包括动态制动、再生制动和电磁机械制动三种,它们在制动原理、应用场景及技术特点上
    的头像 发表于 09-19 18:26 2165次阅读
    伺服电机的<b class='flag-5'>三种</b>制动<b class='flag-5'>方式</b>有什么区别?

    rtt使用的软件i2c库进行模拟i2c时序时,不需要加临界保护吗?

    这里进行模拟i2c时序,不需要加临界的保护。假如我有一个低优先级的线程正在进行i2c读写,这时候有个高优先级的线程进行抢占,做了一些工作,这个时候i2
    发表于 09-10 08:09

    对于CYUSB3014芯片,哪个函数可以读取GPIF II端DMA缓冲中缓存的实际数据量?

    你好! 我们使用的芯片是CYUSB3014,使用方式为:生产端使用GPIF II接口,消费端使用USB接口,数据从外部FPGA进入GPIF II接口,再通过USB3.0接口发送给电脑软件。请问
    发表于 07-21 07:27

    MEMS中的三种测温方式

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

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

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

    开关电源三种控制模式:PWM/PFM/PSM

    摘要 本文详细介绍了开关电源的三种主要调制方式:PWM(脉冲宽度调制)、PFM(脉冲频率调制)和PSM(脉冲跨周期调制)。PWM通过调整脉冲宽度保持恒定频率,适用于重负载,但轻负载效率低。PFM则在
    发表于 06-09 16:11

    HarmonyOS基础组件:Button三种类型的使用

    中的Button相较于Android原生来说,功能比较丰富,扩展性高,减少了开发者的代码数量,简化了使用方式。不仅可以自定义圆角还支持三种样式。 常用属性 名称 参数类型 描述 type
    的头像 发表于 06-09 15:48 2703次阅读
    HarmonyOS基础组件:Button<b class='flag-5'>三种</b>类型的使用

    CH32F103C8T6核心板三种程序下载方式简介

    CH32F103C8T6核心板,通过USB转串口方式、USB直连方式、SWD方式下载应用程序
    的头像 发表于 06-09 09:38 1257次阅读
    CH32F103<b class='flag-5'>C</b>8T6核心板<b class='flag-5'>三种</b>程序下载<b class='flag-5'>方式</b>简介

    介绍三种常见的MySQL高可用方案

    在生产环境中,为了确保数据库系统的连续可用性、降低故障恢复时间以及实现业务的无缝切换,高可用(High Availability, HA)方案至关重要。本文将详细介绍三种常见的 MySQL 高可用
    的头像 发表于 05-28 17:16 1431次阅读