μC/OS、RTT等大多数实时内核都是抢占式的,准备运行的最高优先级任务始终被赋予 CPU 控制权。
当一个任务使更高优先级的任务准备好运行时,当前任务被抢占(挂起)并且更高优先级的任务立即获得 CPU 的控制权。
如果 ISR 使更高优先级的任务准备就绪,当 ISR 完成时,被中断的任务被挂起并恢复新的更高优先级任务。

(1) 任务正在执行但被中断。(2) 如果中断被使能,CPU 向量(跳转)到 ISR。(3) ISR 处理事件并使更高优先级的任务准备好运行。ISR 完成后,调用内核提供的服务(即调用内核提供的函数)。(4) & (5) 该函数知道一个更重要的任务已经准备好运行,因此内核将执行上下文切换并执行更重要的代码而不是返回到被中断的任务任务。当更重要的任务完成时,内核提供的另一个函数被调用,让任务进入休眠状态,等待事件(即 ISR)发生。(6) & (7) 然后内核“看到”需要执行一个较低优先级的任务,并完成另一个上下文切换以恢复被中断任务的执行。
使用抢占式内核,最高优先级任务的执行是确定性的;你可以确定它何时可以控制 CPU。因此,通过使用抢占式内核可以最大限度地减少任务级响应时间。
使用抢占式内核的应用程序代码不应使用不可重入函数,除非通过使用互斥信号量确保对这些函数的独占访问,因为低优先级和高优先级任务都可以使用公共函数。如果较高优先级的任务抢占正在使用该功能的较低优先级的任务,则可能会发生数据损坏。
总而言之,抢占式内核始终执行准备运行的最高优先级任务。中断抢占任务,完成 ISR 后,内核将继续执行准备运行的最高优先级任务(而不是被中断的任务)。任务级别的响应是最佳的和确定性的,当系统响应性很重要时,建议使用抢占式内核。
-
内核
+关注
关注
3文章
1390浏览量
40588 -
cpu
+关注
关注
68文章
10944浏览量
213862 -
函数
+关注
关注
3文章
4353浏览量
63280 -
RTT
+关注
关注
0文章
65浏览量
17285 -
ISR
+关注
关注
0文章
38浏览量
14522
发布评论请先 登录
相关推荐
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-Linux内核移植之内核简介
飞凌嵌入式ElfBoard ELF 1板卡-Linux内核移植之内核简介
嵌入式工程师都在找的【Linux内核调试技术】建议收藏!
嵌入式Hypervisor:架构、原理与应用 阅读体验 +分离内核的嵌入式Hyperviso

rtthread是抢占式的rtos,那么线程的timeout参数具体的作用是什么呢?
新书发布——《RT-Thread嵌入式实时操作系统内核、驱动和应用开发技术》

linux驱动程序如何加载进内核
Linux内核测试技术

欢创播报 华为宣布鸿蒙内核已超越Linux内核
系统中的latency是如何产生的

相同的代码,不同的工程出现定时器抢占的现象怎么解决?
求助,关于stm32F4中断优先级0无法抢占的问题求解
嵌入式实时操作系统优先级抢占式调度机制解析

评论