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

    文章

    5130

    浏览量

    143670
  • 操作系统
    +关注

    关注

    37

    文章

    7331

    浏览量

    128672
  • 代码
    +关注

    关注

    30

    文章

    4942

    浏览量

    73166

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    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 1167次阅读
    伺服电机的<b class='flag-5'>三种</b>制动<b class='flag-5'>方式</b>有什么区别?

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

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

    MEMS中的三种测温方式

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

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

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

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

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

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

    CH32F103C8T6核心板,通过USB转串口方式、USB直连方式、SWD方式下载应用程序
    的头像 发表于 06-09 09:38 824次阅读
    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 1009次阅读

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

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

    redis三种集群方案详解

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

    GaN、超级SI、SiC这三种MOS器件的用途区别

    如果想要说明白GaN、超级SI、SiC这三种MOS器件的用途区别,首先要做的是搞清楚这三种功率器件的特性,然后再根据材料特性分析具体应用。
    的头像 发表于 03-14 18:05 2214次阅读

    FOC中的三种电流采样方式,你真的会选择吗?(可下载)

    的基础,用一句话来形容就是“基础不对,努力白费”,由此可见电流采样在整 个 FOC 算法中的作用电流采样的方式一般分为电阻、双电阻、单电阻,这三种采样方式都有其
    发表于 03-12 15:04 3次下载

    三种太赫兹波的产生方式

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

    示波器的三种触发模式

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