在实时嵌入式系统中,性能和资源效率是决定设计成败的关键因素。传统的实时操作系统(RTOS)提供了如队列、信号量和事件组机制,实现任务之间的同步和通信。FreeRTOS/SAFERTOS还提供一种方法可以使这些过程更快、更轻量化,即任务通知。
什么是任务通知?
任务通知作为传统RTOS同步方法的轻量级替代方案,FreeRTOS/SAFERTOS中的每个任务都有一个32位的通知值。这些通知可用于解除任务阻塞并以灵活的方式更新其通知值,例如:
•设置通知值但不覆盖旧值
•更新通知值
•设置通知值中的指定位
•通知值加一
其灵活性允许任务通知在某些用例中取代单独创建的同步对象(如队列或信号量)。如果使用得当,任务通知显著可以提高系统的速度和内存效率。
任务通知vs传统机制
二进制信号量:传统方式中,当仅有一个任务需要使用信息时,可以使用二进制信号量管理任务同步。然而,二进制信号量的管理需要一个队列控制结构。使用任务通知消除了这种结构,减少了RAM使用并简化了内部RTOS进程。
事件组:事件组是二进制标志位的集合,每个标志位都有特定的含义。任务通知也可以达到这个目的。与管理专用的事件组对象不同,32位任务通知值可以被视为二进制标志的集合,从而提供了更有效的替代方法。
任务通知的优势
速度:使用任务通知解除任务阻塞的速度比使用传统的二进制信号量快45%。对于时间敏感的应用程序来说,这是一个显著的改进。
节省内存:任务通知减少了对额外的RTOS控制结构(如队列或信号量)的需求,从而减少了RAM使用,这在资源受限的系统中至关重要。
使用限制
虽然任务通知提供了实质性的性能改进,但它们也有一些用例限制:
单接收任务限制:在事件只有一个接收任务时,才能使用任务通知,不适合多个任务需要使用相同事件或通知的场景。
非阻塞发送:与队列不同,如果通知已经挂起,任务通知不会阻塞发送任务。但是,可以将通知配置为“不覆盖旧值”,确保在前一个通知处理之前不会发送新的通知。
典型应用场景
任务同步:当一个任务需要通知或解除阻塞另一个任务时。
中断处理:任务通知可以用作ISR(中断服务程序)和任务之间的轻量级二进制信号量,在中断发生后解除阻塞任务。
事件标志管理:任务通知值可以充当事件组,其中每个位代表一个不同的标志,减少了对指定事件组对象的需求。
结论
对于希望优化其嵌入式系统的性能和资源使用的开发人员来说,任务通知是一个强大的工具。使用任务通知可以替代只涉及单个任务场景的同步机制,可以显著改速度和内存效率。
在实时系统中,每个毫秒和字节都很重要,无论是处理任务同步、处理ISR还是管理事件标志,任务通知都可以提供一种简化且有效的解决方案。
FreeRTOS V10.4.0之后的版本,支持通知数组。SAFERTOS基于FreeRTOS功能模型的预认证安全实时操作系统 (RTOS),用户可以基于FreeRTOS免费启动项目,实现原型验证,并在正式开发开始时升级到SAFERTOS。
-
嵌入式系统
+关注
关注
41文章
3593浏览量
129471 -
RTOS
+关注
关注
22文章
813浏览量
119636 -
实时操作系统
+关注
关注
1文章
198浏览量
30758
原文标题:使用任务通知提高RTOS应用的效率
文章出处:【微信号:麦克泰威廉希尔官方网站 ,微信公众号:麦克泰威廉希尔官方网站 】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论