【FreeRTOS优先级翻转问题及其解决方案】

优先级翻转发生在多任务系统中,当一个低优先级任务持有高优先级任务需要的信号量时,中等优先级任务可能先执行,导致高优先级任务延迟。为解决这个问题,可以使用互斥信号量,它的优先级继承特性可以减少高优先级任务被阻塞的时间,从而降低优先级翻转的影响。但需要注意,互斥信号量不应在中断服务函数中使用。
摘要由CSDN通过智能技术生成

什么是优先级翻转?

前置条件

1.至少3个任务(分别高中低3优先级)
2.使用信号量资源

为什么会导致优先级翻转

当一个低优先级任务和一个高优先级任务同时使用同一个信号量,而系统中还有其他中等优先级任务时。如果低优先级任务获得了信号量,那么高优先级的任务就会处于等待状态,但是,中等优先级的任务可以打断低优先级任务而先于高优先级任务运行(此时高优先级的任务在等待信号量,所以不能运行)这是就出现了优先级翻转的现象。

优先级翻转了会怎样

优先级翻转会造成高优先级线程的实时性得不到保证,失去高优先级的意义

如何尽量避免优先级翻转

使用互斥信号量

互斥信号量

互斥信号量其实就是一个拥有优先级继承的二值信号量,在同步的应用中(任务与任务或中 断与任务之间的同步)二值信号量最适合。
互斥信号量适合用于那些需要互斥访问的应用中。 在互斥访问中互斥信号量相当于一个钥匙,当任务想要使用资源的时候就必须先获得这个钥匙,
当使用完资源以后就必须归还这个钥匙,这样其他的任务就可以拿着这个钥匙去使用资源。

为什么互斥信号量能解决优先级翻转

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

注意

互斥信号量不能用于中断服务函数中。

转载原文链接:https://blog.csdn.net/m0_58832575/article/details/126903356?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-4-126903356-blog-130396441.235v38pc_relevant_sort_base3&spm=1001.2101.3001.4242.3&utm_relevant_index=7

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值