RTOS学习笔记–RTOS介绍

本文基于正点原子RTOS开发指南,笔记自用,获取详细信息请关注正点原子官方账号

RTOS特点:RTOS全称为:Real Time OS,就是实时操作系统,强调的是:实时性,其将任务划分为多个任务进行,对每个任务设置优先级,高优先级的任务可以打断低优先级的任务,每个任务有自己独立的堆栈,其结构如下

但是在实际上来说,RTOS中的任务是分时间而执行的,每一个任务都独立执行一会儿,然后跳转到下一个任务

任务调度的方式

调度器:调度器就是使用相关的算法来决定当前需要执行哪种调度算法,RTOS支持三种形式

调度算法 简介
抢占式调度 主要是针对优先级不同的任务,每个任务都有一个优先级,优先级高的任务可以抢占优先级低的任务。,优先级是单一的,不会重复
时间片调度 主要针对优先级相同的任务,当多个任务的优先级相同时, 任务调度器会在每一次系统时钟节拍到的时候切换任务。优先级可能会重复
协程式调度 当前执行任务将会一直运行,同时高优先级的任务不会抢占低优先级任务,不会再更新

抢占式调度

  1. 创建三个任务,分别为Task1、Task2、Task3 其优先级分别为1,、2、3
  2. 在RTOS中 中断优先级数字越大 代表其越优先
  • 在运行过程中Task2 会抢夺Task1 Task3会抢夺Task2,被抢夺的任务就阻塞住了
  • 总结
    1. 高优先级任务优先执行
    2. 高优先级任务只要不停止,低优先级任务就会一直阻塞
    3. 被抢占的任务将会进入就绪态,如T2 抢占了T1 T2进入了就绪态,可以执行了

时间片调度

同等优先级任务轮流享有相同的CPU时间(可以设置),也叫时间片,在RTOS中 一个时间片就等于SysTick中断周期

  1. 运行三个任务 T1、T2、T3
  2. T1、T2、T3的优先级均为1
  • T1运行一个时间片后 该T2运行
  • 如T2运行0.5T 个时间片,剩下的0.5T个时间片直接丢掉,跳转到下一个任务执行,在一个循环过后,到了T2依然是1T个时间片
  • 如T2运行时间超出了一个时间片,那么T2将会阻塞,直到下一个循环到他的时间片之后他才会继续执行
  • 总结
    1. 同等优先任务,轮流执行,时间片流转
    2. 一个时间片的大小,取决于滴答定时器的中断周期
    3. 没有用完的时间片不会再使用,下次任务T2时还是按一个时间片分配

任务状态

  • 运行态:正在执行的任务,在32中同一时间只有一个任务处于运行态
  • 就绪态:该任务已经能被执行,已经准备好了,但是还未执行,就叫就绪态,如果都准备好了,则执行优先级最高的就绪态
  • 阻塞态:如果一个任务因延时或者等待外部时间发生,则该任务就处于阻塞态
  • 挂起态:类似暂停,调用函数 vTaskSuspend() 进入挂起态,需要调用解挂函数vTaskResume()
    才可以进入就绪态

任务状态转换图

  1. 只有就绪态才可以直接变为运行态
  2. 其他状态的任务要想运行,必须进入就绪态

任务状态列表

这四种状态中,除了运行态,其他三种任务状态的任务都有其对应的任务状态列表

  • 就绪列表:pxReadyTasksLists[x],其中x代表任务优先级数值

  • 阻塞列表:pxDelayedTaskList
  • 挂起列表:xSuspendedTaskList

系统配置文件详解

FreeRTOSConfig.h配置文件中的中对RTOS功能进行裁剪

RTOS学习笔记--RTOS系统介绍相关推荐

  1. RTOS学习笔记--时间片调度

    RTOS学习笔记–时间片调度 本文基于正点原子RTOS开发指南,笔记自用,获取详细信息请关注正点原子官方账号 介绍:在RTOS中,除了按优先级调度之外,还可以按照时间片调度,也就是给每个任务分配一个时 ...

  2. RTOS学习笔记--FreeRTOS的列表和列表项

    RTOS学习笔记–FreeRTOS的列表和列表项 本文基于正点原子RTOS开发指南,笔记自用,获取详细信息请关注正点原子官方账号 列表和列表项的简介 列表是 FreeRTOS 中的一个数据结构,概念上 ...

  3. 学习笔记--RTOS信号量

    学习笔记–RTOS信号量 本文基于正点原子RTOS开发指南,笔记自用,获取详细信息请关注正点原子官方账号 简介:信号量是一种解决同步问题的机制,可以实现对共享资源的有序访问.和linux中的信号量差不 ...

  4. 单片机嵌入式实时操作系统RTOS---eOS学习入门级RTOS(原创)

    笔者刚入门学习STM32的时候就接触了uCOSII,它的多任务让我眼前一亮:原来程序还可以这么写!它让很多冲突的代码都能各自运行,在一个单片机上实现了多个单片机共同运行的效果.但是当开始真正去学习它时 ...

  5. freeRtos学习笔记 (9) 移植和CPU利用率统计

    freeRtos学习笔记 (9) 移植和CPU利用率统计 使用官方固件移植 首先准备一个能跑的裸机工程 注意,freertos需要使用systick定时器,而stm32HAL库默认使用systick作 ...

  6. C# 学习笔记(9)线程

    C# 学习笔记(9)线程 本文参考博客 C#多线程 https://www.cnblogs.com/dotnet261010/p/6159984.html C# 线程与进程 https://www.c ...

  7. freeRtos学习笔记 (5)事件组

    freeRtos学习笔记 freeRtos事件组 为什么要用事件组? 多任务环境下, 任务.中断之间往往需要同步操作,一个事件发生会告知等待中的任 务,即形成一个任务与任务.中断与任务间的同步.事件可 ...

  8. LIteOS学习笔记-7LiteOS启动流程与编译流程

    LIteOS学习笔记-7LiteOS启动流程与编译流程 LiteOS启动流程 1. 启动方式 2. 启动流程 硬件初始化 内核初始化 调试串口初始化 尝试进行网络连接 启动任务调度 LiteOS编译流 ...

  9. Apollo学习笔记

    Apollo学习笔记 Apollo课程 智能驾驶入门课程 无人驾驶概览 1.软件层分为三层: 实时操作系统(RTOS):确保在给定时间内完成特定任务,实时时确保系统稳定性.驾驶安全性的重要要求.通过在 ...

最新文章

  1. 人工智能伦理如何设定,从种群层面看人类的知识积累和进化
  2. 删除index.php,从URL中删除index.php - Codeigniter 2
  3. php程序网站整站301,织梦dede怎么实现整站301
  4. 各种页面刷新代码大全,asp/javascript刷新页面代码
  5. 几种常见的集成触发器(D、T、JK)
  6. WPR-007:WPF中窗体的透明设置
  7. XSS漏洞(跨站脚本)
  8. 磁盘碎片整理程序的原理是什么?
  9. python slice函数_python中slice函数如何实现?
  10. 为什么每天工作那么努力,却无法突破职场瓶颈?
  11. 《信号与系统学习笔记》—通信系统(一)
  12. [Groovy]Groovy with Ant Task
  13. 批量生成图片的数据增强常用的脚本
  14. 祝大家开工大吉,工作顺利。
  15. 一张关系图助你清晰认识各种O。PO、BO、DTO、VO关系图,够直观
  16. 函数指针的强制类型转换与void指针
  17. 卷积神经网络(CNN):乳腺癌识别
  18. 视频知识点(17)- flv.js 实现播放本地视频文件的技巧
  19. Vcastr 2.2 flv 网络播放器
  20. Unity基础 粒子系统

热门文章

  1. 国内外3D游戏开发流程和职位分类
  2. 太卷了,年薪40W的软件测试大D佬工作经验分享,原来我存在这么多问题......
  3. 通达信股票日线数据插入mysql数据库测试
  4. C++/C# Thread多线程总结
  5. DSP28035的CAN通讯程序
  6. 伯克利CS61A错题笔记1.0
  7. chrome_php logger 的实现原理
  8. 基于CSS3和jQuery的相片墙——ImageWall~~源码来咯
  9. Python 爬虫 之 爬取王者荣耀的英雄们所有大皮肤图片,并 json 形式保存英雄列表信息到本地
  10. 两分钟永久搞定Github加速问题!!!