RTOS学习笔记--RTOS系统介绍
RTOS学习笔记–RTOS介绍
本文基于正点原子RTOS开发指南,笔记自用,获取详细信息请关注正点原子官方账号
RTOS特点:RTOS全称为:Real Time OS,就是实时操作系统,强调的是:实时性,其将任务划分为多个任务进行,对每个任务设置优先级,高优先级的任务可以打断低优先级的任务,每个任务有自己独立的堆栈,其结构如下
但是在实际上来说,RTOS中的任务是分时间而执行的,每一个任务都独立执行一会儿,然后跳转到下一个任务
任务调度的方式
调度器:调度器就是使用相关的算法来决定当前需要执行哪种调度算法,RTOS支持三种形式
调度算法 | 简介 |
---|---|
抢占式调度 | 主要是针对优先级不同的任务,每个任务都有一个优先级,优先级高的任务可以抢占优先级低的任务。,优先级是单一的,不会重复 |
时间片调度 | 主要针对优先级相同的任务,当多个任务的优先级相同时, 任务调度器会在每一次系统时钟节拍到的时候切换任务。优先级可能会重复 |
协程式调度 | 当前执行任务将会一直运行,同时高优先级的任务不会抢占低优先级任务,不会再更新 |
抢占式调度
- 创建三个任务,分别为Task1、Task2、Task3 其优先级分别为1,、2、3
- 在RTOS中 中断优先级数字越大 代表其越优先
- 在运行过程中Task2 会抢夺Task1 Task3会抢夺Task2,被抢夺的任务就阻塞住了
- 总结
- 高优先级任务优先执行
- 高优先级任务只要不停止,低优先级任务就会一直阻塞
- 被抢占的任务将会进入就绪态,如T2 抢占了T1 T2进入了就绪态,可以执行了
时间片调度
同等优先级任务轮流享有相同的CPU时间(可以设置),也叫时间片,在RTOS中 一个时间片就等于SysTick中断周期
- 运行三个任务 T1、T2、T3
- T1、T2、T3的优先级均为1
- T1运行一个时间片后 该T2运行
- 如T2运行0.5T 个时间片,剩下的0.5T个时间片直接丢掉,跳转到下一个任务执行,在一个循环过后,到了T2依然是1T个时间片
- 如T2运行时间超出了一个时间片,那么T2将会阻塞,直到下一个循环到他的时间片之后他才会继续执行
- 总结
- 同等优先任务,轮流执行,时间片流转
- 一个时间片的大小,取决于滴答定时器的中断周期
- 没有用完的时间片不会再使用,下次任务T2时还是按一个时间片分配
任务状态
- 运行态:正在执行的任务,在32中同一时间只有一个任务处于运行态
- 就绪态:该任务已经能被执行,已经准备好了,但是还未执行,就叫就绪态,如果都准备好了,则执行优先级最高的就绪态
- 阻塞态:如果一个任务因延时或者等待外部时间发生,则该任务就处于阻塞态
- 挂起态:类似暂停,调用函数 vTaskSuspend() 进入挂起态,需要调用解挂函数vTaskResume()
才可以进入就绪态
任务状态转换图
- 只有就绪态才可以直接变为运行态
- 其他状态的任务要想运行,必须进入就绪态
任务状态列表
这四种状态中,除了运行态,其他三种任务状态的任务都有其对应的任务状态列表
- 就绪列表:pxReadyTasksLists[x],其中x代表任务优先级数值
- 阻塞列表:pxDelayedTaskList
- 挂起列表:xSuspendedTaskList
系统配置文件详解
FreeRTOSConfig.h配置文件中的中对RTOS功能进行裁剪
RTOS学习笔记--RTOS系统介绍相关推荐
- RTOS学习笔记--时间片调度
RTOS学习笔记–时间片调度 本文基于正点原子RTOS开发指南,笔记自用,获取详细信息请关注正点原子官方账号 介绍:在RTOS中,除了按优先级调度之外,还可以按照时间片调度,也就是给每个任务分配一个时 ...
- RTOS学习笔记--FreeRTOS的列表和列表项
RTOS学习笔记–FreeRTOS的列表和列表项 本文基于正点原子RTOS开发指南,笔记自用,获取详细信息请关注正点原子官方账号 列表和列表项的简介 列表是 FreeRTOS 中的一个数据结构,概念上 ...
- 学习笔记--RTOS信号量
学习笔记–RTOS信号量 本文基于正点原子RTOS开发指南,笔记自用,获取详细信息请关注正点原子官方账号 简介:信号量是一种解决同步问题的机制,可以实现对共享资源的有序访问.和linux中的信号量差不 ...
- 单片机嵌入式实时操作系统RTOS---eOS学习入门级RTOS(原创)
笔者刚入门学习STM32的时候就接触了uCOSII,它的多任务让我眼前一亮:原来程序还可以这么写!它让很多冲突的代码都能各自运行,在一个单片机上实现了多个单片机共同运行的效果.但是当开始真正去学习它时 ...
- freeRtos学习笔记 (9) 移植和CPU利用率统计
freeRtos学习笔记 (9) 移植和CPU利用率统计 使用官方固件移植 首先准备一个能跑的裸机工程 注意,freertos需要使用systick定时器,而stm32HAL库默认使用systick作 ...
- C# 学习笔记(9)线程
C# 学习笔记(9)线程 本文参考博客 C#多线程 https://www.cnblogs.com/dotnet261010/p/6159984.html C# 线程与进程 https://www.c ...
- freeRtos学习笔记 (5)事件组
freeRtos学习笔记 freeRtos事件组 为什么要用事件组? 多任务环境下, 任务.中断之间往往需要同步操作,一个事件发生会告知等待中的任 务,即形成一个任务与任务.中断与任务间的同步.事件可 ...
- LIteOS学习笔记-7LiteOS启动流程与编译流程
LIteOS学习笔记-7LiteOS启动流程与编译流程 LiteOS启动流程 1. 启动方式 2. 启动流程 硬件初始化 内核初始化 调试串口初始化 尝试进行网络连接 启动任务调度 LiteOS编译流 ...
- Apollo学习笔记
Apollo学习笔记 Apollo课程 智能驾驶入门课程 无人驾驶概览 1.软件层分为三层: 实时操作系统(RTOS):确保在给定时间内完成特定任务,实时时确保系统稳定性.驾驶安全性的重要要求.通过在 ...
最新文章
- 人工智能伦理如何设定,从种群层面看人类的知识积累和进化
- 删除index.php,从URL中删除index.php - Codeigniter 2
- php程序网站整站301,织梦dede怎么实现整站301
- 各种页面刷新代码大全,asp/javascript刷新页面代码
- 几种常见的集成触发器(D、T、JK)
- WPR-007:WPF中窗体的透明设置
- XSS漏洞(跨站脚本)
- 磁盘碎片整理程序的原理是什么?
- python slice函数_python中slice函数如何实现?
- 为什么每天工作那么努力,却无法突破职场瓶颈?
- 《信号与系统学习笔记》—通信系统(一)
- [Groovy]Groovy with Ant Task
- 批量生成图片的数据增强常用的脚本
- 祝大家开工大吉,工作顺利。
- 一张关系图助你清晰认识各种O。PO、BO、DTO、VO关系图,够直观
- 函数指针的强制类型转换与void指针
- 卷积神经网络(CNN):乳腺癌识别
- 视频知识点(17)- flv.js 实现播放本地视频文件的技巧
- Vcastr 2.2 flv 网络播放器
- Unity基础 粒子系统
热门文章
- 国内外3D游戏开发流程和职位分类
- 太卷了,年薪40W的软件测试大D佬工作经验分享,原来我存在这么多问题......
- 通达信股票日线数据插入mysql数据库测试
- C++/C# Thread多线程总结
- DSP28035的CAN通讯程序
- 伯克利CS61A错题笔记1.0
- chrome_php logger 的实现原理
- 基于CSS3和jQuery的相片墙——ImageWall~~源码来咯
- Python 爬虫 之 爬取王者荣耀的英雄们所有大皮肤图片,并 json 形式保存英雄列表信息到本地
- 两分钟永久搞定Github加速问题!!!