IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> RTOS介绍------一、任务的状态,优先级,调度 -> 正文阅读

[嵌入式]RTOS介绍------一、任务的状态,优先级,调度

Task

RTOS允许使用者设置tasks的优先级,即高优先级的任务可以抢占低优先级的任务。调度器是os的一个模块,负责管理在每个tick中运行哪个task。

Concepts

一个多tasks的程序类似如下图:
在这里插入图片描述

每个task似乎都在自己的while循环中并发执行,旁边还有中断服务程序设计(ISR)可以抢占任何task来执行一些代码。中断一般用来处理硬件定时器溢出,改变引脚状态或者总线通信。

在单核系统中,CPU必须将tasks划分进时间切片,以便它们看起来是并行执行的。调度器负责明确在每个时间切片中运行哪个task。

What

在FreeRTOS中,默认的时间切片是1ms,时间切片被称为“tick”。硬件timer会被配置成每1ms创建一个中断。这个timer的中断运行调度程序,调度器选择接下来运行的task。

在每个tick中断时,都是优先级最高的的task被选出来执行。如果最高优先级的task有多个,那么它们以循环的方式执行。如果某个比当前运行的task的优先级更高的task变得可用(Ready状态),那么它会立即执行,不用等到下一个tick。

硬件中断的优先级总是被任何软件的task优先级都要高。硬件中断可以打断任何task。所以,ISR的代码应该尽可能的小,以减少对正在运行的tasks的打断。

Task States

FreeRTOS的tasks有四种状态。
在这里插入图片描述

task一旦被创建,它就会进入Ready状态。即告知调度器它准备好Run了。每次tick,调度器会选择一个ready状态的task去运行(在多核系统中,调度器可以选择多个task)。

在运行的时候,task处于Running状态,可以被调度器返回到Ready状态。

有些函数,例如vTaskDelay(),可以让task进入Blocked状态。进入阻塞状态后,task会等待一些其他event出现,例如vTaskDelay()函数的计时器到期。Task也可能在等待一些resource,例如一个会被另一个task释放的信号量。处于阻塞状态的tasks允许其他tasks替代运行。

最后,显示调用vTaskSuspend()可以将一个task进入Suspended状态(更像是让该task睡眠)。任何task可能会让任何task(包括它自己)进入挂起状态。一个task只能被另一个task显示调用vTaskResume()才能返回Ready状态。

Task Priorities

优先级可以是任何值,但是为了RAM的使用效率,还是尽量让数字最小。

数字越小,task的优先级越低。空闲任务的优先级是0。

FreeRTOS scheduling

默认的RTOS调度策略(单核)

FreeRTOS使用固定优先级的抢占式调度策略,具有相同优先级的tasks循环时间片。

避免task饥饿:
总是运行最高优先级任务的后果是,高优先级任务从不会进入Blocked或者Suspended状态,这会饿死所有低优先级的任务的执行时间。这就是为什么最好创建event驱动的tasks。例如,如果一个高优先级的task正在等一个event,它不应该在一个循环里等待event,因为在轮询里,task一直在running,不会进入Blocked或Suspended状态。所以,task应该在Blocked状态等待event。收到event会自动将高优先级的task状态从Blocked状态移除。低优先级任务会在高优先级任务在阻塞状态运行。

The FreeRTOS AMP scheduling policy 非对称多核

Asymmetric multiprocessing (AMP) with FreeRTOS is where each core of a multicore device runs its own independent instance of FreeRTOS. The cores do not all need to have the same architecture, but do need to share some memory if the FreeRTOS instances need to communicate with each other.

Each core runs its own instance of FreeRTOS so the scheduling algorithm on any given core is exactly as described above for a single-core system. You can use a stream or message buffer as the inter-core communication primitive so that tasks on one core may enter the Blocked state to wait for data or events sent from a different core.

The FreeRTOS SMP scheduling policy 对称多核

Symmetric multiprocessing (SMP) with FreeRTOS is where one instance of FreeRTOS schedules RTOS tasks across multiple processor cores. As there is only one instance of FreeRTOS running, only one port of FreeRTOS can be used at a time, so each core must have the same processor architecture and share the same memory space.

The FreeRTOS SMP scheduling policy uses the same algorithm as the single-core scheduling policy but, unlike the single-core and AMP scenarios, SMP results in more than one task being in the Running state at any given time (there is one Running state task per core). That means the assumption no longer holds that a lower priority task will only ever run when there are no higher priority tasks that are able to run. To understand why, consider how the SMP scheduler will select tasks to run on a dual-core microcontroller when, initially, there is one high priority task and two medium priority tasks which are all in the Ready state. The scheduler needs to select two tasks, one for each core. First, the high priority task is the highest priority task that is able to run, so it gets selected for the first core. That leaves two medium priority tasks as the highest priority tasks that are able to run, so one gets selected for the second core. The result is that both a high and medium priority task run simultaneously.

Recommended Reading

Task Priorities:https://www.freertos.org/RTOS-task-priority.html

introduction-to-rtos-solution-to-part-3-task-scheduling:https://www.digikey.com/en/maker/projects/introduction-to-rtos-solution-to-part-3-task-scheduling/8fbb9e0b0eed4279a2dd698f02ce125f

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-01-17 11:38:55  更:2022-01-17 11:39:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:35:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码