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

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

3天内不再提示

基于RTOS内核的滴答处理程序优先级设置

星星科技指导员 来源:嵌入式计算设计 作者:Matt Gordon 2022-06-29 09:12 次阅读

在您确定系统中滴答处理的优先级之前,重要的是要注意与滴答相关的延迟,正如我上一篇文章所指出的,可能并不总是在您的系统中实现周期性行为的最佳方式。您可能希望避免在某些任务中依赖滴答作响的一个原因是延迟往往会因调用而波动。如果您的系统任务之一重复调用 OSTimeDly() 以延迟 5 个滴答声,并且您的系统的滴答声周期为 1 毫秒,则该任务不会始终保持等待状态正好 5 毫秒。在某些情况下,它可能会经历接近 4 毫秒的延迟,而在其他情况下,它可能会延迟 6 毫秒或更长时间。

在许多系统中,这种波动或抖动的原因之一是多个任务使用延迟函数。如图 1 所示,如果三个任务的延迟周期都在同一个内核节拍上到期,那么只有那些任务中最高优先级的任务会在节拍处理程序之后立即运行。随着时间的推移,较低优先级的任务将在其延迟中经历更多的抖动,因为总是存在它们无法在将它们移动到就绪状态的滴答声之后立即运行的可能性。

poYBAGK7py-AFj_OAABIhj-exLk398.png

当然,滴答处理程序优先级的可变性是延迟波动的另一个潜在来源。在 µC/OS-III 的例子中,它预留了一个系统任务来处理滴答中断,如果这个任务被赋予了一个相对较低的优先级并且在一个高优先级任务运行时发生了一个滴答,那么内核将不会被能够处理滴答并执行任何相关的调度,直到 CPU 被高优先级任务放弃,如图 2 所示。在完全在 ISR 中处理滴答的 µC/OS-II 中,如果这ISR 的优先级相对较低,并且在执行更重要的 ISR 期间发生了滴答声。

pYYBAGK7pzWATWhrAABc9MPfz7U548.png

在设置滴答优先级时,您需要牢记应用程序对波动延迟的容忍度。如果您的代码可以适应几毫秒的波动——也许是因为您将使用滴答延迟仅用于轮询用户 I/O——那么您可以选择优先级相对较低的滴答。另一方面,如果您的任务需要相当一致的延迟,那么您应该采用高优先级,并且您还应该采取措施限制使用延迟函数的任务数量。

RTOS 内核用户在配置滴答优先级和频率方面可能具有的灵活性肯定会给刚接触内核的开发人员带来一些困难。然而,通过设置刻度所涉及的权衡信息,这种灵活性成为定制多任务系统以满足各种应用程序需求的宝贵手段。我已尝试在本系列博客中提供滴答使用和配置所需的一些关键信息。

审核编辑:郭婷

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

    关注

    3

    文章

    1362

    浏览量

    40221
  • RTOS
    +关注

    关注

    21

    文章

    809

    浏览量

    119414
收藏 人收藏

    评论

    相关推荐

    freertos中断优先级在哪设置

    FreeRTOS是一个流行的实时操作系统,它广泛应用于嵌入式系统开发。在FreeRTOS中,中断优先级是一个重要的概念,因为它决定了中断处理的顺序和响应时间。 1. 理解中断优先级 在讨论如何
    的头像 发表于 09-02 14:17 544次阅读

    ESP32S2如何设置中断优先级

    ESP32S2有六中断, 如何设置中断优先级? 比如在GPIO例程里 ,这种中断优先级是如何设置的呢? 中断寄存器列表里 ,只有简称,哪里
    发表于 06-21 07:59

    为什么不能在不同的优先级中安装相同的处理程序

    在不同的优先级中安装相同的处理程序? 我需要一个解决方案,在不同的优先级中安装相同的处理程序(I
    发表于 05-31 08:16

    如何在不同优先级安装相同的处理程序

    在不同的优先级中安装相同的处理程序? 我需要一个解决方案,在不同的优先级中安装相同的处理程序(I
    发表于 05-28 08:13

    systick的中断优先级是否应该设置为最高优先级的嵌套中断?

    最近在学习ucosii有这样一个疑问,关于stm32的systick作为ucosii的基准时钟,systick的中断优先级是否应该设置为最高优先级的嵌套中断。理由是什么?各位大侠求指教!!!
    发表于 05-16 06:44

    创建了两个task如果一个优先级高 一个优先级低,高优先级的那个一直在做,什么时候会调度到低优先级的呢?

    创建了两个task如果一个优先级高一个优先级低, 我看到任务的函数都是用死循环做的,那个高优先级的那个一直在做,什么时候会调度到低优先级的呢?
    发表于 05-13 07:13

    关于stm32cube中freertos的优先级设置问题求解

    在用stm32cube中freertos,在配置界面里设置为12任务优先级,但是在cube中配置每个任务优先级时还是只能选择7种优先级,分
    发表于 04-22 07:25

    ARM7使用IAR或者KEIL,设置中断优先级后,默认就是中断嵌套吗还是需要专门处理

    使用IAR或者KEIL,设置中断优先级后,默认就是中断嵌套吗,还是需要专门处理
    发表于 04-19 08:09

    不会RTOS,是因为你没搞懂NVIC

    管理的中断可进行中断嵌套,直译为高优先级可打断低优先级中断,然后高优先级执行完了再转回去执行低优先级中断。对于RTOS(实时操作系统)类型的
    的头像 发表于 03-31 08:09 949次阅读
    不会<b class='flag-5'>RTOS</b>,是因为你没搞懂NVIC

    STM32F103的寄存器NVIC_IPRx抢占优先级和子优先级是怎么设置的?

    STM32F103的寄存器NVIC_IPRx有些不明白,抢占优先级和子优先级是怎么设置的? 如果,中断分组2,抢占优先级3,子优先级3
    发表于 03-27 07:48

    RTTnano的用户main函数中的优先级是多少?

    RTTnano 的用户main函数中的优先级是多少?为什么会出现创建新的task之后,main函数会抢占掉低优先级的task,例如RT_THREAD_PRIORITY_MAX设置为8 ,低于3
    发表于 02-26 08:01

    M0516中断优先级怎么设置

    新唐M0516中断优先级设置,有没有示例,没找到相关接口,谢谢!
    发表于 01-16 07:25

    华为和思科默认路由优先级

    优先级值不同,则优先级值最小的为最优路由(无论开销值是否相同,另一种理解就是对不同路由来源或路由协议之间的比较)。
    的头像 发表于 01-11 10:47 1069次阅读

    GD32如何配置中断优先级分组以及中断优先级

    使用GD32 MCU的过程中,大家可能会有以下疑问:中断优先级如何配置和使用?
    的头像 发表于 01-10 10:30 2931次阅读
    GD32如何配置中断<b class='flag-5'>优先级</b>分组以及中断<b class='flag-5'>优先级</b>

    python中运算符的优先级大小

    Python中运算符的优先级决定了表达式中各个运算符的计算顺序。了解运算符的优先级对于正确理解和编写复杂的表达式非常重要。本文将详细介绍Python中运算符的优先级,并给出一些示例来帮助读者更好地理
    的头像 发表于 11-29 16:21 3213次阅读