嵌入式软件架构演进:轮询系统、前后台系统、RTOS 架构特点和选择

嵌入式开发主要包括单片机(MCU)开发和以 ARM 为代表的嵌入式 Linux 开发。本文主要讲解单片机开发中嵌入式软件架构的演进,包括从最初的简单轮询式架构,到前后台系统,再到如今复杂多样的实时操作系统(RTOS)。对比各种嵌入式软件架构的特点和差异,并讨论学习 RTOS 的必要性。

裸机系统

在嵌入式开发领域,“裸机开发”在没有操作系统(OS)或者其他高级软件支持的情况下,直接在裸机硬件上进行开发和编程的过程。这种方式需要开发人员直接与处理器、外设和硬件寄存器等底层硬件进行交互,以实现系统的功能和需求。通常涉及编写底层驱动程序、配置硬件寄存器、处理中断和定时器等底层任务。

裸机系统一般又分为轮询系统和前后台系统。

轮询系统

轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情。

轮询系统的伪代码可表示如下:

int main(void)
{/* 硬件相关初始化 */HardWareInit();/* 无限循环 */while (1) {/* 处理事情 1 */DoSomething1();/* 处理事情 2 */DoSomething2();/* 处理事情 3 */DoSomething3();}
}

轮询系统是一种最简单的软件结构,通常只适用于那些只需要顺序执行代码且不需要外部事件来驱动的就能完成的事情,当有外部事件驱动时(例如按键),实时性就会降低。在代码清单中,如果只是实现 LED 翻转,串口输出,液晶显示、驱动蜂鸣器等操作,那么使用轮询系统将会非常完美。

但是,如果加入了按键操作等需要检测外部信号的事件,用来模拟紧急报警,那么整个系统的实时响应能力就不会那么好了。假设 DoSomething3 是按键扫描,当外部按键被按下,相当于一个警报,这个时候,需要立马响应,并做紧急处理,而这个时候程序刚好执行到 DoSomething1,要命的是 DoSomething1 需要执行的时间比较久,久到按键释放之后都没有执行完毕,那么当执行到 DoSomething3 的时候就会丢失掉一次事件。

因此,轮询系统只适合顺序执行的功能代码,当有外部事件驱动时,实时性就会降低。

前后台系统

前后台系统是在轮询系统的基础上采用了中断处理,外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断响应称为前台, main 函数里面的无限循环称为后台,按顺序处理业务功能,以及中断标记的可执行的事件。

前后台系统的伪代码可表示如下:

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

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

相关文章

无库存,无货源,怎么做视频号小店?

大家好,我是电商糖果 有朋友跟糖果说,这视频号小店非常火,自己想趁着这次的风口开店赚钱。 自己无库存,也无货源,能开店卖货不? 糖果告诉他,能卖货,而且还可以让他不到一个月时间…

vivado 系统监控器

系统监控器 (SYSMON) 模数转换器 (ADC) 用于测量硬件器件上的裸片温度和电压。 SYSMON 可通过片上温度和供电传 感器来监控物理环境。 ADC 可为各种应用提供高精度模拟接口。 请参阅下文 , 以获取有关特定器件架构的更多信息 : • 《 UltraScale …

速通汇编(四)汇编andor、shl、shr、inc、dec、xchg、neg指令

一, and(与操作) 按位与操作符,将两个操作数的对应位进行与操作。 and ax, bx ; 将寄存器 AX 和 BX 中的值进行按位与操作,并将结果存储回寄存器 AX二,or(或操作) 按位或操作符&…

c# wpf Template ContentTemplate

1.概要 1.1 定义内容的外观 2.2 要点分析 2.代码 <Window x:Class"WpfApp2.Window1"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schem…

电子技术学习笔记

一、半导体器件主要参数及应用 主要参数&#xff1a; 电压&#xff08;Voltage&#xff09;&#xff1a;指器件能够承受或工作的最大电压值&#xff0c;通常以伏特&#xff08;V&#xff09;为单位。 电流&#xff08;Current&#xff09;&#xff1a;指器件能够承受或工作的…

自去岁遭裁,迄今已憩半载有余……

自去岁遭裁&#xff0c;迄今已憩半载有余。初时&#xff0c;每思及空窗期之长&#xff0c;心中难免涌起自责之意&#xff0c;深恐日后求职之路坎坷。然深思熟虑后&#xff0c;方觉人生岂能无休憩之时&#xff1f;偶尔休憩&#xff0c;亦属常理&#xff0c;何必过于自责乎&#…

LangChain学习笔记—RAG(检索增强生成)

LangChain LangChain是一个软件开发框架&#xff0c;可以更轻松地使用大型语言模型&#xff08;LLM&#xff09;创建应用程序。它是一个具有 Python 和 JavaScript 代码库的开源工具。LangChain 允许开发人员将 GPT-4 等 LLM 与外部数据相结合&#xff0c;为聊天机器人、代码理…

C++之函数提高(HM)

目录 1.函数默认参数&#xff08;缺省参数&#xff09; 2.占位参数 3.函数重载 4.类和对象--封装 &#xff08;1&#xff09;圆类&#xff1a; &#xff08;2&#xff09;访问权限 &#xff08;3&#xff09;struct&&class &#xff08;4&#xff09;立方体类的…

最大质因数

描述 给出 N 个数字&#xff0c;试求质因数最大的数字。 输入描述 第一行&#xff0c;一个整数 N &#xff0c;表示数字个数。接下来 N 行&#xff0c;每行一个整数 Ai&#xff0c;表示给出的数字。 输出描述 一个整数&#xff0c;表示质因数最大的数字。 N≤5000,Ai≤20…

第1讲——预备知识

一、视觉SLAM十四讲在讲些啥 SLAM&#xff1a;Simultaneous Localization and Mapping 翻译&#xff1a;同时定位与地图构建 搭载特定传感器的主体&#xff0c;在没有环境先验信息的情况下&#xff0c;于运动过程中建立环境的模型&#xff0c;同时估计自己的运动。 当特定传感…

MBTI测试指南:职场新人必读的性格分析文章!

MBTI简介 迈尔斯-布里格斯类型指标&#xff08;Myers–Briggs Type Indicator&#xff0c;MBTI&#xff09;是由美国作家伊莎贝尔布里格斯迈尔斯和她的母亲凯瑟琳库克布里格斯共同制定的一种人格类型理论模型。 该指标以瑞士心理学家卡尔荣格划分的8种心理类型为基础&#xff…

WWDC24定档6月 | 崩坏3将推Mac系统版 苹果AI启航 visionOS 2.0将系数登场WWDC24

这几天又有一件苹果用户圈大事发生了&#xff01;WWDC24正式定档&#xff0c;将在6月10日-14日召开&#xff0c;届时一众软件系统&#xff0c;包括iOS18&#xff0c;iPadOS&#xff0c;WatchOS&#xff0c;VisionOS等等&#xff0c;都将迎来更新。另外就是手游崩坏3官宣&#x…

有效感受野可视化学习

有效感受野可视化 过程记录创建环境准备数据、脚本脚本测试 其他参考尝试运行 过程记录 创建环境 conda create -n ERF python3.8 -y conda activate ERF pip3 install empy rospkg pyyaml catkin_pkg conda install pytorch2.1.0 torchvision0.16.0 torchaudio2.1.0 pytorch…

【干货集】C# XmlHelper帮助类操作Xml文档的通用方法汇总

前言 该篇文章主要总结的是自己平时工作中使用频率比较高的Xml文档操作的一些常用方法和收集网上写的比较好的一些通用Xml文档操作的方法&#xff08;主要包括Xml序列化和反序列化&#xff0c;Xml文件读取&#xff0c;Xml文档节点内容增删改的一些通过方法&#xff09;。当然可…

基于k8s的高性能综合web服务器搭建

目录 基于k8s的高性能综合web服务器搭建 项目描述&#xff1a; 项目规划图&#xff1a; 项目环境&#xff1a; k8s&#xff0c; docker centos7.9 nginx prometheus grafana flask ansible Jenkins等 1.规划设计整个集群的架构&#xff0c;k8s单master的集群环境&…

【R】Error in library(foreach) : 不存在叫‘foreach’这个名字的程辑包

Error in library(foreach) : 不存在叫‘foreach’这个名字的程辑包 此外: Warning message: package ‘parallel’ is a base package, and should not be updated 解决方法 缺少名为 foreach 的包&#xff0c;使用install.packages("foreach")将名为foreach 的包…

Qt事件学习案例

视频链接 https://www.bilibili.com/video/BV18B4y1K7Cs?p7&spm_id_frompageDriver&vd_sourcefa4ef8f26ae084f9b5f70a5f87e9e41bQt5跟着视频做即可&#xff0c;Qt6部分代码需要改动,改动的地方注释有写 素材 百度云 链接&#xff1a;https://pan.baidu.com/s/158j…

Mybatis——一对一映射

一对一映射 预置条件 在某网络购物系统中&#xff0c;一个用户只能拥有一个购物车&#xff0c;用户与购物车的关系可以设计为一对一关系 数据库表结构&#xff08;唯一外键关联&#xff09; 创建两个实体类和映射接口 package org.example.demo;import lombok.Data;import …

STM32H5 读取温度传感器校准值时进 HardFault 的原因分析

1.前言 有客户反馈&#xff0c;在使用 STM32H5 读取温度传感器校准值地址时&#xff0c;会进入 HardFault&#xff0c;而在其他系列芯片中读取这个参数时并没有此现象。在 NUCLEO-H563ZI 开发板上去复现此问题&#xff0c;发现只有开启 ICACHE 后才会复现&#xff0c;初步验证…

【旅行商问题TSP】基于大邻域搜索算法LNS

课题名称&#xff1a;大规模邻域搜索算法LNS求解TSP问题 版本时间&#xff1a;2024-04-01 程序运行&#xff1a;直接运行LNS_TSP.m 文件即可 代码获取方式&#xff1a; QQ&#xff1a;491052175 VX&#xff1a;Matlab_Lover 模型介绍&#xff1a; 第一步&#xff1a;设定…