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 传输尽快执行。

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

    关注

    3

    文章

    1309

    浏览量

    39862
  • 子系统
    +关注

    关注

    0

    文章

    100

    浏览量

    12265
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1348

    浏览量

    120880
收藏 人收藏

    评论

    相关推荐

    [转] STN32抢占优先级与副优先级及中断优先级NVIC理解

    地址(0XE000-ED0C) AIRCR是个32位寄存器,其中第8,9,10位为 PRIGROUP 优先级分组设置位。见表1 31…………1098………0表1 AIRCR寄存器图 表2
    发表于 04-15 14:14

    CC1310rtos里面,优先级定义时,是1的优先级高还是2优先级高?

    CC1310rtos里面,优先级定义时,是1的优先级高还是2优先级高?
    发表于 06-21 10:12

    请问滴答计时器系统中断的优先级和普通中断的优先级有什么不同?

    原子的列程上貌似木有设置滴答的中断优先级,想问问系统中断的优先级 和 普通中断(比如 定时器0中断 串口中断 DMA中断 等等)的优先级有什么不同?哪个更高些?找到 STM32的编程手
    发表于 05-28 04:37

    请问start的任务优先级是否比start2的任务优先级更高?

    如:start的任务优先级是否比start2的任务优先级更高?因为start的任务优先级#define START_TASK_PRIO是3而start
    发表于 07-04 04:35

    请问为什么不采用优先级继承机制时高优先级任务竞争不过中优先级任务?

    如图,请问画线部分怎么理解,为什么不采用优先级继承机制时高优先级任务竞争不过中优先级任务?希望各位大神帮小弟解决一下,谢谢~
    发表于 07-11 04:35

    UCOS优先级翻转知多少?

    对于新手来说,优先级翻转看起来有点点困难?其实,你可能缺少一个有趣的故事故事主人公:LPT(Low PrioTask),MPT(Middle PrioTask),HPT(High PrioTask
    发表于 04-24 03:25

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

    ,任务可以阻塞的最大节拍数。然而,与二值信号量的区别在于,互斥量支持优先级继承机制。这意味着,如果有一个高优先级的任务在试图获取当前持有令牌的低优先级任务占用的资源时,
    发表于 03-09 15:00

    如何去解决uC/OS-II中优先级翻转问题?

    uC/OS-II的运行机制是什么?uC/OS-II中的优先级翻转问题有哪些?如何去解决uC/OS-II中优先级翻转问题?
    发表于 04-25 07:07

    优先级判断STM32

    一:综述STM32 目前支持的中断共为 84 个(16 个内核+68 个外部), 16 可编程中断优先级的设置(仅使用中断优先级设置 8bit 中的高 4 位)和16个抢占优先级(因
    发表于 08-13 06:50

    NVIC中断优先级管理与中断优先级分组

    ~2^n-1)和4-n位响应优先级(值0~2^(4-n)-1)抢占优先级:高抢占优先级可以打断低抢占优先
    发表于 08-16 08:06

    中断优先级的基本规则

    单片机芯 片: STC12C5A60S2 晶振是11.0592MHZ中断优先级的基本规则1.低优先级中断可被高优先级中断所中断2.任何中断都
    发表于 11-25 06:32

    什么是先占优先级和从优先级

    什么是先占优先级和从优先级
    发表于 12-13 07:00

    如何在VHDL中实现简单优先级仲裁器

    本文着眼于仲裁器的用例和优点,以及在VHDL中实现简单优先级仲裁器。仲裁是任何现代计算机系统的重要组成部分。从I2C和CAN 等通信协议中的总线仲裁到多处理器系统中的存储器仲裁,可以在
    发表于 12-23 06:38

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

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

    Free RTOS的优先级翻转

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