7、深入理解 FreeRTOS 互斥锁:原理、应用与实践

深入理解 FreeRTOS 互斥锁:原理、应用与实践

1. 互斥锁基础

互斥锁(Mutex)这个术语源于“mutual”(相互)和“exclusion”(排斥)。在 FreeRTOS 中,既然已经有了二进制信号量,为何还需要互斥锁呢?互斥锁有什么独特的能力是二进制信号量所没有的呢?

1.1 互斥原理

和二进制信号量一样,互斥锁是一种实现互斥访问的机制。其互斥原则同样基于约定,互斥锁本身并不直接排除或允许访问。按照约定,一个任务只有在成功获取互斥锁后,才能访问受保护的资源。在 FreeRTOS 术语中,这被称为“获取”(take)互斥锁。一旦任务获取了互斥锁,它就成为该资源的唯一所有者。

当所有者使用完资源后,通过“释放”(give)互斥锁来开放对资源的访问。释放互斥锁后,其他任务就可以获取它。通过这种协议,同一时间不会有多个任务同时访问受保护的资源。

例如,有两个任务要驱动同一总线上的 I2C 设备。总线是设备共享的,但一次只能进行一个事务。互斥锁可以让这两个独立的任务与各自的从设备通信,同时避免在共享总线上发生冲突。

1.2 问题分析

假设有三个任务 A、B 和 C。任务 A 和 B 都需要使用由二进制信号量保护的共享 I2C 总线进行互斥访问。任务 A 的优先级为 1,任务 B 的优先级为 3,任务 C 的优先级为 2。具体事件顺序如下:
1. 任务 B(优先级 3)因等待消息队列而被阻塞。
2. 任务 C(优先级 2)由于某种原因也被阻塞。
3. 由于没有更高优先级的任务准备好,任务 A(优先级 1)开始执行。它锁定了 I2C 总线的信号量,成为所有者。 <

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值