嵌入式实时操作系统笔记1:RTOS入门_理解简单的OS系统

今日开始学习嵌入式实时操作系统RTOS:UCOS-III实时操作系统

本次目标是入门RTOS,理解多任务系统......

本文只是个人学习笔记,基本都是对网上资料的整合......

目录

STM32裸机与RTOS区别:

 裸机中断示例:

 RTOS对优先级的处理:

 裸机总结:

RTOS (Real Time OS)总结:

 多任务系统的理解:

任务的特性:

抢占式调度:

系统时间管理 :

任务的“独立”:

网上查阅资料学习:


STM32裸机与RTOS区别:

以下为AI生成内容:

从并发性和模块化角度来看,RTOS相较于裸机开发具有更好的表现。RTOS支持多任务并发执行,提高了程序的并发工作效率,并且其设计遵循高内聚、低耦合的原则,使程序结构更加清晰。而在裸机开发中,程序通常是在一个无限循环中运行的,没有多任务、线程的概念,这在处理复杂任务时可能会受到限制。

其次,从生态和可重用性方面考虑,RTOS也更具优势。RTOS提供了丰富的软件组件和库,这些组件和库可以帮助开发者更快地构建复杂的应用程序。同时,RTOS还支持软件组件的重用,避免了重复造轮子的问题。而在裸机开发中,由于没有操作系统的支持,开发者需要自行处理所有底层细节,这可能会导致开发周期变长且难以维护。

此外,实时性方面也是两者的重要区别。RTOS被设计用于需要严格时间控制的实时应用,如工业控制、实时数据采集等。RTOS提供了低延迟、高可靠性和可预测性的特性,能够满足这些应用对实时性的高要求。而在裸机开发中,由于没有操作系统的调度和管理,实时性可能无法得到保证,特别是在处理复杂任务时。

最后,从硬件控制和资源管理角度来看,裸机开发需要直接控制和管理硬件资源,包括处理器、内存、外设等。这通常涉及与硬件的寄存器交互,需要开发者具备较高的硬件知识。而在RTOS中,操作系统提供了对硬件的抽象层和服务,开发者可以通过操作系统提供的API来访问和控制硬件资源,降低了开发的复杂性。

 裸机中断示例:

这样的中断刷新标志,然后再主函数查询FLAG==1的方式,会出现一个问题:

就是必须先执行完前俩个打游戏(); 回复消息();函数才会轮到FLAG==1的查询,如果那俩个函数占用时间过长,则失去了 去医院();的该有的中断即时性

配图来源正点原子

 RTOS对优先级的处理:

RTOS会给每个任务分配优先级,函数 去医院();  优先级明显是最高,但RTOS有更精妙的CPU利用安排:假设去医院();中有个过程需要等待挂号,等待挂号时 CPU是空闲的,那这段空闲不会被浪费,而是能继续分配给 打游戏();  回复消息();

配图来源正点原子

 裸机总结:

裸机又称为前后台系统,前台是中断服务函数,后台是指的大循环,即应用程序

配图来源正点原子

1、实时性差(应用程序轮流执行)

2、delay();函数 效率低 (延时空等待、CPU不执行别的任务代码)

3、结构臃肿 小型项目没问题,大项目很差

RTOS (Real Time OS)总结:

实时操作系统,强调了实时性

配图来源正点原子

1、分而治之:实际功能划分多任务

2、延时函数:任务调度

3、抢占式:高优先级任务抢占低优先级任务

4、任务堆栈:每个任务都有自己的堆栈空间

注意:

1、高优先级任务一直在执行,那低优先级任务将一直不会被执行

2、中断可以打断任意任务

3、任务可以有同等优先级

 多任务系统的理解:

 这部分是查阅文章学习抄录的:

就像我们用电脑时可以同时听歌,上网,编辑文档等。
在多任务系统中,可以同时执行多个并行任务,各个任务之间互相独立。通过操作系统执行任务调度而实现宏观上的“并发运行”。从宏观上不同的任务并发运行,好像每个任务都有自己的 CPU 一样。 其实在单一 CPU 的情况下,是不存在真正的多任务机制的,存在的只有不同的任务轮流使用 CPU,所以本质上还是单任务的。但由于 CPU 执行速度非常快,加上任务切换 十分频繁并且切换的很快,所以我们感觉好像有很多任务同时在运行一样。这就是所谓的多任务机制。
多任务的最大好处是充分利用硬件资源,如在单任务时(大循环结构,如大部分 51
程序)遇到 delay 函数时,CPU 在空转;而在多任务系统,遇到 delay 或需等待资源时系
统会自动运行下一个任务,等条件满足再回来运行先前的任务,这样就充分利用了 CPU,
提高了效率。

任务的特性:

抢占式调度:

调度的概念,通俗的说就是系统在多个任务中选择合适的任务执行。系统如何知道
何时该执行哪个任务?可以为每个任务安排一个唯一的优先级别,当同时有多个任务就
绪时,优先运行优先级较高的任务。
同时,任务的优先级也作为任务的唯一标识号。代码中都是对标识号来完成对任务
的操作的。如 OSDelPrioRdy(prio),OSSetPrioRdy(prio)等。
不同的优先级对应就绪表中的每一位。低位对应高优先级。优先级 0 的优先权最高,
优先级 31 的优先权最低。
“抢占式调度”是指:一旦就绪状态中出现优先权更高的任务,便立即剥夺当前任务的运行权,把 CPU 分配给更高优先级的任务。这样 CPU 总是执行处于就绪条件下优先级最高的任务。

系统时间管理 :

与人一样,多任务系统也需要一个“心跳”来维持其正常运行,这个心跳叫做时钟节拍,通常由定时器产生一个固定周期的中断来充当,频率一般为 50-100Hz。
OSTimeDly 函数就是以时钟节拍为基准来延时的。这个函数完成功能很简单,就是先挂起当起当前任务,设定其延时节拍数,然后进行任务切换,在指定的时钟节拍数到来之后,将当前任务恢复为就绪状态。任务必须通过 OSTimeDly 或 OSTaskSuspend 让出 CPU的使用权,使更低优先级任务有机会运行。
在 T0 的中断服务函数中,依次对各个延时任务的延时节拍数减 1。若发现某个任务的延时节拍数变为 0,则把它从挂起态置为就绪态。

任务的“独立”:

一个任务有自己的 CPU,堆栈,程序代码,数据存储区,那这个任务就是一个独立的任务。
程序代码:
每个任务的程序代码与函数一样,与 51 的裸奔程序一样,每个任 务都是一个大循环。

数据存储区:
由于全局变量是系统共用的,各个任务共享,不是任务私有,所以这里的数据存储区是指任务的私有变量,局部变量可以使其变成私有。因为编译器是把局部变量保存在栈里的,所以好办,只要任务有个私有的栈就行
私有栈的作用是存放局部变量,函数的参数,它是一个线性的空间,所以可以申请一个静态数组,把栈顶指针 SP 指向栈的数组的首元素(递增栈)或最后一个元素(递减栈)。即可打造一个人工的栈出来。
每个任务还要有记录自己栈顶指针的变量,保存在任务控制块( TCB )中。
任务控制块:
系统中的每个任务具有一个任务控制块,任务控制块记录任务执 行的环境,这里的任务控制块比较简单,只包含了任务的堆栈指针和任务延时节拍数。
任务私有CPU:
只有一个 CPU ,各个任务共享,轮流使用。如何才能实现?
先来看看中断的过程:当中断来临时, CPU 把当前程序的运 行地址,寄存器等现场数据保存起来(一般保存在栈里),然后跳到中断服务程序执行。待 执行完毕,再把先前保存的数据装回 CPU 又回到原来的程序执行。这样就实现了两个不同 程序的交叉运行。
借鉴这种思想就能实现多任务了:模仿中断的过程就可以实现任务切换运行。
任务切换:
任务切换时,把当前任务的现场数据保存在自己的任务栈里面,再把待运行的任务 的数据从自己的任务栈装载到 CPU 中,改变 CPU PC SP ,寄存器等。可以说,任务的 切换是任务运行环境的切换。而任务的运行环境保存在任务栈中,也就是说,任务切换的 关键是把任务的私有堆栈指针赋予处理器的堆栈指针 SP 两个任务的切换过程如下

网上查阅资料学习:

最后感谢以下互联网的大佬们的文章视频供我们学习交流:

【正点原子】手把手教你学UCOS-III实时操作系统_哔哩哔哩_bilibili

嵌入式 RTOS多任务操作系统简介-CSDN博客

基于STM32的简易RTOS_stm32 osdelpriordy-CSDN博客

FreeRTOS学习笔记(1、FreeRTOS初识、任务的创建以及任务状态理论、调度算法等)_韦东山freertos快速入门课程学习笔记-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/332289.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

9.Docker网络

文章目录 1、Docker网络简介2、常用基本命令3、网络模式对比举例3.1、bridge模式3.2、host模式3.3、none模式3.4、container模式3.5、自定义网络 1、Docker网络简介 作用: 容器间的互联和通信以及端口映射容器IP变动时候可以通过服务名直接进行网络通信而不受到影…

如何用ai打一场酣畅淋漓的数学建模比赛? 给考研加加分!

文章目录 数学建模比赛1. 数学建模是什么?2. 数学建模分工合作2.1 第一:组队和分工合作2.2 第二:充分的准备2.3 第三:比赛中写论文过程 3. 数学建模基本过程4. 2023全年数学建模竞赛时间轴5. 数学建模-资料大全6. 数学建模实战 数…

H3CNE-7-TCP和UDP协议

TCP和UDP协议 TCP:可靠传输,面向连接 -------- 速度慢,准确性高 UDP:不可靠传输,非面向连接 -------- 速度快,但准确性差 面向连接:如果某应用层协议的四层使用TCP端口,那么正式的…

2024GDCPC广东省赛记录

比赛流程体验,依托,开赛几分钟了,选手还卡在门外无法入场,也没给延时,说好的桌上会发三支笔,于是我们就没准备,要了三次笔,终于在一小时后拿到了😅 比赛题目体验&#xf…

【FPGA】Verilog:奇校验位生成器的实现(Odd Parity bit generator)

解释奇数奇偶校验位生成器和检查器的仿真结果及过程。 真值表和卡洛图: Odd Parity Bit Generator A B C

屎山代码SSM转换Springboot

SSM项目转Springboot项目 最近很多人可能是在网上买的那种屎山代码,数据库都是拼音的那种 比如项目如下所示: 这种屎山代码我改过太多了,很多人可能无从下手,因为代码结构太混乱了,但是我改过太多这种代码&#xff0…

ML307R OpenCPU 数据保存文件系统fs使用

一、函数介绍 二、实现数据保存 三、代码下载地址 一、函数介绍 以下是cm_fs.h里面的函数介绍 /*** brief 文件指针定位** param [in] fd 文件描述符* param [in] offset 指针偏移量* param [in] base 偏移起始点,CM_FS_SEEK_SET:文件开头 CM_FS…

基于springboot+vue的4S店车辆管理系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

别人不愿意教,那我来教你Simulink建模(二)【语法知识】【原创分享】

文章目录 前言节点和状态的区别?local 和非 local 的区别?事件的作用?Bus 总线?Memory 模块?caller用法?自己瞎练习的(我也不知道为啥会多出来.h文件)自己瞎练习的(这个没有多出来.h文件)autosar实例学习前言 继续更新去年的博文系列,请君切记,师父领进门修行在个…

Django 里的静态资源调用

静态资源:图片,CSS, JavaScript 一共有两种方法 第一种方法 在项目的文件夹里创建名为 static 文件夹 在该文件夹里,添加静态资源 在 settings.py 里添加路径 import os# Static files (CSS, JavaScript, Images) # https://docs.djan…

多商户消费券系统源码(ThinkPHP+FastAdmin+微信公众号)

打造智能促销新体验 一、引言:消费券系统的时代意义 在当今这个数字化高速发展的时代,电子商务和移动支付已经成为人们日常生活的重要组成部分。随着市场竞争的加剧,多商户消费券系统作为一种创新的促销手段,正逐渐受到商家和消…

C++学习/复习4--与类相关的概念/默认成员函数/运算符重载/Date类实现案例

一、类和对象 1.本章概要 2.C中的结构体(struct与class) 升级为类 (1)类及成员函数的两种定义方式 声明与定义分离 (2)权限 注意1:struct/class在权限上的区别 (3)封装 (4&#x…

功率电感设计方法2:实例

文章目录 1:美磁的选项手册截图2:设计步骤2.1:设计需求2.2:选择磁芯材料2.3:选择磁芯2.4 查询 A L A_{L} AL​自感系数2.5 初算匝数2.6重新校准验算感量 3:后续 绕线因子4:日常壁纸分享 参考手册链接 1&…

iOS App上架全流程及审核避坑指南

App Store作为苹果官方的应用商店,审核严格周期长一直让用户头疼不已,很多app都“死”在了审核这一关,那我们就要放弃iOS用户了吗?当然不是!本期我们从iOS app上架流程开始梳理,详细了解下iOS app上架的那些…

移动云以深度融合之服务,令“大”智慧贯穿云端

移动云助力大模型,开拓创新领未来。 云计算——AI模型的推动器。 当前人工智能技术发展的现状和趋势,以及中国在人工智能领域的发展策略和成就。确实,以 ChatGPT 为代表的大型语言模型在自然语言处理、文本生成、对话系统等领域取得了显著的…

python数据分析-CO2排放分析

导入所需要的package import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import datetime %matplotlib inline plt.rcParams[font.sans-serif] [KaiTi] #中文 plt.rcParams[axes.unicode_minus] False #负号 数据清洗…

PLC_博图系列☞R_TRIG:检测信号上升沿

PLC_博图系列☞R_TRIG:检测信号上升沿 文章目录 PLC_博图系列☞R_TRIG:检测信号上升沿背景介绍R_TRIG: 检测信号上升沿说明参数示例 关键字: PLC、 西门子、 博图、 Siemens 、 R_TRIG 背景介绍 这是一篇关于PLC编程的文章&a…

云计算-关系型数据库(Relational Database)

关系数据库服务(RDS)(Relational Database Service (RDS)) Amazon RDS 可用于在云中设置和运行关系数据库。它支持多种数据库实例类型以及多个数据库引擎,如 Amazon Aurora、PostgreSQL、MySQL、MariaDB、Oracle 数据库…

gfast:基于全新Go Frame 2.3+Vue3+Element Plus构建的全栈前后端分离管理系统

gfast:基于全新Go Frame 2.3Vue3Element Plus构建的全栈前后端分离管理系统 随着信息技术的飞速发展和数字化转型的深入,后台管理系统在企业信息化建设中扮演着越来越重要的角色。为了满足市场对于高效、灵活、安全后台管理系统的需求,gfast应…

零基础学Java第二十三天之网络编程Ⅱ

1. InetAddress类 用来表示主机的信息 练习: C:\Windows\system32\drivers\etc\ hosts 一个主机可以放多个个人网站 www.baidu.com/14.215.177.37 www.baidu.com/14.215.177.38 www.taobao.com/183.61.241.252 www.taobao.com/121.14.89.253 2. Socket 3.…