使用任务通知提高RTOS应用的效率

描述

在实时嵌入式系统中,性能和资源效率是决定设计成败的关键因素。传统的实时操作系统(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。 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分