直接任务通知
起源
队列和信号量是实时操作系统的典型功能,而FreeRTOS提供的直接任务通知比队列和信号量更小且速度更快(快45%)
- 开发人员应优先使用量身定制的功能:直接任务通知、消息缓冲区和流缓冲区。
- 大多数应用程序中,使用 队列和信号量等综合功能可能是例外而不是常态
实现
- 发送任务直接向接收任务发送通知,无需借助中间对象(队列,事件组和信号量)
- 将目标任务通知的状态设置为挂起
- 通过读取任务通知的值,来取消挂起状态(也可以直接调用清除函数)
更新目标通知的方式
- 覆盖原值,无论接收任务是否读取被覆盖的值。
- 覆盖原值,但前提是接收任务已读取被覆盖的值。
- 在值中设置一个或多个位。
- 对值进行增量(添加 1)。
注意(缺点)
- 直接任务通知默认开启,通过配置宏来关闭(每个任务可以节省8个字节)
- cpu的占用情况
- 接收任务:可以通过阻塞来等到任务通知的设置(不占用CPU)
- 发送任务:不可以通过阻塞来等待任务通知的发送完毕(占用CPU)
- 直达任务通知只能单个任务接收,只能实现两个任务之间的通信