烟草味道|嵌入式系统优先级详解( 三 )
所以在操作系统中 , 我们可以修改禁止中断的代码 , 使其不会屏蔽高优先级的中断 , 对于高优先级中断来说 , 可增加实时性 。
uCOS II 中默认是直接全局禁止中断的(可以修改它) , 但是 FreeRTOS 是可以禁止部分中断的 , 使用的就是上述寄存器 , 当然这个功能需要单片机本身支持才行 。
以上就是中断优先级的内容 , 如果只会裸机的话 , 那么以上内容就差不多了 , 但是如果是操作系统 , 那么需要再增加一个任务优先级的概念 。
所谓任务 , 你也可以认为是一种中断 , 只不过 , 这种特殊的中断优先级低于所有的硬件触发的中断 。
中断的优先级凌驾于所有任务之上 。
也就是说 , 一旦中断来临 , 不管 CPU 正在执行哪个任务 , 在全局中断开启的情况下 , 都会立刻执行中断里的程序 。
在中断中 , 可以进行中断嵌套 , 所谓的中断嵌套即当前中断被另一个更高优先级的中断所打断(即抢占) , 被打断的中断必须在高优先级任务执行完成后才会继续执行 。 而在嵌入式实时操作系统中 , 为了更好的处理实时任务 , 一般而言也会设置成可抢占的任务(亦称可剥夺) 。
中断的优先级处理是由内核进行管理的 , 这里的内核是指单片机内核 , 比如 STM32F103 的内核是 Cortex-M3(更准确的说是由 NVIC 管理) 。
一旦设置好相应的寄存器之后 , 只要中断来了 , 那么就会自动处理中断程序 , 这些工作由硬件完成 , 它会在多个中断同时来临时选择最高的优先处理;也会在中断执行时 , 如果有一个更高优先级的中断来临时 , 打断当前中断的执行而先执行更高优先级的中断 。
但是操作系统是纯软件行为 , 那么操作系统的任务优先级又是谁管理的?又是如何管理的呢?
答案就在 Systick 中断 。
既然要管理所有任务的优先级 , 即在合适时选择运行优先级最高的任务 , 那么操作系统本身必然需要有能剥夺所有任务执行的能力 , 而中断是凌驾于任务之上的 , 可以在任何时候剥夺任务的执行 , 从而获得 CPU 的使用权 , 所以选择中断作为操作系统的核心是合适的 。
但是中断那么多 , 选择什么中断比较合适呢?没有比 Systick 中断更合适的了 , 因为它就是为此而生的 。
Systick 说白了就是一个定时器 , 但是和普通定时器不同的是 , 功能比较单一 , 就是一个计数器而已 , 所以使用它管理任务是合适的 , 不会占用其他定时器 。
那么 Systick 又是如何管理任务的呢?
一般而言 , Systick 会设置成几毫秒中断一次 , 在每次中断时 , Systick 处理程序(即操作系统内核)都会从所有的任务中选择最高优先级的任务执行 , 也就是说 , 系统总是运行最高的任务 。
而这个特性也就导致你的高优先级任务不可以无限执行而不主动释放 CPU , 因为一旦高优先级任务无限执行了 , 那么低优先级任务将永远得不到执行机会 , 这就给人一种死机的假象 。
可能有道友会疑惑 , 为什么空闲任务不需要调用系统延时函数去主动释放 CPU 的使用权呢?
那是因为空闲任务本身优先级就是所有任务中最低的 , 如果它主动释放 CPU 了 , 而其他任务都处于挂起状态 , 那么操作系统又该让谁去执行呢?
- 喵爷玩美妆|做个有味道的人,那也得看是啥味儿
- 咖啡可乐2021年在美国上架|咖啡可乐2021年在美国上架 这会是一种什么味道?
- 食疗食补|伏天煮粥加这两样,味道清甜有营养,清热解暑滋润补水,老少皆宜
- 橙汁的味道|距灰熊仅差2场,起死回生?,西部争8又乱了!马刺两连胜飙升第9
- 橙汁的味道|最强青年军挑战辽篮,央视连播2场重磅对决!双外援北控或爆大冷
- 光明网|对门在楼道里放3个鞋柜,塞上百双鞋!邻居:味道太上头
- 食疗食补|李子柒教你怎么开胃,这碗夏天的味道千万不能错过!
- 烹饪|豆角鸡蛋饼,做法简单味道嫩脆,给肉都不换
- 烹饪|广东干炒河粉这样做,实在太香了,在家也能做出饭店的味道
- 中年|崩坏3:4.2测试服速报!当蛋黄变成了皮蛋,是否还是熟悉的味道吗?