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

    文章

    1309

    浏览量

    39846
  • RTOS
    +关注

    关注

    20

    文章

    776

    浏览量

    118794
收藏 人收藏

    评论

    相关推荐

    求助,关于stm32F4中断优先级0无法抢占的问题求解

    使用F407遇到一个抢占优先级的问题: 现设置优先级分组 HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);也就是15个优先级分组。
    发表于 04-23 07:26

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

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

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

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

    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

    freertos中的任务优先级通过什么函数设置

    任务优先级怎么设置成最高
    发表于 11-02 07:40

    ucos怎么设置任务的优先级

    这个优先级怎么设置
    发表于 10-30 06:18

    STM8中断优先级怎么设置

    STM8中断优先级怎么设置
    发表于 10-25 06:49

    STM32中断优先级相关概念与使用笔记

    ARM cortex_m3 内核支持 256 个中断(16 个内核+240 外部)和可编程 256 中断优先级设置,与其相关的中断控制和
    发表于 10-11 06:53

    谈谈MCU看门狗任务优先级设置

    一个学员在学习 uCOS 系统过程中,对看门狗任务的优先级产生了疑惑,到底该把喂狗任务优先级设置成最高还是最低好?
    发表于 09-15 09:32 377次阅读

    到底该把喂狗任务优先级设置成最高还是最低好?

    一个学员在学习 uCOS 系统过程中,对看门狗任务的优先级产生了疑惑,到底该把喂狗任务优先级设置成最高还是最低好?
    的头像 发表于 09-13 09:10 607次阅读

    基于优先级调度的嵌入式实时操作系统内核详解(上)

    今日分享参加瑞萨RA MCU创意氛围赛的选手项目——基于优先级RTOS内核。本项目为基于优先级调度的嵌入式实时操作系统内核,其中调度部分使
    发表于 09-04 14:12 316次阅读

    RTOS应用程序设计的五个实践技巧

    我在编写RTOS应用程序的过程中,经常会遇到这些困难,包括正确确定系统中有多少任务、如何设置优先级、协调任务行为、避免常见陷阱,有时只是为了让应用
    发表于 07-07 16:10 575次阅读
    <b class='flag-5'>RTOS</b>应用<b class='flag-5'>程序</b>设计的五个实践技巧

    m029lan中断优先级设置与实际对不上是什么原因?

    优先级有0-3,共4,0最高,3最低。现在用函数:NVIC_SetPriority(UART0_IRQn, 1);本想设置串口优先级为1,可实查看时,成了***?
    发表于 06-16 06:19