基于ESP32S3的FreeRTOS之信号量(六)
Binary Semaphore 二进制信号



- 使用信号量执行任务

创建信号量之后为了使用它必须要释放它。

- 创建信号量并调用任务

- 任务一进行调用使用信号量

- 任务二调用使用信号量

- 结果


- 未使用信号量呢

- 结果

计数信号量



- 创建任务

- 使用计数信号量,最大信号量减减

- 释放信号量

- 结果


互斥量 mutex

这块需要反复理解
- 创建信号量,挂起任务调度器,创建执行任务,开启任务调度器




主要是优先级的继承,task1继承了task3所以可以执行任务


task3优先级最高首先运行,发生阻塞后task2开始执行,task2发生阻塞,task1开始执行,获取信号量并锁定。
由于task3的优先级高,所以task3开始执行,然而信号量依旧在task1那,并未被释放task1超出时间片,看门狗被触发,idle任务因为要用于内存的清理回收,idle任务无法执行,就会触发看门狗。
所以task3尝试取信号量,尝试失败后进入task2while循环,循环超时触发看门狗,然后task继续3尝试获取信号量。以此反复。


Recursive Mutex 递归互斥锁





结果:


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 吾辈之人,自当自强不息!!
评论






