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

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

3天内不再提示

滴答处理程序不是调度程序

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

实时内核通常使用定时器或类似的周期性中断源来为多任务应用程序实现延迟和其他有用的服务。尽管利用此类服务所需的代码通常只涉及对内核 API 函数的调用,但似乎周期性中断(或俗称的滴答声)已成为混淆甚至争论的主要来源。内核用户。

新内核用户之间的一个常见误解是滴答处理程序是内核的任务调度程序。换句话说,滴答中断被认为是可以使任务运行的唯一机制。现实情况是,在抢占式、基于优先级的内核中,服务滴答的代码是可能导致 CPU 控制权从一个任务传递到另一个任务的众多代码之一。在此类内核中,任何中断通常都可能导致新任务运行,如图 1 所示,涉及 UART 中断。此外,任务本身可能有多种方式来放弃 CPU 并进入挂起或等待状态。

pYYBAGK7qXuAP5XoAABWXfdoK0E756.png

当任务需要能够控制它在等待状态中花费的时间量时,滴答中断就变得必要了。例如,µC/OS-II 和 µC/OS-III 操作系统提供了一种方法来控制超时参数,这些参数指定非滴答事件的最大等待时间(例如接收 UART 字符),并通过延时函数,如 OSTimeDly()。

图 2 基于 µC/OS-II,突出显示滴答中断在实现 OSTimeDly() 中的作用。在图的左侧,一个相对高优先级的任务调用 OSTimeDly() 来产生一个 5 个滴答的延迟,导致内核在与该任务关联的数据结构中初始化一个延迟字段,并将该任务移出允许另一个任务运行的就绪状态。延迟字段被初始化为值 5,并且在调用 OSTimeDly() 之后的每个滴答中断中,该字段递减。在调用后的第五次中断时,该字段达到 0,并且内核的滴答处理程序(在 µC/OS-II 中是 ISR 的一部分,但在 µC/OS-III 中有自己的任务)使高优先级任务准备好再次运行。然后,该任务将获得 CPU 控制权,因为它的优先级超过了在第五个滴答发生时正在运行的任务的优先级。

pYYBAGK7qYGAA-l0AABYAydpSFY132.png

从技术上讲,可以编写一个没有超时和延迟函数(如 OSTimeDly())的多任务应用程序。然而,大多数多任务系统至少包含一项可以从基于滴答的服务中受益的任务。在接下来的文章中,我将考虑两个重要的滴答参数——频率和优先级——对此类系统的影响。

审核编辑:郭婷

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

    关注

    68

    文章

    10438

    浏览量

    206531
  • 定时器
    +关注

    关注

    23

    文章

    3147

    浏览量

    112034
  • uart
    +关注

    关注

    22

    文章

    1158

    浏览量

    99952
收藏 人收藏

    评论

    相关推荐

    什么是单板机的监控程序

    初始化程序:用于设置单片机的初始状态,包括初始化寄存器、设置中断向量、启动时钟等。   主循环程序:监控程序的主程序,不断循环执行,包括读取输入、
    的头像 发表于 02-02 17:15 892次阅读
    什么是单板机的监控<b class='flag-5'>程序</b>?

    单片机处理模拟量的程序流程是如何的

    单片机处理模拟量的程序流程是一种常见的应用场景,单片机通常被用来处理各种类型的传感器信号,例如温度传感器、压力传感器、光敏传感器等。在本文中,我将详尽地描述单片机处理模拟量的
    的头像 发表于 12-15 09:28 505次阅读

    一文详解PLC子程序与子程序指令

    在编程时经常会遇到相同的程序段需要多次执行的情况,如图6-39所示,程序段A要执行两次,编程时要写两段相同的程序段,这样比较麻烦。解决这个问题的方法是将需要多次执行的程序段从主
    的头像 发表于 12-14 13:33 2483次阅读
    一文详解PLC子<b class='flag-5'>程序</b>与子<b class='flag-5'>程序</b>指令

    数字信号处理C语言的程序

    电子发烧友网站提供《数字信号处理C语言的程序集.pdf》资料免费下载
    发表于 11-21 11:14 21次下载
    数字信号<b class='flag-5'>处理</b>C语言的<b class='flag-5'>程序</b>集

    程序员表白程序

    电子发烧友网站提供《程序员表白程序.rar》资料免费下载
    发表于 11-21 10:41 0次下载
    <b class='flag-5'>程序</b>员表白<b class='flag-5'>程序</b>

    vscode安装RT studio插件后编译提示 ‘scons’ 不是内部或外部命令,也不是可运行的程序或批处理文件的原因?

    使用vscode 安装RT studio插件后编译 提示 ‘scons’ 不是内部或外部命令,也不是可运行的程序 或批处理文件? 请问下这个是什么弄的呢?使用软件 rtstudio软件
    发表于 09-07 16:59

    嵌入式软件程序设计方案

    在嵌入式软件程序设计过程中中,经常会遇到超时(或定时)的处理情况,基本处理思想是在时间到的时候进行相关程序处理,下面介绍两种超时(或定时)的
    发表于 09-06 09:27 406次阅读
    嵌入式软件<b class='flag-5'>程序</b>设计方案

    8051计时器滴答声中断

    经常需要在程序中使用计时器来为事件计时,或者仅仅作为一个简单的圈速计时器。 使用C51,很容易将强大的、中断驱动的计时器滴答支持添加到您的应用程序中,只需很少的工作。 本应用笔记提供了一个定时器
    发表于 09-04 06:24

    西门子博途: 有关处理程序执行错误的示例

    本地错误处理可单独编程,也可与其它代码一起编程。为确保可识别程序中的所有错误,建议使用本地错误处理组合方案,如以下示例所示。
    的头像 发表于 07-12 17:43 2118次阅读
    西门子博途: 有关<b class='flag-5'>处理</b><b class='flag-5'>程序</b>执行错误的示例

    使用Arduino和处理Android应用程序DIY车速表

    电子发烧友网站提供《使用Arduino和处理Android应用程序DIY车速表.zip》资料免费下载
    发表于 07-06 11:23 0次下载
    使用Arduino和<b class='flag-5'>处理</b>Android应用<b class='flag-5'>程序</b>DIY车速表

    如何设计STM32嵌入式程序的超时机制?

    在嵌入式软件程序设计过程中中,经常会遇到超时(或定时)的处理情况,基本处理思想是在时间到的时候进行相关程序处理,下面介绍两种超时(或定时)的
    的头像 发表于 06-15 17:04 871次阅读
    如何设计STM32嵌入式<b class='flag-5'>程序</b>的超时机制?

    什么是系统滴答?RTOS滴答设置多少才合理?

    系统滴答(SysTick),有些地方也叫时钟节拍、系统心跳等。
    发表于 06-15 09:15 789次阅读
    什么是系统<b class='flag-5'>滴答</b>?RTOS<b class='flag-5'>滴答</b>设置多少才合理?

    电源为什么在出现负载短路时导致电感发出滴答滴答的声音呢?

    在之前的一个设计项目交付后,由于现场调试人员的操作失误,在拆开设备后面板时被裸露的线头触碰电路板(喷有三防漆),最终导致短路,现场反馈的是说单片机不工作,并且听到电路板带电时伴有“滴答滴答”的声音。
    发表于 05-23 09:49 705次阅读
    电源为什么在出现负载短路时导致电感发出<b class='flag-5'>滴答</b><b class='flag-5'>滴答</b>的声音呢?

    怎么中断中的滴答会慢于notify中的滴答呢?

    但是我的程序循环唤醒,每次的调试信息都是先打印唤醒中断里面的内容(是RTC唤醒中断回调函数中往系统工作队列中添加的函数,这个函数的打印信息) 最后才是rt_pm_notify_set中设置
    发表于 05-17 14:38

    基于89C51单片机的喇叭滴答声源程序

    基于89C51单片机的喇叭滴答声源程序
    发表于 05-15 10:59 0次下载