| |
|
开发:
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介绍------一、任务的状态,优先级,调度 |
TaskRTOS允许使用者设置tasks的优先级,即高优先级的任务可以抢占低优先级的任务。调度器是os的一个模块,负责管理在每个tick中运行哪个task。 Concepts一个多tasks的程序类似如下图: 每个task似乎都在自己的while循环中并发执行,旁边还有中断服务程序设计(ISR)可以抢占任何task来执行一些代码。中断一般用来处理硬件定时器溢出,改变引脚状态或者总线通信。 在单核系统中,CPU必须将tasks划分进时间切片,以便它们看起来是并行执行的。调度器负责明确在每个时间切片中运行哪个task。 在FreeRTOS中,默认的时间切片是1ms,时间切片被称为“tick”。硬件timer会被配置成每1ms创建一个中断。这个timer的中断运行调度程序,调度器选择接下来运行的task。 在每个tick中断时,都是优先级最高的的task被选出来执行。如果最高优先级的task有多个,那么它们以循环的方式执行。如果某个比当前运行的task的优先级更高的task变得可用(Ready状态),那么它会立即执行,不用等到下一个tick。 硬件中断的优先级总是被任何软件的task优先级都要高。硬件中断可以打断任何task。所以,ISR的代码应该尽可能的小,以减少对正在运行的tasks的打断。 Task StatesFreeRTOS的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饥饿: 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 ReadingTask 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例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |