基本概念
- 每个任务都有一个 32 位的通知值
- 任务通知可以替代二值信号量、计数信号量、事件组,也可以替代长度为 1 的队列(可以保存一个 32位整数或指针值)
- 通知比通过信号量等 ICP 通信方式解除阻塞的任务要快 45%,,并且更加省 RAM 内存空间
- 打卡宏定义 configUSE_TASK_NOTIFICATIONS 设置为 1
- 任务通知是属于任务中附带的资源,所以在任务被创建的时候,任务通知也被初始化的
- 任务通知可以在任务中向指定任务发送通知,也可以在中断中向指定任务发送通知
- 只有在任务中可以等待通知,而不允许在中断中等待通知
- 任务在等待的通知暂时无效,任务会根据用户指定的阻塞超时时间进入阻塞状态
FreeRTOS 提供以下几种方式发送通知给任务
- 发送通知给任务, 如果有通知未读,不覆盖通知值。
- 发送通知给任务,直接覆盖通知值。
- 发送通知给任务,设置通知值的一个或者多个位,可以当做事件组来使用。
- 发送通知给任务,递增通知值,可以当做计数信号量使用。
以下限制 :
- 只能有一个任务接收通知消息,因为必须指定接收通知的任务
- 只有等待通知的任务可以被阻塞,发送通知的任务,在任何情况下都不会