资料来源于硬件家园:资料汇总 - FreeRTOS实时操作系统课程(多任务管理)
目录
一、任务通知的概念
1、概念
FreeRTOS 从 V8.2.0 版本开始提供任务通知功能,每个任务都有一个 32位的通知值,在多数情况下,任务通可以替代二值信号量、计数信号量、事件组,也可以替代长度为1的队列(可以保存一个 32位整数或指针值)。
相对于以前使用 FreeRTOS 内核通信的资源时必须创建队列、二进制信号量、计数信号量或事件组的情况,使用任务通知显然更灵活。按照 FreeRTOS 官方的说法,使用任务通知比通过信号量等ICP通信方式解除阻塞的任务速度快45%,并且更加省RAM内存空间,任务通知的使用无须创建队列。要想使用任务通知,必须将FreeRTOSConfig.h中的宏定义configUSE_TASK_NOTIFICATIONS设置为1。其实 FreeRTOS 默认是为1的,所以任务通知是默认可用的。
2、发送通知给任务的方式
> 发送通知给任务,如果有通知未读,则不覆盖通知值。
> 发送通知给任务,直接覆盖通知值。
>发送通知给任务, 设置通知值的一个或者多个位,可以当作事件组来使用。
> 发送通知给任务,递增通知值,可以当作信号量使用。
通过对以上任务通知方式的合理使用,可以在一定场合下替代 FreeRTOS 的信号量、队列、事件组等。
3、任务通知使用限制
当然,凡事都有利弊,消息通知虽然处理更快,RAM 开销更小,但也有以下限制:
>只能有一个任务接收通知消息,因为必须指定接收通知的任务。
>只有等待通知的任务可以被阻塞,发送通知的任务在任何情况下都不会因为发送失败
而进入阻塞态。

本文详细介绍了FreeRTOS中的任务通知功能,包括其概念、运行机制、API函数以及如何替代信号量、计数信号量、队列和事件组。任务通知提供了一种更灵活、快速和节省内存的通信方式,但同时也存在一些使用限制。
最低0.47元/天 解锁文章
2978

被折叠的 条评论
为什么被折叠?



