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

news2024/11/24 15:33:31

今日开始学习嵌入式实时操作系统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.coloradmin.cn/o/1690843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言 数组——数组的定义和初始化

目录 为什么使用数组(Array)? 一维数组的定义 一维数组的初始化 一维数组元素的访问 一维数组元素的赋值 数组的逻辑存储结构 数组的物理存储结构 二维数组的定义和初始化 为什么使用数组(Array)? 一维数组的定义 一维 数组的定义 int a[10]; 定义一个有 10 个 int 型元素的…

C++ 网络编程

一、Reactor 网络编程模型 reactor 是一个事件处理模型。网络处理:因为用户层并不知道 IO 什么时候就绪,所以将对 IO 的处理转化为对事件的处理。网络模型构成: 非阻塞 IO:操作 IO,如果 IO 未就绪,IO 函数会立刻返回。IO 多路复用:检测多路 IO 是否就绪。工作流程: 注册…

一文了解 FileBeat:诞生背景、发展历程与定义

🐇明明跟你说过:个人主页 🏅个人专栏:《洞察之眼:ELK监控与可视化》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、什么是ELK 2、FileBeat在ELK中的角色 3、File…

C++的数据结构(十八):并查集

并查集(Union-Find)是一种用于处理一些不交集(Disjoint Sets)问题的数据结构。它主要支持两种操作:合并集合(Union)和查找元素所属集合(Find)。在解决诸如连通性问题、网…

在XP/Vista系统下使用Node.js的babel-cli命令行工具转码ES6语法的js文件,让IE8浏览器也能运行

在XP系统下IE浏览器最高只能装到IE8,在Vista系统下最高只能装到IE9。 2015年以后,JavaScript新增了很多语法,比如class、extends,还有let和const等等,这些语法都是XP下的终端浏览器IE8所不支持的。要想让使用了这些新式…

[集群聊天服务器]----(五)User类、UserModel类

接着上文[集群聊天服务器]----(四)MySQL数据库模块,接下来我们对User类、UserModel类进行剖析,User表和UserModel类是项目最基本也是最重要的部分,通过它我们对用户的id,用户名,密码,状态相关信息进行存储&…

VSCode运行CMake教程

参考视频: https://www.youtube.com/watch?vm9HBM1m_EMU 首先下载&安装opencv包以及cmake包 接着配置环境变量 点击环境变量 ---下面系统变量的path 找对应路径 添加后三个: 确定即可 接着创建空目录 右击vscode打开 扩展中安装 c tools、cmake、cmake too…

华为芯片与系统详细梳理--Kirin麒麟 Ascend昇腾 Kunpeng鲲鹏 HarmonyOS鸿蒙 Euler欧拉

华为芯片与系统详细梳理--Kirin麒麟 & Ascend昇腾 & Kunpeng鲲鹏 & HarmonyOS鸿蒙 & Euler欧拉 1 概述2 芯片2.1 整体描述麒麟芯片(To C)【面向智能终端】昇腾芯片【面向AI计算】鲲鹏芯片【面向通用计算】 2.2 细分系列麒麟芯片&#xf…

基于UDP的tftp的文件传输

#define SER_PORT 69 #define SER_IP "192.168.125.71" #define CLT_PORT 6666 #define CLT_IP "192.168.125.158" int main(int argc, const char *argv[]) {//创建套接字文件描述符int cfd socket(AF_INET,SOCK_DGRAM,0);if(cfd -1){perror("sock…

Hadoop3:HDFS的Fsimage和Edits文件介绍

一、概念 Fsimage文件:HDFS文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统的所有目 录和文件inode的序列化信息。 Edits文件:存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先 会被记录到Ed…

掌握RESTful API:从入门到精通,全面解析Web开发的基石!

在现代Web开发中,API(应用程序编程接口)已经成为不同系统之间通信的重要手段。其中,RESTful API是一种基于HTTP协议的设计风格,它简洁、易用且高效。作为一个资深的技术人员,本文将全面详细地介绍RESTful A…

VM逆向,一篇就够了(下)

实战三 d3sky 这一题需要了解一些TLS相关知识 TLS回调函数 TLS(Thread Local Storage,线程局部存储)是各线程的独立的存储空间,TLS回调函数是指,每当创建或终止进程的线程时会自动调用执行的函数,且调用…

蓝桥杯Web开发【国赛】2022年真题

1.水果拼盘 目前 CSS3 中新增的 Flex 弹性布局已经成为前端页面布局的首选方案,本题可以使用 Flex 属性快速完成布局。 1.1 题目问题 建议使用 flex 相关属性完成 css/style.css 中的 TODO 部分。 禁止修改圆盘的位置和图片的大小。相同颜色的水果放在相同颜色的…

[Unity报错] The type or namespace name ‘Newtonsoft‘ could not be found

简介 Unity在跑别人的代码时,控制台报了以下错误 The type or namespace name Newtonsoft could not be found 鉴于这块资料较少,写一下教程帮助后来者。 报错的原因主要是因为缺少Newtonsoft.json这个包,导致Unity在using该库时出现错误。…

振动盘配上智能相机后实现全自动化

#智能相机 #振动盘 振动盘配上智能相机后的全自动化技术正在各个行业蓬勃发展。振动盘是一种利用震动作用将物料快速分离和输送的装置,而智能相机的高精度图像识别技术能够准确探测和捕捉物料。将两者结合起来,不仅能提高生产效率,还能降低人…

AI爆文写作:标题需要什么?情绪炸裂,态度要激烈,行为要夸张!

现在这个传播环境下,在公域中,轻声细语,慢慢的说,无法吸引到注意,没有人搭理。 标题要需要情绪张扬,态度激烈,行为夸张,大声喧闹。 唐韧的用户群是互联网产品经理,阅读量…

开源实用!猫抓媒体嗅探浏览器插件

CatCatch:网络资源,一触即发 - 精选真开源,释放新价值。 概览 CatCatch是一个专为浏览器设计的资源嗅探扩展,旨在帮助用户轻松捕获和分析网页中的各种资源。无论是视频、音频还是其他类型的文件,猫爪都能提供直观的界…

了解K8s集群kubectl命令进行陈述式资源管理

前言 在 Kubernetes 集群中,通过陈述式和声明式资源管理是确保应用程序高效运行的关键。认识这两种管理方法,能够更好地掌握 Kubernetes 集群的运维和管理。 目录 一、K8s 资源管理操作分类 1. 陈述式 2. 声明式 3. K8s 集群管理常用命令概览 二…

五分钟”手撕“图书管理系统

前言: 图书馆管理系统需要结合JavaSE的绝大部分知识,是一个很好的训练项目。 为了让大家更加方便的查阅与学习,我把代码放开头,供大家查询。 还有对代码的分析,我将以类为单位分开讲解。 目录 全部代码 Main类 Us…

【NumPy】NumPy实战入门:线性代数(dot、linalg)与随机数(numpy.random)详解

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…