目录
1.xTaskNotifyGive/ulTaskNotifyTake
[在任务中使用 xTaskNotifyGive 函数,在 ISR 中使用 vTaskNotifyGiveFromISR 函数,都是直接给其他任务发送通知:](#在任务中使用 xTaskNotifyGive 函数,在 ISR 中使用 vTaskNotifyGiveFromISR 函数,都是直接给其他任务发送通知:)
[使用 ulTaskNotifyTake 函数可以实现轻量级的、高效的二进制信号量、计数型信号量](#使用 ulTaskNotifyTake 函数可以实现轻量级的、高效的二进制信号量、计数型信号量)
vTaskNotifyGiveFromISR函数的参数说明如下:
[xTaskNotify 函数功能更强大,可以使用不同参数实现各类功能,比如:](#xTaskNotify 函数功能更强大,可以使用不同参数实现各类功能,比如:)
[xTaskNotify() 比 xTaskNotifyGive() 更灵活、强大,使用上也就更复杂](#xTaskNotify() 比 xTaskNotifyGive() 更灵活、强大,使用上也就更复杂)
[xTaskNotifyFromISR()是它对应的 ISR 版本](#xTaskNotifyFromISR()是它对应的 ISR 版本)
使用xTaskNotifyWait()函数!它比ulTaskNotifyTake()更复杂:
[xTaskNotifyFromISR 函数跟 xTaskNotify 很 类 似 , 就 多 了 最 后 一 个 参 数pxHigherPriorityTaskWoken。在很多ISR函数中,这个参数的作用都是类似的,使用场景如下:'](#xTaskNotifyFromISR 函数跟 xTaskNotify 很 类 似 , 就 多 了 最 后 一 个 参 数pxHigherPriorityTaskWoken。在很多ISR函数中,这个参数的作用都是类似的,使用场景如下:‘)
使用任务通知,可以实现轻量级的队列(长度为 1)、邮箱(覆盖的队列)、计数型信号量、二进制信号量、事件组
任务通知有 2 套函数,简化版、专业版,列表如下:简化版函数的使用比较简单,它实际上也是使用专业版函数实现的
专业版函数支持很多参数,可以实现很多功能
1.xTaskNotifyGive/ulTaskNotifyTake
在任务中使用 xTaskNotifyGive 函数,在 ISR 中使用 vTaskNotifyGiveFromISR 函数,都是直接给其他任务发送通知:
使得通知值加一
并使得通知状态变为"pending",也就是taskNOTIFICATION_RECEIVED,表示有数据了、待处理
可以使用ulTaskNotifyTake函数来取出通知值:
如果通知值等于 0,则阻塞(可以指定超时时间)
当通知值大于 0 时,任务从阻塞态进入就绪态
在ulTaskNotifyTake 返回之前,还可以做些清理工作:把通知值减一,或者把通知值清零
使用 ulTaskNotifyTake 函数可以实现轻量级的、高效的二进制信号量、计数型信号量
这几个函数的原型如下:

xTaskNotifyGive函数的参数说明如下:

vTaskNotifyGiveFromISR函数的参数说明如下:

ulTaskNotifyTake函数的参数说明如下:

2.xTaskNotify/xTaskNotifyWait
xTaskNotify 函数功能更强大,可以使用不同参数实现各类功能,比如:
让接收任务的通知值加一:这时 xTaskNotify()等同于 xTaskNotifyGive()
设置接收任务的通知值的某一位、某些位,这就是一个轻量级的、更高效的事件组
把一个新值写入接收任务的通知值:上一次的通知值被读走后,写入才成功。这就是轻量级的、长度为 1 的队列
用一个新值覆盖接收任务的通知值:无论上一次的通知值是否被读走,覆盖都成功。类似 xQueueOverwrite()函数,这就是轻量级的邮箱
xTaskNotify() 比 xTaskNotifyGive() 更灵活、强大,使用上也就更复杂
xTaskNotifyFromISR()是它对应的 ISR 版本
使用xTaskNotifyWait()函数!它比ulTaskNotifyTake()更复杂:
可以让任务等待(可以加上超时时间),等到任务状态为"pending"(也就是有数据)
还可以在函数进入、退出时,清除通知值的指定位
这几个函数的原型如下:

xTaskNotify函数的参数说明如下:


eNotifyAction参数说明:



xTaskNotifyFromISR 函数跟 xTaskNotify 很 类 似 , 就 多 了 最 后 一 个 参 数pxHigherPriorityTaskWoken。在很多ISR函数中,这个参数的作用都是类似的,使用场景如下:'
被通知的任务,可能正处于阻塞状态
xTaskNotifyFromISR 函数发出通知后,会把接收任务从阻塞状态切换为就绪态
如果被唤醒的任务的优先级,高于当前任务的优先级,则"*pxHigherPriorityTaskWoken"被设置为 pdTRUE,这表示在中断返回之前要进行任务切换
xTaskNotifyWait函数列表如下:





