嵌入式实时操作系统笔记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.mfbz.cn/a/645746.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

飞鸡:从小训练飞行的鸡能飞行吗?为什么野鸡能飞吗?是同一品种吗?今天自由思考

鸡的飞行能力在很大程度上受到其生理结构的限制。尽管鸡有翅膀,但与能够长时间飞行的鸟类相比,鸡的翅膀相对较小,且胸部肌肉较弱。再加上鸡的身体较重,这些因素共同限制了鸡的飞行能力。通常,鸡只能进行短暂的、低空的…

Redis简介与安装到python的调用

前言 本文只不对redis的具体用法做详细描述,做简单的介绍,安装,和python代码调用详细使用教程可查看一下网站 https://www.runoob.com/redis/redis-tutorial.html https://pypi.org/project/redis/ 官方原版: https://redis.io/ 中文官网:…

【698协议】帧校验算法

698协议,帧校验算法 帧格式 帧校验范围 校验算法 #include "fcs16.h" /* * u16 represents an unsigned 16-bit number. Adjust the typedef for * your hardware. * Drew D. Perkins at Carnegie Mellon University. * Code liberally borrowed from M…

GB报文中的Cseq值的注意点

一、 问题现象 【问题现象】NVR使用GB接三方平台发现倍速回放时, 【现场拓扑】现场拓扑如下 (1) NVR侧使用家用宽带的方式,通过国标跨公网接入三方平台。 图1.1:网络拓扑 二、 抓包分析 INVITE sip:420000004013200…

异步获取线程执行结果,JDK中的Future、Netty中的Future和Promise对比

JDK中的Future和Netty中的Future、Promise的关系 三者源头追溯 Netty中的Future与JDK中的Future同名,但是是两个不同的接口。Netty中的Future继承自JDK的Future,而Promise又对Netty中的Future进行了扩展。 JDK中的Future源自JUC并发包: Net…

【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串

【LeetCode刷题】Day 7 题目1:209.长度最小的子数组思路分析:思路1:暴力枚举 O(N^2^)思路2:滑动窗口 O(N) 题目2:3. 无重复字符的最长子串题目分析:思想1:暴力枚举哈希表O(N^2^)思想2&#xff1…

鹏特资本进入中国市场具有以下一些优势

1. 带来资金:补充国内资金缺口,为企业发展和项目建设提供重要的资金支持。 2. 先进技术和管理经验:有助于推动技术创新和管理水平提升,促进产业升级和优化。 3. 促进竞争:激发国内市场活力,促使本土企业不…

Spring Cloud 项目中使用 Swagger

Spring Cloud 项目中使用 Swagger 关于方案的选择 在 Spring Cloud 项目中使用 Swagger 有以下 4 种方式: 方式一 :在网关处引入 Swagger ,去聚合各个微服务的 Swagger。未来是访问网关的 Swagger 原生界面。 方式二 :在网关处引…

软件设计师笔记2

文章目录 软考知识点总结1. 计算机组成原理网络与信息安全数据结构与算法AOE网 编译原理操作系统软件设计软件测试数据库计算机软件产权其它 软考知识点总结 1. 计算机组成原理 cpu控制器,专门产生指令操作,送到计算机各个部位执行处理 DMA&#xff08…

ISCC2024个人挑战赛WP-WEB

(非官方解,以下内容均互联网收集的信息和个人思路,仅供学习参考) 还没想好名字的塔防游戏 GET /world.js HTTP/1.1 Host: 101.200.138.180:17345 Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/avif,i…

LeetCode题练习与总结:二叉树的层序遍历Ⅱ--107

一、题目描述 给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[…

嵌入式进阶——LED呼吸灯(PWM)

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 PWM基础概念STC8H芯片PWMA应用PWM配置详解占空比 PWM基础概念 PWM全称是脉宽调制(Pulse Width Modulation&#xff09…

C++笔试强训day33

目录 1.跳台阶扩展问题 2.包含不超过两种字符的最长子串 3.字符串的排列 1.跳台阶扩展问题 链接https://www.nowcoder.com/practice/953b74ca5c4d44bb91f39ac4ddea0fee?tpId230&tqId39750&ru/exam/oj 我是用动态规划解决的&#xff1a; #include <iostream>…

一文读懂:http免费升级https

背景&#xff1a; 随着现在全民网络安全意识的日益提升&#xff0c;各个网站需要实现的https数量也随之提升&#xff0c;那么如何将原本网站的http访问方式升级为https呢&#xff1f; 该内容为如何免费将网站的http访问升级为https访问 论https的加密逻辑&#xff1a; 步骤 …

【数据结构(邓俊辉)学习笔记】图01——图的表示与实现

文章目录 1. 概述1.1 邻接 关联1.2 无向 有向1.3 路径 环路 2. 邻接矩阵2.1 接口2.2 邻接矩阵 关联矩阵2.3 实例2.4 顶点和边2.5 邻接矩阵2.6 顶点静态操作2.7 边操作2.7 顶点动态操作2.8 综合评价 1. 概述 1.1 邻接 关联 相对于此前的线性以及半线性结构&#xff0c;图…

RAG概述(二):Advanced RAG 高级RAG

目录 概述 Advanced RAG Pre-Retrieval预检索 优化索引 增强数据粒度 粗粒度 细粒度 展开说说 优化索引 Chunk策略 Small2Big方法 元数据 引入假设性问题 对齐优化 混合检索 查询优化 查询扩展 查询转换 Post-Retrieval后检索 参考 概述 Native RAG&#…

Python并发编程学习记录

1、初识并发编程 1.1、串行&#xff0c;并行&#xff0c;并发 串行(serial)&#xff1a;一个cpu上按顺序完成多个任务&#xff1b; 并行(parallelism)&#xff1a;任务数小于或等于cup核数&#xff0c;多个任务是同时执行的&#xff1b; 并发(concurrency)&#xff1a;一个…

Linux之Nginx

1、Nginx 1.1、什么是Nginx Nginx最初由Igor Sysoev开发&#xff0c;最早在2004年公开发布。它被设计为一个轻量级、高性能的服务器&#xff0c;能够处理大量并发连接而不消耗过多的系统资源。Nginx的架构采用了事件驱动的方式&#xff0c;能够高效地处理请求。它的模块化设计使…

Redis 的持久化(真的好细)

前言 Redis 是一个内存数据库&#xff0c;把数据存储在内存中&#xff0c;而内存中的数据是不持久的&#xff0c;要想数据持久就得将数据存储到硬盘中&#xff0c;而 Redis 相比于 Mysql 这样的关系型数据库最大的优势就在于将数据存储在内存中从而效率更高&#xff0c;速度更快…

大数据智慧消防解决方案(24页PPT)

方案介绍&#xff1a; 大数据智慧消防解决方案是提升消防安全管理水平、保障人民群众生命财产安全的重要手段。通过集成物联网、云计算、大数据、人工智能等先进技术&#xff0c;构建集监测、预警、指挥、救援于一体的智慧消防系统&#xff0c;将为消防安全事业注入新的活力。…