嵌入式实时操作系统笔记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.mzph.cn/web/14303.shtml

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

相关文章

汽车标定技术(二十一)--英飞凌TC3xx的OLDA怎么玩?(2)

目录 1.概述 2.Vector提出的OLDA概念 2.1 RAM Copy 2.2 Data Trace 3.小结 1.概述 上一篇汽车标定技术(二十一)--英飞凌TC3xx的OLDA怎么玩?(1)-CSDN博客,我们讲了TC3xx

Spring MVC/Web

1.Spring MVC 的介绍 Spring Web MVC是基于Servlet API构建的原始Web框架,也是Spring框架的一部分。它提供了灵活可扩展的MVC架构,方便开发者构建高性能的Web应用程序,并与 Spring 生态系统无缝集成。 2.MVC 设计模式 MVC(Model…

设计模式—23种设计模式重点 表格梳理

设计模式的核心在于提供了相关的问题的解决方案,使得人们可以更加简单方便的复用成功的设计和体系结构。 按照设计模式的目的可以分为三大类。创建型模式与对象的创建有关;结构型模式处理类或对象的组合;行为型模式对类或对象怎样交互和怎样…

CSS实现图片浮动在底层 div 之上,而不会影响底层 div 的布局和内容

前言&#xff1a;遇到个需求&#xff0c;需要图片显示在div之上&#xff0c;但是不占用div的空间布局&#xff0c;网上的答案五花八门&#xff0c;但其实使用css就可以简单实现&#xff0c;仅以此博客作为记录 举个栗子 <div class"container"><img src&qu…

Linux 网络编程基础——网络模型

网络模型 网络模型1. OSI七层模型1. 物理层&#xff08;Physical Layer&#xff09;2. 数据链路层&#xff08;Data Link Layer&#xff09;3. 网络层&#xff08;Network Layer&#xff09;4. 传输层&#xff08;Transport Layer&#xff09;5. 会话层&#xff08;Session Lay…

研发机构大数据迁移如何保障敏感数据不泄露

随着云计算和大数据技术的飞速进步&#xff0c;越来越多的企业正试图通过数据迁移来提升IT基础设施的效率&#xff0c;减少成本&#xff0c;并增强业务的灵活性。但是&#xff0c;这一过程并非没有它的挑战&#xff0c;尤其是在数据安全方面。数据在转移过程中可能会遭遇黑客攻…

SQL的多表联查

这里我先附上两张表的数据&#xff1a; Orders 表: OrderIDCustomerID1321324NULL Customers 表: CustomerIDCustomerName1Alice2Bob3Charlie4David INNER JOIN &#x1f91d; 概念&#xff1a; INNER JOIN&#xff08;内连接&#xff09;返回两个表中匹配的记录。如果某条…

解决深度确定问题:使用不相交集合森林

解决深度确定问题&#xff1a;使用不相交集合森林 引言不相交集合森林&#xff08;DSF&#xff09;基础按秩合并与路径压缩深度确定问题的解决方案实现MAKE-TREE修改FIND-SET实现FIND-DEPTH实现GRAFT分析最坏情况运行时间结论参考文献 引言 在计算机科学中&#xff0c;树结构是…

时空扭曲:重温相对论的终极挑战,探寻真理的脚步

大家都知道&#xff0c;相对论是爱因斯坦提出的划时代理论&#xff0c;为人类认知时空和引力做出了革命性贡献。但这个理论真的万无一失吗&#xff1f;近日&#xff0c;一项新研究提出了测试时间扭曲的新方法&#xff0c;或许能让我们重新审视相对论在宇宙大尺度上的适用性。 时…

HTML5好看的通用网站模板源码

文章目录 1.设计来源1.1 主界面1.2 模板菜单1 界面1.3 模板菜单2 界面1.4 模板菜单3 界面1.5 下拉菜单1 界面1.6 下拉菜单2 界面1.7 模板菜单4 界面1.8 模板菜单5 界面1.9 界面底部 2.效果和源码2.1 动态效果2.2 源码目录2.3 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址…

Python 造数据神器Faker

大家好&#xff0c;在编写代码过程中&#xff0c;我们经常需要一些假数据来进行测试或者演示。手动创建这些数据不仅耗时&#xff0c;而且容易出错。幸运的是&#xff0c;Python有一个非常有用的库叫做Faker&#xff0c;它可以生成各种类型的假数据&#xff0c;从名字、地址到公…

【驱动】ARM手册引脚寄存器地址(绝对物理地址)查找(以AM437x为例)

1、问题描述 在配置设备树时,经常遇到如下宏: XXX_IOPAD(pa, val)实际定义如下: DRA7XX_CORE_IOPAD(pa, val) AM33XX_IOPAD(pa, val) DM816X_IOPAD(pa, val) DM814X_IOPAD(pa, val) AM4372_IOPAD(pa, val)一般注释中的说明如下: 原文:Macro to allow using the absol…

md5和byte64字符串加密

说明&#xff1a;最近碰到一个需求&#xff0c;网络请求&#xff0c;传递json的时候&#xff0c;必须加密&#xff0c;对字符串加密&#xff0c;然后前端去解密字符串&#xff0c;然后解析json&#xff0c;展示数据&#xff0c;可逆 step1: Md5加密方式 package com.example.…

Java技术精粹:高级面试问题与解答指南(一)

Java 面试问题及答案 问题1&#xff1a;请解释Java中的多态性&#xff0c;并给出一个例子。 答案&#xff1a; 多态性是Java中的一个重要特性&#xff0c;它允许一个引用类型可以指向多种实际类型的对象&#xff0c;并且可以通过这个引用调用实际对象的方法。多态性主要通过继…

JAVA:常见的加密算法简介

一、前言 加密算法是指将明文信息转变为密文信息的过程&#xff0c;即将信息从可读形式&#xff08;明文&#xff09;转换为加密形式&#xff08;密文&#xff09;的过程。在加密过程中&#xff0c;信息通过加密算法和加密密钥被加密处理&#xff0c;加密后的信息&#xff08;密…

【代码随想录算法训练Day17】LeetCode 110. 平衡二叉树、LeetCode 257.二叉树的所有路径、LeetCode 404.左叶子之和

Day17 二叉树第四天 LeetCode 110. 平衡二叉树【后序遍历】 平衡二叉树仍是后序遍历&#xff0c;就是获取左右子树的高度然后作差&#xff0c;如果子树就不平衡&#xff0c;那么就直接将-1向上传给父节点&#xff0c;否则该数的高度为左右子树高度的最大值1。 class Solutio…

day 38 435.无重叠区间 763.划分字母区间 56. 合并区间 738.单调递增的数字 968.监控二叉树

435.无重叠区间 思路 为了使区间尽可能的重叠所以排序来使区间尽量的重叠&#xff0c;使用左边界排序来统计重叠区间的个数与452. 用最少数量的箭引爆气球恰好相反。 代码 class Solution {public int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals,(a,…

如何在cPanel面板中开启盗链保护

本周有一个客户&#xff0c;购买Hostease的主机&#xff0c; 客户购买的是Linux虚拟主机&#xff0c;带cPanel面板的。询问我们的在线客服&#xff0c;如何可以防止他的网站上的图片不被盗用。cPanel的盗链保护功能可以帮助客户防止图片被盗链。 盗链&#xff08;Hotlinking&a…

.NET Core与.NET Framework的区别

.NET Core和.NET Framework是微软提供的两种主要的开发平台&#xff0c;用于构建各种应用程序。虽然它们都基于.NET技术&#xff0c;但在架构、平台支持、性能、开发工具和社区支持等方面存在显著差异。本文将详细探讨.NET Core和.NET Framework的主要区别&#xff0c;帮助开发…

呆马科技----构建智能可信的踏勘云平台

近年来&#xff0c;随着信息技术的快速发展&#xff0c;各个行业都在积极探索信息化的路径&#xff0c;以提升工作效率和服务质量。智慧踏勘云平台是基于区块链和大数据技术构建的全流程智慧可信踏勘解决平台。平台集远程视频、数据显示、工作调度、过程记录为一体&#xff0c;…