裸机和RTOS系统区别与联系

news2024/12/28 23:10:50

1. 裸机和rtos的多任务处理

试想一种场景,我们正在打游戏,但女朋友在你打游戏的过程中给你发送消息,你需要回复消息 

image-20230203173902379 

 1.1 裸机处理方式

while(1) 
{ 
	打游戏();
	回复信息(); 
}

玩过51或者stm32的裸机编程的人都知道,我们往往会在应用程序写一个大循环,如果你一把游戏30min,那么你就得30min后才能执行回复信息的任务,那么你女朋友就会找你麻烦了😆打完游戏才能发送信息,回完信息才能继续打游戏,如下图

在这里插入图片描述

1.2 RTOS行为 

void main(void) 
{ 
	/* 创建打游戏任务 */
	xTaskCreate(打游戏)
	/* 创建回复信息任务 */ 
	xTaskCreate(回复信息)
}
void 游戏(void) 
{ 
   while(1) 
   { 
	 打游戏();
   }
}
void 信息(void) 
{ 
   while(1) 
   { 
	 回复信息();
   }
}

而rtos不和裸机相同,它会让打游戏运行一个时间片,回复信息运行一个时间片,一个时间片的时间是可以我们自己设置的,就是滴答定时器的一个节拍,例如我们可以设置1ms来运行,这有点类似于一个伪多线程,在微观来看我们实际是两个任务交替运行,但是宏观上我们却感觉两个任务在同时运行,妥妥的游戏得意,情场得意6️⃣,如下图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6MXiN2pO-1675423742794)(C:\Users\zh006\Desktop\images\image-20230203175210812.png)]

2. 裸机和rtos的优先级处理

同样的场景,假设此时小明肚子疼了,要去医院,此时裸机与RTOS又会怎么做呢?

在这里插入图片描述 在这里插入图片描述

在这里插入图片描述

2.1 裸机处理 

这时我们可能就知道,这个时候用中断阿,并把它设为一个比较高的优先级,毕竟生命安全第一位,我们可以定义一个中断服务程序,一肚子痛就触发中断去医院,但我们注意,中断是一瞬间的事情,我们不能在中断服务函数做太多的事,比如我们在终端服务函数做一个delay个10ms,程序可能就会出现问题例如:

  • 中断处理时间太长或导致正常的应用程序不能按时被执行;
  • 执行中断时不能响应其他中断,中断执行时间太长容易丢其他中断;
  • 某个中断服务程序执行时间太长,可能导致中断嵌套非常深,容易导致栈溢出,也容易出现逻辑问题。

去医院就是一个长任务,需要坐车挂号看医生,很显然,我们不能把去医院放在中断中

但是呢,玩过单片机的我们都知道,对中断的处理我们一般都是设置一个全局的标志位,我们只需要在中断函数中设置标志位,然后再大循环中去判断这个标志位就可以了,代码如下: 

while(1) 
{ 
	打游戏();
	回复信息(); 
	if(FLAG == 1)
	{
	   去医院();
	   FLAG = 0;
	}
}

但是假如我们此时再打游戏中,打游戏这个任务需要运行30min,即使此时FLAG这个标志位已经在中断中被置为1了也无济于事,仍然要等运行完上面两个任务才能进行下面的判断,实时性非常差

2.2 rtos处理 

而rtos的处理方式就相当的优雅了,我们可以创建三个任务,并把去医院设为高优先级,让rtos系统自己去进行调度,并且我们注意一种情况,当去医院这个任务在运行没有占有cpu资源时,例如挂号要等待或者去医院的路上,这个时候看病这个任务是没有在进行的,cpu也没有被占用。此时cpu又可以分配给低优先级的任务,例如打游戏回信息,这样我们就很好的使用了cpu的资源

void main(void) 
{ 
	/* 创建打游戏任务 */
	xTaskCreate(打游戏)
	/* 创建回复信息任务 */ 
	xTaskCreate(回复信息)
	/* 创建去医院任务 */ 
	xTaskCreate(去医院)
}
void 游戏(void) 
{ 
   while(1) 
   { 
	 打游戏();
   }
}
void 信息(void) 
{ 
   while(1) 
   { 
	 回复信息();
   }
}
void 去医院(void) 
{ 
   while(1) 
   { 
	 去医院();
   }
}

3. 裸机和rtos的区别

3.1 裸机

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

  • 实时性差:(应用程序) 轮流执行
  • delay:空等待,CPU不执行其他代码
  • 结构臃肿:实现功能都放在无限循环

在这里插入图片描述

3.2 rtos

RTOS特点:RTOS全称为:Real Time OS,就是实时操作系统,强调的是:实时性

分而治之:实现功能划分为多个任务
延时函数:任务调度
抢占式:高优先级任务抢占低优先级任务,更高优先级也可以先运行
任务堆栈:每个任务都有自己的栈空间,我们低优先级任务被抢占后,cpu重新回到自己手里,是从之前那个位置继续执行,因此这个栈空间需要有相关的信息,例如:寄存器的值,局部变量…,这和c语言的linux多线程编程有点类似,就是在打断的时候要保存后续的事件,完成中断之后会继续倒回去
 

在这里插入图片描述

值得注意的是,rtos也有中断,我们前面的任务调度其实是软件层面上的说法,而中断的优先级是最高的

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

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

相关文章

【MATLAB图像处理实用案例详解(11)】——基于Hough变换的人眼虹膜定位方法

目录 一、Hough变换基本原理二、算法流程2.1 分离瞳孔并估算虹膜内半径2.2 Hough变换定位内外虹膜 三、效果演示 一、Hough变换基本原理 Hough 变换作为一种参数空间变换算法,直线和其他参数化形状检测的重要工具。Hough 变换具有较强的稳定性和鲁棒性,…

【AI绘画】外网一直进不去?别担心,还有AI绘画小程序和文心一格

这是加入新星计划的最后一周的最后一篇文章啦!文章的最后是我想总结一下从三月底到四月中旬这几十天的感想~ 系列文章: 【AutoGPT】你自己运行,我先睡了—— ChatGPT过时了吗?_山楂山楂丸的博客-CSDN博客 目录 前言 …

pytest.mark

目录 一、Pytest简介 二、安装 三、pytest.mark 1.标记 2.参数化 3. skip跳过 4. xfail 该用例置为失败 一、Pytest简介 Pytest是python一个第三方测试框架,有非富的第三方插件可以扩展 特点: 简单灵活,容易上⼿;⽀持参数…

ASEMI代理ADM202EARNZ-REEL原装ADI车规级ADM202EARNZ-REEL

编辑:ll ASEMI代理ADM202EARNZ-REEL原装ADI车规级ADM202EARNZ-REEL 型号:ADM202EARNZ-REEL 品牌:ADI/亚德诺 封装:SOIC-16 批号:2023 引脚数量:16 安装类型:表面贴装型 ADM202EARNZ-REE…

【软件测试】Postman简单使用教程

【软件测试】Postman使用教程 创建集合 新建一个collection 新建一个请求 默认get 举例测试get请求 后端controller代码,该功能是查询所有信息 // 查询所有员工信息RequestMapping(value "/employee",method RequestMethod.GET)public String g…

ELK日志分析初

ELK是一个开源的日志分析系统 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在…

代码随想录算法训练营第三十一天| 理论基础 、455.分发饼干 、376. 摆动序列、53. 最大子序和

文章目录 491.理论基础455.分发饼干376. 摆动序列:star:53. 最大子序和:star: 491.理论基础 链接:代码随想录 解题思路: 通过局部最优,推出整体最优 如何验证贪心算法的正确性 最好用的策略就是举反例,如果想不到反例,那么就试一…

前端项目打包并部署

一、vue项目打包 1.1 方式一:vue项目命令行打包 在当前项目路径下,执行命令 npm run build 在当前项目路径下,生成 一个dist文件夹。 将来部署项目,是部署的dist这个文件。 1.2 方式二:使用vue ui打包项目 在终端中…

前端学习之路 来自前端方向学生的总结

恭喜您!您发现了宝藏! 我发现很多小伙伴,对于前端感兴趣,也很想去学好,但是却无从下手,不知道如何去学习。作为一名现处于大三即将大四的学生,借此机会来分享分享我的前端学习之路!…

扬帆优配|TMT板块密集发布减持计划 火爆行情潜藏估值难以匹配隐忧

4月以来,多家上市公司发表股东减持公告,其中一季度大热的TMT(科技、媒体和电信)板块的股东减持最为引人注目。 32只TMT股拟减持上限占比超1% 到4月18日,4月以来已有61家TMT板块上市公司发布减持方案。从拟变动数量上限…

神策数据荣登胡润百富 2023 全球独角兽榜

4 月 18 日,胡润研究院于广州 2023 全球独角兽 CEO 大会发布《2023 全球独角兽榜》(Global Unicorn Index 2023),列出了全球成立于 2000 年之后,价值 10 亿美元以上的非上市公司(估值计算日期截止 2022 年 …

自阿里P8爆出内部1031道java面试题后,在Boss直聘狂拿千份Offer

开始之前我问大家几个问题,看大家是如何思考的: 1.程序员一定要去一线城市漂泊吗?在自己家乡如何拿到一份满意的薪水? 2.程序员被裁员、找不到工作,代表什么? 3.程序员一定要进一线大厂吗?你…

手把手教你通过 Docker 部署前后端分离项目(亲测可用)

安装Docker 安装Nginx 安装Mysql 部署SpringBoot项目 部署Vue项目 一、安装Docker 1、安装: yum install docker 2、启动/停止/重启docker服务 service docker start service docker stop service docker restart 3、查看docker版本信息 docker version…

UDS 14229-1 诊断服务,两万字长文Trace版详细解读

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe&…

Tomcat—javaEE

文章目录 1.定义及启动2.熟悉重点目录作用2.1bin2.2conf/server.xml2.3日志文件2.4webapps 3.部署和访问 1.定义及启动 (1)Tomcat属于web服务器的一种,也是servlet的一种 (2)Windows下,双击Tomcat下/bin/s…

ArcGIS|一文彻底搞懂GIS图斑编号

实际工作中,经常会有对各类图斑进行编号的需求。数据中图斑数比较少时,我们可以手动进行编号,但数据量较大时就必须得想办法自动实现图斑编号。今天,将分享几种常见的图斑自动编号方式,主要包括:图斑顺序编…

Mysql 触发器(复习)

今天考虑一个删除记录回收站的时候,突然想到了触发器这个东西,基本上之前也很少使用。废话不不多说,先看它的解释: 在MySQL中,触发器(Trigger)是一种特殊的存储过程,它会在指定的事…

[java/初学者]java常用API(2)——字符串

前言 所谓的字符串其实就是一串连续的字符,它是由许多单个字符连接而成的。如多个英文字母所组成的一个英文单词。字符串中可以包含任意字符,这些字符必须包含在一对双引号之内,例如“Dufeng”。 而与字符串相关的类都放在java.lang包中&…

Nuitka打包PyQt项目快速上手

之前用pyinstaller打包python程序,听说Nuitka比较快,用它打包PyQt的程序练练手。 Nuitka 问了问chatGPT,总结几点:将python编译成C/C,提高速率、跨平台、编译后程序直接运行(不需要python解释器&#xff0…

【云原生】Kubernetes集群升级

【云原生】Kubernetes集群升级指南 前言一、集群升级过程辅助命令二、升级master节点2.1、升级kubeadm。2.2、验证升级计划2.3、master节点升级 三、升级node节点总结 前言 本文演示kubernetes集群从v1.24.1升级到v1.25.5。 相关文档。 一、集群升级过程辅助命令 &#xff0…