0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

麦克泰威廉希尔官方网站 来源:麦克泰威廉希尔官方网站 2024-12-27 14:54 次阅读

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

文章出处:【微信号:麦克泰威廉希尔官方网站 ,微信公众号:麦克泰威廉希尔官方网站 】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FreeTRTOS可以通过哪些方法向接收任务更新通知

    每个RTOS任务都有一个32位的通知值,任务创建时,这个值被初始化为0。
    的头像 发表于 09-15 09:28 934次阅读

    嵌入式RTOS任务栈 和 系统栈

    简介明了带你了解嵌入式RTOS任务栈 和 系统栈
    的头像 发表于 05-16 09:57 3266次阅读
    嵌入式<b class='flag-5'>RTOS</b>的 <b class='flag-5'>任务</b>栈 和 系统栈

    能有效提高RTOS性能的方法有哪些?

    (医疗、汽车、航空航天),对嵌入式系统的实时性要求非常高。在这些场合,任务必须在给定的时间内响应并正确完成。而实时操作系统RTOS(Real Time Operation System)本身的运行
    发表于 08-07 07:08

    任务通知发送出问题怎么办

    大家好。我在STM32cubemx里使用FreeRTOS,开启定时器3中断,然后发送一个任务通知给TIM3_Task。但是无论是在回调函数里使用vTaskNotifyGiveFromISR()这个
    发表于 06-18 04:35

    任务通知的问题如何解决

    在一个最高优先级任务1里面发送通知:xTaskNotify((TaskHandle_t)BatTask_Handler,//接收任务通知的电池任务
    发表于 07-13 10:36

    RTOS最高优先级就绪任务查找算法优化

    本文针对嵌入式RTOS中的最高就绪任务的查找,分析了不同的算法,提出了一种基于就绪表数组的优化查找算法,该算法提高了就绪任务的查找速度,改善了系统的性能。同时,给出了其
    发表于 07-27 14:53 23次下载

    LEDs状态灯任务(线程)设计 (基于RTOS

    LEDs状态灯任务(线程)设计(基于RTOS
    的头像 发表于 03-12 11:30 2355次阅读

    FreeRTOS的直接任务(消息)通知

            之前分享了《FreeRTOS V10.4.0更新了哪些功能?》,今天就来详细讲述其中的一个知识点:FreeRTOS的直接任务(消息)通知,这样做的目的就是减少RAM占用空间并加快执行
    的头像 发表于 01-07 09:37 4583次阅读

    FreeRTOS系列第14篇---FreeRTOS任务通知

    每个RTOS任务都有一个32位的通知值,任务创建时,这个值被初始化为0。RTOS任务
    发表于 01-26 17:49 5次下载
    FreeRTOS系列第14篇---FreeRTOS<b class='flag-5'>任务</b><b class='flag-5'>通知</b>

    FreeRTOS任务通知简介及实现

    每个系统任务都会有一个任务通知。然后每个任务通知都具有挂起或者未挂起的状态,以及32位的通知。常
    的头像 发表于 12-06 16:24 2092次阅读

    Free RTOS任务通知-1

    每个任务都有一个32位的通知值,该值在创建任务时初始化为零。
    的头像 发表于 02-10 16:05 885次阅读
    Free <b class='flag-5'>RTOS</b>的<b class='flag-5'>任务</b><b class='flag-5'>通知</b>-1

    Free RTOS任务通知-2

    每个任务都有一个32位的通知值,该值在创建任务时初始化为零。
    的头像 发表于 02-10 16:08 852次阅读
    Free <b class='flag-5'>RTOS</b>的<b class='flag-5'>任务</b><b class='flag-5'>通知</b>-2

    Free RTOS任务通知-3

    每个任务都有一个32位的通知值,该值在创建任务时初始化为零。
    的头像 发表于 02-10 16:11 882次阅读
    Free <b class='flag-5'>RTOS</b>的<b class='flag-5'>任务</b><b class='flag-5'>通知</b>-3

    FreeRTOS任务通知简介

    任务通知简介 任务通知在 FreeRTOS 中是一个可选的功能,要使用任务通知的话就需要将宏co
    的头像 发表于 07-30 11:34 742次阅读

    FreeRTOS任务通知通用发送函数

    发送任务通知 任务通知通用发送函数 任务任务通知
    的头像 发表于 07-30 11:43 726次阅读
    FreeRTOS<b class='flag-5'>任务</b><b class='flag-5'>通知</b>通用发送函数