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

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

3天内不再提示

抢占式内核

嵌入式应用开发 来源:嵌入式应用开发 作者:嵌入式应用开发 2022-09-29 18:40 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

μC/OS、RTT等大多数实时内核都是抢占式的,准备运行的最高优先级任务始终被赋予 CPU 控制权。

当一个任务使更高优先级的任务准备好运行时,当前任务被抢占(挂起)并且更高优先级的任务立即获得 CPU 的控制权。

如果 ISR 使更高优先级的任务准备就绪,当 ISR 完成时,被中断的任务被挂起并恢复新的更高优先级任务。

poYBAGM1dd6AGl4QAAFO_HeIp_U136.png

(1) 任务正在执行但被中断。(2) 如果中断被使能,CPU 向量(跳转)到 ISR。(3) ISR 处理事件并使更高优先级的任务准备好运行。ISR 完成后,调用内核提供的服务(即调用内核提供的函数)。(4) & (5) 该函数知道一个更重要的任务已经准备好运行,因此内核将执行上下文切换并执行更重要的代码而不是返回到被中断的任务任务。当更重要的任务完成时,内核提供的另一个函数被调用,让任务进入休眠状态,等待事件(即 ISR)发生。(6) & (7) 然后内核“看到”需要执行一个较低优先级的任务,并完成另一个上下文切换以恢复被中断任务的执行。

使用抢占式内核,最高优先级任务的执行是确定性的;你可以确定它何时可以控制 CPU。因此,通过使用抢占式内核可以最大限度地减少任务级响应时间。

使用抢占式内核的应用程序代码不应使用不可重入函数,除非通过使用互斥信号量确保对这些函数的独占访问,因为低优先级和高优先级任务都可以使用公共函数。如果较高优先级的任务抢占正在使用该功能的较低优先级的任务,则可能会发生数据损坏。

总而言之,抢占式内核始终执行准备运行的最高优先级任务。中断抢占任务,完成 ISR 后,内核将继续执行准备运行的最高优先级任务(而不是被中断的任务)。任务级别的响应是最佳的和确定性的,当系统响应性很重要时,建议使用抢占式内核。

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

    关注

    4

    文章

    1436

    浏览量

    42482
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11216

    浏览量

    222877
  • 函数
    +关注

    关注

    3

    文章

    4406

    浏览量

    66816
  • RTT
    RTT
    +关注

    关注

    0

    文章

    66

    浏览量

    18126
  • ISR
    ISR
    +关注

    关注

    0

    文章

    38

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    抢占优先级和子优先级

    关于抢占优先级和子优先级: 1)具有高抢占优先级的中断可以在具有低抢占优先级的中断服务程序执行过程中被响应,即中断嵌套,或者说高
    发表于 12-03 07:11

    Linux内核printk日志级别全解析:从参数解读到实操配置

    ”—— 它直接决定了 printk(内核打印函数)的日志输出行为。如果你是嵌入开发者、内核调试工程师,或经常需要排查驱动 / 系统问题,理解这串数字和 printk 输出等级,能让你高效筛选关键日志
    的头像 发表于 11-20 15:54 1235次阅读
    Linux<b class='flag-5'>内核</b>printk日志级别全解析:从参数解读到实操配置

    RT-Thread v5.2.2 正式发布:内核稳健性增强,驱动组件全面升级 | 技术集结

    亲爱的开发者们:亲爱的开发者们,我们很高兴地宣布RT-Threadv5.2.2版本正式发布!本次更新在系统内核、设备驱动、网络协议栈、libcpu支持等多个关键领域进行了重要优化和修复,为嵌入
    的头像 发表于 11-16 10:05 759次阅读
    RT-Thread v5.2.2 正式发布:<b class='flag-5'>内核</b>稳健性增强,驱动组件全面升级 | 技术集结

    单片机的操作系统

    抢占和轮转调度,适用于低资源消耗场景(如STM32F0系列)。 ‌ ‌ μC/OS-II ‌:抢占多任务内核,支持64个任务,内存分区管理避免碎片,中断嵌套深度达255层,适合工业
    发表于 11-14 06:18

    国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—Linux-RT应用开发案例

    PREEMPT机制进行补丁。PREEMPT_RT补丁的关键是最小化不可抢占内核代码量,同时最小化必须更改的代码量,以便提供这种附加的可抢占性。PREEMPT_RT补丁利用Linux内核
    的头像 发表于 07-30 10:33 576次阅读
    国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—Linux-RT应用开发案例

    一文读懂:嵌入Linux实时性进阶

    能够在限定的时间内对外部时间做出相应的特性。 Linux可以通过任务调度与相应时间,中断延迟与抢占延迟,内核抢占性与实时补丁,实时调度策略,硬件支持来提高其实时性,但它本身并不是一个硬实时操作系统
    发表于 07-10 15:26

    强实时运动控制内核MotionRT750(一):驱动安装、内核配置与使用

    强实时运动控制内核MotionRT750的驱动安装与内核配置
    的头像 发表于 07-03 15:48 3446次阅读
    强实时运动控制<b class='flag-5'>内核</b>MotionRT750(一):驱动安装、<b class='flag-5'>内核</b>配置与使用

    基于RISC-V内核的嵌入系统在机器人关节控制中的应用研究

    控制提供了新的选择。本文结合多个基于RISC-V内核的芯片案例,详细探讨了基于RISC-V内核的嵌入系统在机器人关节控制中的应用研究,分析了其优势、关键技术以及未来应用前景。 一、引言 机器人关节控制是机器人技术中的核心部分,
    的头像 发表于 04-13 00:00 1254次阅读

    使用TFTP加载内核设备树

    在嵌入项目开发中,为了适配新外设、调整硬件资源分配或修复驱动问题,需要频繁修改设备树和内核。修改完成后,通常需要重新编译生成镜像,并将其烧录到开发板上进行测试。然而,传统的烧录方式不仅需要连接物理接口,还可能因为镜像体积较大而耗费较长时间,这在开发周期紧张的情况下显得尤
    的头像 发表于 01-17 15:52 1852次阅读
    使用TFTP加载<b class='flag-5'>内核</b>设备树

    嵌入学习-飞凌嵌入ElfBoard ELF 1板卡-Linux内核移植之内核启动流程

    关于内核启动流程涉及内容较多而且复杂,过度的分析意义不大,因此,这里不做详细讲解,只做一个大概的介绍。初学者只做了解,有一定基础的可以深入理解。内核镜像被uboot加载到内存空间之后,获得控制权
    发表于 01-07 09:20

    飞凌嵌入ElfBoard ELF 1板卡-Linux内核移植之内核启动流程

    关于内核启动流程涉及内容较多而且复杂,过度的分析意义不大,因此,这里不做详细讲解,只做一个大概的介绍。初学者只做了解,有一定基础的可以深入理解。 内核镜像被uboot加载到内存空间之后,获得控制权
    发表于 01-06 09:51

    rk3566-pwm内核驱动

    rk3566-pwm内核驱动
    发表于 01-05 09:18 0次下载

    嵌入学习-飞凌嵌入ElfBoard ELF 1板卡-内核编译之初次编译

    接下来我们就进行内核代码的初次编译,直接使用我们适配好的Linux内核源码进行编译。为了使编译操作更加简单,我们提供了编译脚本,将编译操作命令放进了脚本中执行,直接执行编译脚本文件build.sh
    发表于 12-18 08:55

    嵌入学习-飞凌嵌入ElfBoard ELF 1板卡-Linux内核移植之内核简介

    学到本章节,大家应该对Linux操作系统都有了一定的了解,但可能还不知道我们拿到手的内核源码都经历了什么。linux有一个庞大的开源社区,每个人都可以向开源社区提交代码。由于linux内核十分庞大
    发表于 12-16 13:08

    飞凌嵌入ElfBoard ELF 1板卡-Linux内核移植之内核简介

    学到本章节,大家应该对Linux操作系统都有了一定的了解,但可能还不知道我们拿到手的内核源码都经历了什么。linux有一个庞大的开源社区,每个人都可以向开源社区提交代码。由于linux内核十分庞大
    发表于 12-13 09:03