freertos学习笔记(十一)直接任务通知

直接任务通知

起源

队列和信号量是实时操作系统的典型功能,而FreeRTOS提供的直接任务通知比队列和信号量更小且速度更快(快45%)

  • 开发人员应优先使用量身定制的功能:直接任务通知、消息缓冲区和流缓冲区。
  • 大多数应用程序中,使用 队列和信号量等综合功能可能是例外而不是常态

实现

  1. 发送任务直接向接收任务发送通知,无需借助中间对象(队列,事件组和信号量)
  2. 将目标任务通知的状态设置为挂起
  3. 通过读取任务通知的值,来取消挂起状态(也可以直接调用清除函数)

更新目标通知的方式

  1. 覆盖原值,无论接收任务是否读取被覆盖的值。
  2. 覆盖原值,但前提是接收任务已读取被覆盖的值。
  3. 在值中设置一个或多个位。
  4. 对值进行增量(添加 1)。

注意(缺点)

  1. 直接任务通知默认开启,通过配置宏来关闭(每个任务可以节省8个字节)
  2. cpu的占用情况
    • 接收任务:可以通过阻塞来等到任务通知的设置(不占用CPU)
    • 发送任务:不可以通过阻塞来等待任务通知的发送完毕(占用CPU)
  3. 直达任务通知只能单个任务接收,只能实现两个任务之间的通信
posted @ 2024-08-10 15:44  小兜兜me  阅读(32)  评论(0编辑  收藏  举报