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

    文章

    11370

    浏览量

    226394
  • 定时器
    +关注

    关注

    23

    文章

    3378

    浏览量

    125074
  • uart
    +关注

    关注

    22

    文章

    1324

    浏览量

    107140
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于瑞萨R7FA2E1A72DFL MCU的智能空调伴侣方案(下)

    主控芯片程序设计使用时间片轮转法,时间片周期为100ms,该周期使用滴答定时器中断来触发。
    的头像 发表于 03-16 08:10 3634次阅读
    基于瑞萨R7FA2E1A72DFL MCU的智能空调伴侣方案(下)

    通过VPN远程下载和监控PLC程序

    通过VPN远程下载和监控PLC程序
    的头像 发表于 01-28 11:18 1238次阅读
    通过VPN远程下载和监控PLC<b class='flag-5'>程序</b>

    飞凌嵌入式ElfBoard-系统信息与资源之获取程序的执行时间

    clock用于获取程序运行的 CPU 时间。它返回自程序启动以来的 CPU 时钟滴答数,通常用于计算程序的执行时间。1.头文件#include 2.函数原型clock_t clock(
    发表于 01-22 08:57

    经典 PLC 程序(6) - 信号防抖

    在PLC程序中,信号防抖是一个非常重要的概念,用于处理由于机械开关触点抖动而产生的虚假信号。本文介绍一下用梯形图、AWBlock和ST语言三种编程,实现信号防抖的控制逻辑。信号防抖在PLC程序
    的头像 发表于 01-20 11:47 783次阅读
    经典 PLC <b class='flag-5'>程序</b>(6) - 信号防抖

    嵌入式基础知识-系统调度

    调度,有许多相似之处。 1、进程的三种状态 执行态(Run):进程占用CPU资源,对于单核处理器,任一时刻只能有一个进行处于执行态。 就绪态(Ready):进程本身具备运行条件,但由于处理机的个数少于
    发表于 12-16 08:15

    C++程序异常的处理机制

    1、什么是异常处理? 有经验的朋友应该知道,在正常的C和C++编程过程中难免会碰到程序不按照原本设计运行的情况。 最常见的有除法分母为零,数组越界,内存分配失效、打开相应文件失败等等。 一个程序
    发表于 12-02 07:12

    使用三菱FX5U PLC的经典小程序案例

    实际的PLC程序往往是某些典型小程序的扩展与叠加,因此掌握一些典型小程序对大型复杂程序的编写非常有利。 鉴于此,本文将给出一些典型小程序,供
    的头像 发表于 11-07 13:57 6254次阅读
    使用三菱FX5U PLC的经典小<b class='flag-5'>程序</b>案例

    NVMe高速传输之摆脱XDMA设计28: TLP 事务处理程序的执行流程

    最小桥设备模型的每个端口的输入端对接一个 TLP事务处理程序, 该程序负责将接收到的 TLP 事务进行解析和路由转发。
    的头像 发表于 09-23 09:13 1209次阅读
    NVMe高速传输之摆脱XDMA设计28: TLP 事务<b class='flag-5'>处理</b><b class='flag-5'>程序</b>的执行流程

    博图SCL程序中的隐式转换

    最近看到一个程序,博图定时器的in脚中写了一个等式,且是一个等号,不是两个等号,有点小疑惑,就做了个测试,结果是博图确实有点灵活。
    的头像 发表于 09-08 11:46 953次阅读
    博图SCL<b class='flag-5'>程序</b>中的隐式转换

    STM32程序的烧录方式

    电子发烧友网站提供《STM32程序的烧录方式.pdf》资料免费下载
    发表于 08-28 16:03 8次下载

    【老法师】多核异构处理器中M核程序的启动、编写和仿真

    有很多研究单片机的小伙伴在面对多核异构处理器时,可能会对多核的启动流程感到困惑——因为不熟悉GCC编程和GDB调试,所以也无法确定多核异构处理器的程序是否能像单片机那样方便地编写和仿真。本篇
    的头像 发表于 08-13 09:05 4301次阅读
    【老法师】多核异构<b class='flag-5'>处理</b>器中M核<b class='flag-5'>程序</b>的启动、编写和仿真

    zephyr设备驱动程序模型

        1:Zephyr 内核支持多种设备驱动程序。驱动程序是否可用取决于board 和驱动程序。 Zephyr 设备模型为配置作为系统一部分的驱动程序提供了一致的设备模型。设备型号负
    的头像 发表于 07-29 10:34 916次阅读
    zephyr设备驱动<b class='flag-5'>程序</b>模型

    单片机怎么烧程序

    单片机烧程序是将编写好的程序代码写入单片机内部存储单元,让单片机按照预设逻辑工作的过程,是单片机应用开发中不可或缺的环节。无论是简单的灯光控制程序,还是复杂的工业控制算法,都需要通过烧程序
    的头像 发表于 07-23 11:47 2232次阅读

    利用PLC调用ABB机器人程序号教程

    PP TO MAIN 程序是用来使机器人里的程序回到 MAIN 主程序的。
    的头像 发表于 07-04 15:34 6165次阅读
    利用PLC调用ABB机器人<b class='flag-5'>程序</b>号教程

    FANUC程序传输软件的使用

    FANUC程序传输软件的使用
    发表于 06-04 16:23 0次下载