基于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 许可协议。转载请注明来自 吾辈之人,自当自强不息!!
评论