当前位置: 首页 > article >正文

【freertos】FreeRTOS中如何保护共享资源

FreeRTOS中共享资源的保护

  • 共享资源
    • 1、关中断、开中断(临界区)
    • 2、给调度器上锁、解锁
    • 3、信号量
    • 4、互斥型信号量

共享资源

\quad 典型的共享资源有:变量(静态或全局)、数据结构体、I/O设备中的寄存器、多个任务访问的函数等。
\quad 共享资源的可靠访问,任务必须对数据具有独享权变得极其重要,否则将可能导致任务间的竞争与数据损坏。

\quad 最常用的独占共享资源的方法有以下几种:

  • 关中断
  • 禁止任务调度(给调度器上锁)
  • 使用信号量(计数型的型号量、二值信号量)
  • 使用互斥型信号量(互斥锁)

独占共享资源的方法,取决于代码访问共享资源的速度,即占用共享资源的时间,具体使用说明如下:

1、关中断、开中断(临界区)

  • 前提条件:

    • 当访问共享资源的速度很快(读取或写入极少量数据时、需要和中断服务程序共享变量或数据结构、喂狗操作等)
    • 关于可靠访问也得使用开关中断的方法:如FLASH写数据。就算FLASH访问比较耗时,都得使用开关中断的方法,保证数据的可靠写入和访问,因为数据是无价的。
  • 影响:

    • 由于使用该方法会影响中断延迟,所以极度不推荐使用该方法。

2、给调度器上锁、解锁

  • 前提条件:
    • 当访问共享资源如访问全局变量缓冲区数据,甚至全局变量值自加/自减。
  • 影响:
    • 给调度器上锁同样有缺点,会导致给调度器上锁的任务成为最高优先级。
    • 这已经有悖于RTOS的初衷,所以同样不推荐使用该方法,当然该方法比关中断要好些,起码不会影响系统的中断延迟。

3、信号量

  • 前提条件:
    • 当所有的任务可以无限等待对共享资源(常见于硬件的访问,而该硬件的时候也比较耗时间)的访问时。
  • 影响:
    • 使用信号量可能导致优先级反转的问题,这样会破坏任务的预期顺序;然而其优点在于它的速度使用互斥型信号量要略快一些。

4、互斥型信号量

  • 前提条件:
    • 这是访问共享资源的首选方法。特别是当某些任务对共享资源(常见于硬件的访问,而该硬件的时候也比较耗时间)访问有时间要求时。
  • 影响:
    • RTOS的互斥型信号量具有一套内建的优先级继承机制,用来避免优先级翻转的问题。然而正如上文提到的,该方法相对于普通信号量来说要稍慢一些,因为占有互斥型信号量的任务的优先级可能需要改变,这要占用CPU的时间。

http://www.kler.cn/a/396007.html

相关文章:

  • 什么是项目完整性管理?
  • 《数学年刊A辑》
  • 关系型数据库和非关系型数据库详解
  • flink实战 -- flink SQL 实现列转行
  • C++ 判断语句的深入解析
  • javaWeb小白项目--学生宿舍管理系统
  • Qt文件目录操作
  • 告别Print,使用IceCream进行高效的Python调试
  • 利用栈实现中缀表达式的简单计算
  • pytorch中的transform用法
  • 21.<基于Spring图书管理系统②(图书列表+删除图书+更改图书)(非强制登录版本完结)>
  • Kafka入门:Java客户端库的使用
  • C语言.冒泡排序的练习
  • 在word文档中,内容是一段英文,一段英文的显示,且段落的前后都有空行,我如何只去掉英文段落后面的空行。
  • 25浙江省考-28天学行测-Day5 Day6-判断推理(中)
  • reduce-scatter:适合分布式计算;Reduce、LayerNorm和Broadcast算子的执行顺序对计算结果的影响,以及它们对资源消耗的影响
  • R门 - rust第一课陈天 -内存知识学习笔记
  • Apache Doris:监控与运维及系统调优
  • 【RabbitMQ】07-业务幂等处理
  • Tomcat NIO 配置实操指南
  • JVM——类加载器、类加载器的分类
  • 【Ubuntu侧边菜单点击没反应】【Ubuntu 20.04】【浏览器、文件夹点击没反应】
  • LabVIEW开发相机与显微镜自动对焦功能
  • 消息中间件分类
  • 《Django 5 By Example》阅读笔记:p17-p53
  • 去中心化存储:Web3数据安全新标准