RTOS笔记04——信号量与互斥量

01-信号量

本质

一种特殊的队列,没有写位置与读位置,只有计数值与长度,但是有着rtos内部机制的保护,使用起来安全。

方法

1-创建

2-释放与获取信号量

注意,在中断和非中断中调用函数不一样

释放信号量(加一)

获取信号量(减一)

若是将获取信号量的时间设置为最大,则可以让其在获取不到的时候永远阻塞

3-逻辑

如果多个任务都在等待获取信号量,那么如果有,高优先级的任务先获得,同等优先级先申请的先获得

4-注意

1-调用的时候发现找不到这个函数

点击查找

找到了,将其头文件在首页引用

好了

02-优先级反转

缘由:

存在三个优先级分别为1,2,3的任务A,B,C,其中AC调用同一信号量。

若A先运行,没归还信号量时,B开始运行且不等待,则A永远无法归还信号量,在C开始运行时,由于A无法归还信号量,则永久卡死。即B通过卡死A的信号量卡死了C,即为优先级反转,可通过互斥量解决(特殊的队列)。

03-互斥量

(好有用啊)

互斥量是一种特殊的信号量(函数长得也差不多)

创建后初始值为1

特殊之处在于

1-存在RTOS的保护程序,所以数据安全可信,比使用全局变量保护一些过程(如IIC)可靠得多

2-存在优先级继承。回到刚刚的问题,如果C在等待A使用的互斥量,则A的优先级则提高到C的水平,在A完成调用后优先级回退,这样就不会被B卡死了

极其有用的使用方案:保护某些不能打断的过程

rtos总是不断切换任务,iic数据传输可能被打断导致传输失败,此时可以加上保护措施,即在运行伊始获取,在传输完毕释放,解决了前几篇文章中提到的全局变量不安全的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值