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 后,内核将继续执行准备运行的最高优先级任务(而不是被中断的任务)。任务级别的响应是最佳的和确定性的,当系统响应性很重要时,建议使用抢占式内核。

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

    关注

    3

    文章

    1309

    浏览量

    39844
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10438

    浏览量

    206528
  • 函数
    +关注

    关注

    3

    文章

    3866

    浏览量

    61308
  • RTT
    RTT
    +关注

    关注

    0

    文章

    63

    浏览量

    16881
  • ISR
    ISR
    +关注

    关注

    0

    文章

    38

    浏览量

    14296
收藏 人收藏

    评论

    相关推荐

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

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

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

    STM32F103的寄存器NVIC_IPRx有些不明白,抢占优先级和子优先级是怎么设置的? 如果,中断分组2,抢占优先级3,子优先级3 那下面这样写对吗? SCB->AIRCR|=0x05FA0500; NVIC->IP[1]|=11110000;
    发表于 03-27 07:48

    鸿蒙使用的是微内核

    我们常说,看一个系统是不是自研,就看它的内核,常见的内核分为:宏内核和微内核,当然还有两者结合体,他们到底有什么区别? 白话宏内核和微
    的头像 发表于 01-30 16:43 173次阅读
    鸿蒙使用的是微<b class='flag-5'>内核</b>?

    gd32vf103根据例子配置了systick和adc中断,但是adc中断无法抢占systick是为什么?

    根据例子配置了systick和adc中断,但是adc中断无法抢占systick 配置为向量和非相量都没有实现
    发表于 01-10 07:43

    如何修改内核设备树

    如何修改内核设备树
    的头像 发表于 12-14 14:06 312次阅读
    如何修改<b class='flag-5'>内核</b>设备树

    Linux内核UDP收包为什么效率低

    现在很多人都在诟病Linux内核协议栈收包效率低,不管他们是真的懂还是一点都不懂只是听别人说的,反正就是在一味地怼Linux内核协议栈,他们的武器貌似只有DPDK。 但是,即便Linux内核协议
    的头像 发表于 11-13 10:38 238次阅读
    Linux<b class='flag-5'>内核</b>UDP收包为什么效率低

    电机应用中切换ADC抢占组通道导致普通组转换错序

    电机应用中切换ADC抢占组通道导致普通组转换错序
    发表于 10-19 07:03

    ADC反复模式下切换抢占组通道导致普通组转换错序

    ADC 控制器内部划分有 2 个时钟域(PCLK 与 ADCCLK),每个时钟域中有各自的状态机,这两状态机之间有相互的控制,会涉及到信号之间穿频。原本更新通道会结束正在转换的普通组以及抢占组,并按
    发表于 10-19 06:45

    CLINT中断控制器优先级和抢占

    内核本地中断(CLINT) 下图为CLINT示意图,CLINT通过固定的中断号和优先级,可将软件中断或定时器中断直接发送给指定的hart,该过程没有仲裁。 CLINT 占地面积小,可直接向 hart
    的头像 发表于 10-08 09:30 364次阅读
    CLINT中断控制器优先级和<b class='flag-5'>抢占</b>

    中颖M0+内核芯片软件模拟内核复位的方法

    中颖M0+内核芯片软件模拟内核复位的方法
    的头像 发表于 09-27 15:27 716次阅读
    中颖M0+<b class='flag-5'>内核</b>芯片软件模拟<b class='flag-5'>内核</b>复位的方法

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

    今日分享参加瑞萨RA MCU创意氛围赛的选手项目——基于优先级的RTOS内核。本项目为基于优先级调度的嵌入式实时操作系统内核,其中调度部分使用固定可抢占的优先级调度机制;提供了可移植接口以便适配
    发表于 09-04 14:12 316次阅读

    RTX51微型实时内核资料

    。 RTX51 Tmall: ·专为无扩展数据的单芯片应用而设计。 但是,它可以与任何8051目标系统一起使用。 ·支持C51编译器的所有内存型号(小型、紧凑型和大型)。 操作系统变量和任务堆栈存储在内部数据/IDATA存储器中。 ·仅执行循环和协作多任务处理。 不支持抢占
    发表于 08-12 06:18

    什么是Linux内核 Linux内核体系结构

    如果Windows已经安装了所有可用的驱动程序,而您只需要打开所需的驱动程序怎么办?这本质上就是内核模块为Linux所做的。内核模块,也称为可加载内核模块(LKM),对于保持内核在不消
    发表于 06-01 09:59 913次阅读
    什么是Linux<b class='flag-5'>内核</b> Linux<b class='flag-5'>内核</b>体系结构

    操作系统中抢占式和非抢占内核的区别

    操作系统一般分为抢占内核和非抢占内核,通常RTOS都是抢占内核。你知道
    的头像 发表于 05-29 10:47 778次阅读
    操作系统中<b class='flag-5'>抢占</b>式和非<b class='flag-5'>抢占</b>式<b class='flag-5'>内核</b>的区别