freertos学习笔记(十)事件标志组
事件标志组
相当于用户平时定义的Flag,事件标志,不过freertos支持将该标志组作为启动task的条件
概述
- 分为8位和24位的模式(通过设置宏来配置)
- 每一位有0和1两个状态
用法
- 用于平常程序的标记位
- 用于task之间的同步
- 任务a先到达同步点,进入阻塞态
- 设置任务a的事件标记位
- 检查其他任务的事件标记位(发现任务b没标记)
- 等待其他任务的事件标记位(进入阻塞状态)
- 任务b判断事件标志,判断通过后,释放该标志,进入同步
- 设置任务b的事件标记位(任务a被同步)
- 检查其他任务的事件标记位(发现任务a已标记)
- 与任务a同步运行
- 任务a先到达同步点,进入阻塞态
事件标志判断方法
- 多个标志位同时满足(多个task同时到达同步点)
- 多个标志位有一个满足(其中一个task到达同步点)
two Challenges
- 每一个标志位分工明确。避免出现两个任务同时等待一个标志位的情况,出现标志位争抢(race conditions)
- 避免不确定行为(大概意思和1一样)[详见]
不确定性行为: 程序的执行路径或时间不是固定的,它可能依赖于多种不可预知的因素,如任务调度顺序、中断到达时间等。在实时系统中,非确定性行为是不被接受的,因为它可能导致系统无法满足其时间约束。