任务通知简介
任务通知简单来说就是用来通知任务的,在任务控制块中的结构体成员ulNotifiedValue就是通知值。
- 当通知值为 0 时,表示没有任务通知;当通知值不为 0 时,表示有任务通知,并且通知值就是通知的内容。
- 使用队列,信号量,事件标志组都需要新创建一个结构体,通过中间结构体进行间接通信,示意图如下,
- 用任务通知时,任务控制块TCB包含了内部对象,可以直接接收别的任务发来的通知,示意图如下,
任务通知值更新方式
- 不覆盖接收任务的通知值(队列不覆写)
- 覆盖接收任务的通知值(队列覆写)
- 更新接受任务通知值的一个或多个bit(事件标志组)
- 增加接受任务的通知值(计数型信号量)
备注:我们会发现,任务通知值是可以替代队列,信号量,事件标志位的。
任务通知优劣势
优势:
- 效率高:任务通知向任务发送事件或数据比使用队列、事件标志组或信号量快得多;
- 内存小:任务通知代替队列、事件标志组或信号量,可以节省大量的内存
劣势:
- 无法发送数据给中断(ISR):ISR没有任务控制块的结构体,所以无法发送数据,但是任务通知功能可以在任务之间或从中断到任务发送事件或数据。