发送任务通知-ce 6810配置手册
17.1 任务通知简介 任务通知在 FreeRTOS 中是一个可选的功能,要使用任务通知的话就需要将宏 configUSE_TASK_NOTIFICATIONS 定义为 1。 FreeRTOS 的每个任务都有一个 32 位的通知值,任务控制块中的成员变量 ulNotifiedValue 就是这个通知值。任务通知是一个事件,假如某个任务通知的接收任务因为等待任务通知而阻 塞的话,向这个接收任务发送任务通知以后就会解除这个任务的阻塞状态。也可以更新接收任 务的任务通知值,任务通知可以通过如下方法更新接收任务的通知值: ● 不覆盖接收任务的通知值(如果上次发送给接收任务的通知还没被处理)。 ● 覆盖接收任务的通知值。 ● 更新接收任务通知值的一个或多个 bit。 ● 增加接收任务的通知值。 合理、灵活的使用上面这些更改任务通知值的方法可以在一些场合中替代队列、二值信号 量、计数型信号量和事件标志组。使用任务通知来实现二值信号量功能的时候,解除任务阻塞 的时间比直接使用二值信号量要快 45%(FreeRTOS 官方测试结果,使用 v8.1.2 版本中的二值信 号量,GCC 编译器,-O2 优化的条件下测试的,没有使能断言函数 configASSERT()),并且使用 的 RAM 更少! 任务通知的发送使用函数 xTaskNotify()或者 xTaskNotifyGive()(还有此函数的中断版本)来 完成,这个通知值会一直被保存着,直到接收任务调用函数 xTaskNotifyWait()或者 ulTaskNotifyTake()来获取这个通知值。假如接收任务因为等待任务通知而阻塞的话那么在接收 到任务通知以后就会解除阻塞态。 任务通知虽然可以提高速度,并且减少 RAM 的使用,但是任务通知也是有使用限制的: ● FreeRTOS 的任务通知只能有一个接收任务,其实大多数的应用都是这种情况。 ● 接收任务可以因为接收任务通知而进入阻塞态,但是发送任务不会因为任务通知发送 失败而阻塞。 17.2 发送任务通知 任务通知发送函数有 6 个,如表 17.2.1 所示: 函数 描述 xTaskNotify() 发送通知,带有通知值并且不保留接收任务原通知值,用 在任务中。 xTaskNotifyFromISR() 发送通知,函数 xTaskNotify()的中断版本。 xTaskNotifyGive() 发送通知,不带通知值并且不保留接收任务的通知值,此 函数会将接收任务的通知值加一,用于任务中。 vTaskNotifyGiveFromISR() 发送通知,函数 xTaskNotifyGive()的中断版本。 xTaskNotifyAndQuery() 发送通知,带有通知值并且保留接收任务的原通知值,用 在任务中。 xTaskNotiryAndQueryFromISR() 发送通知,函数 xTaskNotifyAndQuery()的中断版本,用在 中断服务函数中。 表 17.2.1 任务通知发送函数 1、函数 xTaskNotify()
- 粉丝: 29
- 资源: 4162
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助