一,任务通知的简介
相对于之前的信号量,事件组等,所谓的任务通知核心就是一个32位的无符号整数和8位的通知状态
功能:向指定的任务发送一个任务通知,并且带有通知值 也可以指定通知值的发送方式
参数:
xTaskToNotify: 任务句柄,指定发送给哪个任务
ulValue: 任务通知值
eAction: 任务通知的更新方法【是一个结构体】
注意的是:eSetValueWithOverwrite 覆盖的是接受任务通知的任务,即使当前的任务的通知值上一次没有被读取,也还是会被覆盖
2.xTaskNotifyFromISR()
这个是xTaskNotify()的中断版本,
参数:
xTaskToNotify: 任务句柄,指定发送的任务
ulValue: 任务通知值
eAction: 任务通知的更新方法
pxHigherPriorityWoken: 是否要进行任务切换,pdTRUE----->推出的时候要进行任务的切换,当发送的任务通知导致比当前运行任务的更高优先级的任务被转为就绪态,就需要进行任务fan
参数:
xTaskToNotify: 任务句柄,指定发送的任务
ulValue: 任务通知值
eAction: 任务通知的更新方法
pulPreviousNotificationValue: 保存更新前的任务通知值
注:当参数eAction为eSetValueWithOverwrite,当任务通知值没有更新成功【1.当接收通知的任务上一次的通知值没有被处理,则新接收的通知值就可能会更新失败2.频繁的发送任务通知,导致通知值被一直覆盖,则可能也会更新失败】
4.xTaskNotifyAndQueryFromISR()
这是xTaskNotifyAndQuery()中断版本
还是相对于上面的参数多了一个退出切换任务的参数。
5.ulTaskNotifyTake()
参数:
xClearCountOnExit: pdTRUE----->返回的任务通知值清零 pdFLASE----->返回的认为通知值减一
xTicksToWait: 阻塞时间
返回值:清零或者减一之前的任务通知值
优点:想对于之前的二值信号量以及计数信号量,这个是一种更轻量化的实现,因为信号量是基于内核实现的,但是这个任务通知就是在任务创建的时候,每个人就存在了,是基于任务栈和变量的,不需要任何的内核对象。
6.xTaskNotifyWait()