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

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

3天内不再提示

I2C子系统优先级翻转与优先级继承

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:嵌入式Linux系统开 2023-07-22 15:08 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

优先级翻转与优先级继承

优先级翻转在可剥夺内核中是非常常见的,例子如下(H:High、M:Middle、L:Low)

图片

任务 H 和任务 M 处于挂起状态,等待某一事件的发生,任务 L 正在运行。

某一时刻任务 L 想要访问共享资源,在此之前它必须先获得对应该资源的信号量。

任务 L 获得信号量并开始使用该共享资源。

由于任务 H 优先级高,它等待的事件发生后便剥夺了任务 L 的 CPU 使用权。

任务 H 开始运行。

任务 H 运行过程中也要使用任务 L 正在使用着的资源,由于该资源的信号量还被任务L 占用着,任务 H 只能进入挂起状态,等待任务 L
释放该信号量。

任务 L 继续运行。

由于任务 M 的优先级高于任务 L,当任务 M 等待的事件发生后,任务 M 剥夺了任务L 的 CPU 使用权。

任务 M 处理该处理的事。

任务 M 执行完毕后,将 CPU 使用权归还给任务 L。

任务 L 继续运行。

最终任务 L 完成所有的工作并释放了信号量,到此为止,由于实时内核知道有个高优先级的任务在等待这个信号量,故内核做任务切换。

任务 H 得到该信号量并接着运行。

在这种情况下,任务 H 的优先级实际上降到了任务 L 的优先级水平。因为任务 H 要一直等待直到任务 L 释放其占用的那个共享资源。由于任务 M剥夺了任务 L 的 CPU 使用权,使得任务 H 的情况更加恶化,这样就相当于任务 M 的优先级高于任务 H,导致优先级翻转。

Linux 用 rt_mutex 来解决该问题,rt_mutex 是带优先级继承的互斥锁。

当一个 rt_mutex 正在被一个低优先级的任务使用,而此时有个高优先级的任务也尝试获取这个 rt_mutex的话就会被阻塞。不过这个高优先级的任务会将低优先级任务的优先级提升到与自己相同的优先级,这就是优先级继承。优先级继承尽可能的降低了高优先级任务处于阻塞态的时间,并且将已经出现的“优先级翻转”的影响降到最低。

优先级继承并不能完全的消除优先级翻转,它只是尽可能的降低优先级翻转带来的影响。

rt_mutex 不能用于中断服务函数中,原因如下:

rt_mutex 有优先级继承的机制,所以只能用在任务中,不能用于中断服务函数。

中断服务函数中不能因为要等待 rt_mutex 而设置阻塞时间进入阻塞态。

i2c_transfer 调用 __i2c_transfer 之前,就加了 rt_mutex,保证 I2C 传输尽快执行。

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

    关注

    4

    文章

    1436

    浏览量

    42483
  • 子系统
    +关注

    关注

    0

    文章

    115

    浏览量

    13292
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1547

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入式技术中如何定义进程优先级

    静态优先级是所有相关优先级的计算的起点,要么继承自父进程,要么用户空间自行设定。一旦修改了静态优先级,那么normal priority和动态优先级
    发表于 09-18 16:08 1887次阅读
    嵌入式技术中如何定义进程<b class='flag-5'>优先级</b>

    基于优先级抢占系统的QNX调度算法

    调度算法,是基于优先级的。QNX的线程优先级,是一个0-255的数字,数字越大优先级越高。所以,优先级0是内核中的idle线程。同时,优先级
    发表于 10-31 09:17 1379次阅读

    RTOS应用中的优先级反转问题

    在嵌入式系统中,如果使用基于优先级调度算法的RTOS,系统中可能发生优先级反转现象。优先级反转用来描述
    发表于 12-14 11:00 1910次阅读

    uC/OS-II中优先级翻转问题

    本文着重分析优先级翻转问题的产生和影响,以及在uC/OS-II中的解决方案,在嵌入式系统的应用中,实时性是一个重要的指标,而优先级翻转是影响
    发表于 01-06 16:53 2710次阅读

    开发过程中是什么原因导致优先级翻转的?

    最近在开发过程中,遇到一个问题线程优先级翻转的问题。那什么原因导致优先级翻转呢? 在RTOS开发中,优先级
    的头像 发表于 05-28 15:28 2985次阅读
    开发过程中是什么原因导致<b class='flag-5'>优先级</b><b class='flag-5'>翻转</b>的?

    cortex M内核优先级设置

    Cortex M内核中每个中断都有一个8位的优先级设置寄存器这个8位的寄存器可以分为抢占优先级和子优先级两个部分(通过设置优先级组设置)抢占优先级
    发表于 12-01 11:51 4次下载
    cortex M内核<b class='flag-5'>优先级</b>设置

    2.FreeRTOS中断优先级和任务优先级

    FreeRTOS中断优先级和任务优先级架构:Cortex-M3版本:FreeRTOS V9.0.0前言:最开始,我并没有搞清楚什么是中断优先级和任务优先级,但看了部分资料后发现这两个并
    发表于 12-04 20:21 14次下载
    <b class='flag-5'>2</b>.FreeRTOS中断<b class='flag-5'>优先级</b>和任务<b class='flag-5'>优先级</b>

    STM32F103芯片中断优先级以及FreeRTOS优先级设置

    STM32F103只用了4个位来表达优先级,因此最多支持16的可编程优先级(0~15),15为最低优先级
    发表于 01-25 18:59 1次下载
    STM32F103芯片中断<b class='flag-5'>优先级</b>以及FreeRTOS<b class='flag-5'>优先级</b>设置

    uC/OS-II学习笔记——优先级反转与优先级继承机制

    优先级反转,是指某同步资源被较低优先级的进程/线程所拥有,较高优先级的进程/线程竞争该同步资源未获得该资源,而使得较高优先级进程/线程反而推迟被调度执行的现象。
    发表于 02-09 10:33 2次下载
    uC/OS-II学习笔记——<b class='flag-5'>优先级</b>反转与<b class='flag-5'>优先级</b><b class='flag-5'>继承</b>机制

    中断优先级处理的原则及配置 抢占优先级和响应优先级的区别

    首先我们需要知道什么是中断优先级:中断优先级是CPU响应中断的先后顺序
    的头像 发表于 05-18 15:10 3.1w次阅读
    中断<b class='flag-5'>优先级</b>处理的原则及配置 抢占<b class='flag-5'>优先级</b>和响应<b class='flag-5'>优先级</b>的区别

    具有固定优先级调度程序RTOS的优先级倒置

      优先级继承并不能真正治愈优先级倒置,它只是在某些情况下将其影响最小化。硬实时应用程序仍应仔细设计,以便一开始就不会发生优先级反转。
    的头像 发表于 06-22 15:45 1864次阅读
    具有固定<b class='flag-5'>优先级</b>调度程序RTOS的<b class='flag-5'>优先级</b>倒置

    FreeRTOS任务的优先级示例

    任务的优先级:0~24之间。数字越大,任务优先等级越高。高优先级的任务优先执行。
    的头像 发表于 09-15 11:13 3706次阅读

    Free RTOS的优先级翻转

    优先级翻转简介:就是高优先级的任务运行起来的效果好像成了低优先级,而低优先级比高优先级先运行;
    的头像 发表于 02-10 15:31 2124次阅读
    Free RTOS的<b class='flag-5'>优先级</b><b class='flag-5'>翻转</b>

    什么是优先级反转

    ,才能运行TaskC,TaskC释放信号量之后高优先级的TaskA才能执行。看起来高优先级的TaskA还不如低优先级的TaskC优先级高,这就叫做
    的头像 发表于 04-24 13:01 3178次阅读
    什么是<b class='flag-5'>优先级</b>反转

    freertos中断优先级在哪设置

    中断优先级之前,我们需要理解中断优先级的概念。在嵌入式系统中,中断是硬件或软件事件,它们可以打断CPU的当前执行流程,让CPU去处理更紧急的任务。中断优先级用于确定多个中断请求之间的处
    的头像 发表于 09-02 14:17 2096次阅读