嵌入式软件架构

news2024/9/24 13:21:16



总目录链接==>> AutoSAR入门和实战系列总目录

总目录链接==>> AutoSAR BSW高阶配置系列总目录

文章目录

  • 1 嵌入式软件分类 – BAREMETAL
  • 2 嵌入式软件分类 – 实时操作系统 (RTOS)
  • 3 嵌入式软件分类 – “通用”操作系统
  • 4 嵌入式软件分类 – 容器/微服务
      • 微服务
      • 容器
  • 5 嵌入式软件分类 – 混合系统
  • 6 结论


嵌入式软件架构设计意图通常伴随着基于个人经验的假设。软件开发人员可能会从资源受限的基于微控制器的系统的角度来看待架构设计。系统人员可能会从应用处理器的角度考虑架构。如何设计架构将取决于系统的嵌入式软件分类。

我们可以通过多种不同的方式对嵌入式软件进行分类。我发现有五种简单的嵌入式软件分类可以帮助我调整视角以最好地理解手头的系统。

让我们探索 5 个简单的嵌入式软件分类,您需要了解这些分类才能成功地交流和设计您的系统。

1 嵌入式软件分类 – BAREMETAL

裸机嵌入式系统利用不依赖于操作系统的软件架构。通常,裸机架构将是事件驱动的,严重依赖状态机,和/或使用非常简单的协作任务调度。开发人员需要非常了解底层处理器,因为没有操作系统可以抽象出底层细节。

您通常会在资源受限的设备(例如 8 位、16 位和一些 32 位微控制器)上找到裸机软件设计。但是,资源可用性不是裸机系统的限制条件。您可以设计一个裸机架构并为任何嵌入式处理器实现它。不幸的是,处理器越复杂,实现就越复杂。

对于功能有限、使用资源受限的微控制器、具有严格的实时要求以及对可扩展性的最低要求的产品,建议使用裸机架构和实现。

2 嵌入式软件分类 – 实时操作系统 (RTOS)

使用实时操作系统的嵌入式软件体系结构在过去几年中急剧增加。基于 RTOS 的嵌入式系统通常具有比裸机架构更复杂的时序要求。RTOS 抽象出一些低级细节,例如任务调度,同时还为开发人员提供任务同步(信号量和标志)、数据保护(互斥量)和通信(队列)的工具。

您通常会在 32 位微控制器和小型应用处理器上找到 RTOS 软件设计。虽然您可能会在 16 位处理器上找到它们,但 RTOS 通常需要至少 24 KB 的闪存和 32 KB 的 RAM 才能有效使用。这些要求对 RTOS 的有效使用设置了下限。

RTOS 会给设计增加额外的复杂性,主要是在使用抢占式任务调度时。如果设计者不小心,就有可能导致线程饥饿、创建优先级倒置甚至死锁。但是,RTOS 可以为您提供快速扩展系统、提高可维护性以及收集比裸机系统更复杂的系统性能的能力。

对于具有复杂时序要求、使用现代微控制器、受益于多任务处理以及需要扩展或重用应用程序部分的产品,建议使用基于 RTOS 的架构和实现。

3 嵌入式软件分类 – “通用”操作系统

当使用足够复杂的处理器(如应用程序处理器)时,嵌入式软件架构可以利用整个操作系统。例如,嵌入式 Linux 可以被认为是一个完整的操作系统。我不将 RTOS 归入此类别,因为 RTOS 与嵌入式 Linux 不同,它是一种专用的、资源受限的操作系统,。设计人员可以像开发桌面或移动应用程序那样完全访问库和操作系统资源。

您通常会在 Raspberry Pi 等 32 位应用程序处理器上找到这种操作系统软件设计。然而,这些处理器非常复杂,需要一个操作系统来管理它们的所有资源。现在,这并不意味着您不能使用裸机或使用 RTOS;它只是意味着复杂性和开发时间急剧增加。

完整的操作系统可以消除开发人员的内存限制负担。此外,您通常可以让非嵌入式软件人员参与进来。对于基于操作系统构建的应用程序,软件开发涉及的专业化知识要少得多。

对于没有严格实时要求、使用现代微处理器、受益于高级抽象以及需要扩展或重用应用程序部分的产品,建议使用完整的操作系统架构和实现。

4 嵌入式软件分类 – 容器/微服务

微服务和容器是云、移动和桌面计算中常见的设计类型。然而,他们正在迅速找到进入嵌入式系统的途径。我将这两者混为一谈,因为它们使用的架构设计策略相似,尽管底层技术不同。

微服务

微服务将应用程序构建为一组松散耦合的服务,可独立部署且易于维护(如果做得好)。微服务将应用程序构建为为业务领域开发的小型自治服务的集合。微服务提供具有特定功能的松散耦合服务。

资源相对受限的嵌入式系统(例如微控制器)可以运行微服务。但是,它们通常至少需要与运行 RTOS 所需的内存量相同的内存量。微服务包括服务本身、入站和出站消息队列以及日志和状态信息。

需要编排器和运行时环境会增加微服务设计的复杂性,必须谨慎使用您使用的资源并仔细监控系统的实时响应。然而,微服务可以提供非常可扩展的系统,易于现场维护和更新。

我建议在需要现场更新、可扩展性和现代敏捷流程并受益于分布式模型的应用程序中使用微服务。

容器

容器是一种可以承载微服务的实现范式。每个容器都是一个独立的沙箱,可以运行一个或多个微服务。容器通常可独立部署且易于维护。一系列容器为更广泛的应用奠定了基础。同样,容器和微服务密切相关;容器为微服务运行提供了额外的隔离层。

至少需要一个现代微控制器来利用容器。每个技术供应商都略有不同,但有些供应商声称能够使用与 RTOS 一样少的内存。然而,我调查过的大多数目标物联网应用程序预计大约有 256 KB 的闪存。

容器是一种现代架构实现,可以为嵌入式应用程序增加灵活性、可扩展性和可移植性。多年来,它们已成功用于软件的其他领域。迄今为止最大的限制是尺寸和性能。

我建议在需要现场更新、可扩展性、额外安全性和现代敏捷流程的应用程序中使用容器。

图片

图 1 – 容器架构堆

5 嵌入式软件分类 – 混合系统

混合系统同时利用多个分类。例如,您可能有一个使用嵌入式 Linux 的应用程序处理器。但是,该处理器可能有一个内置的微控制器,它使用裸机方法来管理实时响应。

混合系统允许开发人员利用多种设计方法从多种系统类型中获益。如果不仔细管理其设计的各个部分之间的交互,这种灵活性通常会增加系统的复杂性。

对于具有复杂处理和实时要求的产品,建议使用混合架构和实现,这些产品使用多核处理器,受益于高级抽象并需要扩展或重用应用程序部分。

6 结论

嵌入式软件系统可以分为多种类型。如何设计和构建嵌入式软件将取决于您选择的分类。每个分类都将规定您用来构建和实施系统的设计模式和工具。当设计或讨论系统时,请先指定系统类型,然后再继续进行设计。

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

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

相关文章

入行 4 年,跳槽 2 次,我摸透了软件测试这一行

最近几年行业在如火如荼的发展壮大,以及其他传统公司都需要大批量的软件测试人员,但是20年的疫情导致大规模裁员,让人觉得行业寒冬已来,软件测试人员的职业规划值得我们深度思考。 大家都比较看好软件测试行业,只是因为…

python入门(四)python眼里的图像

文章目录背景一.搭建jupyter环境Jupyter 是什么:安装Jupyter Lab1: cmd中找到 anaconda powershell prompt2.切换到python3.8环境中3. 安装Jupyter4. 运行jupyter-lab5. 备注6.命令练习二.图像的本质背景 本人工作中,用到了ai相关技术,但是java出身&…

CNStack 云服务云组件:打造丰富的云原生技术中台生态

作者:刘裕惺 CNStack 相关阅读: CNStack 多集群服务:基于OCM 打造完善的集群管理能力 CNStack 虚拟化服务:实现虚拟机和容器资源的共池管理 CNStack 云边协同平台:实现原生边缘竟能如此简单 01 前言 CNStack 2.0…

Linux网络IO精华指南

在互联网中提起网络,我们都会避免不了讨论高并发、百万连接。而此处的百万连接的实现,脱离不了网络 IO 的选择,因此本文作为一篇个人学习的笔记,特此进行记录一下整个网络 IO 的发展演变过程。以及目前广泛使用的网络模型。 1.网…

小说情感倾向分析工具

目前有很多中英文小说情感倾向工具,以下是一些常用的工具: 情感分析工具:可以对文本进行情感识别,根据文本中包含的情感信息,将其转化成情感值,通常有积极情感值、消极情感值、中性情感值等,常…

Vue3.0的生命周期

要说清这个生命周期钩子,首先我们要通过一个实例来讲解 就是点击这个按钮来切换Demo组件的显示隐藏,当然它也疯狂的操作Demo的挂载,卸载 红色是卸载流程,蓝色是挂载流程 我们写在外面可以实现,但是v3的思想是组合api因…

树状数组与线段树的应用

一、树状数组 树状数组给人的感觉就像,一直在维护前缀和一样,只是加快了前缀和的速度,再用前缀和结合题目得出一些性质,从而去解题。(一些不成熟的看法) 基础知识(一般树状数组用来处理单点修…

含氢微网优化调度模型matlab

目录 1 主要内容 模型示意图 目标函数 2 部分程序 3 程序结果 4 下载链接 1 主要内容 最近咨询含氢微网优化调度模型的同学较多,本次就分享一个高质量的源码资源。该程序方法复现《Simulation of design and operation of hydrogen energy utilization syste…

ssm拦截器

ssm拦截器 #: 与之前的过滤器不一样,过滤器是指在servlet中的,而拦截器是属于SpringMVC的,可以对请求的数据进行提前操作和后置操作: 先自己创建一个拦截器Interception类(其实人家真名叫Interceptor&…

flutter dart中用ffi调用golang或C的动态链接库

本文介绍从dart中,通过ffi方式调用golang生成的动态链接库。 go/lib.go package mainimport "C"//export GetKey func GetKey() *C.char {theKey : "123-456-789"return C.CString(theKey) }func main() {}cd go go build -buildmodec-shared…

高通QSSI方式导致CI编译失败问题记录

一、问题背景 1、QSSI说明 QSSI 是 Qualcomm Single System Image 的缩写,高通平台从Android Q开始,为了解决Android碎片化问题,把system.img和vendor.img进一步拆分,增加了QSSI编译选项,QSSI就是用来编译system.img的…

数据结构(ArrayList)

文章目录一、线性表二、顺序表2.1 ArrayList(1)概念(2)ArrayList 的构造(3)ArrayList 的方法(4) ArrayList的遍历(5)ArrayList的优缺点2.2 链表一、线性表 概…

symmetric funtion and antisymmetric function(对称性函数和反对称性函数)

symmetric funtion and antisymmetric functionantisymmetric functionsymmetric funtion附录今天看资料的时候遇到了一个说法,文中提及,f(x)f\left(x\right)f(x) 是一个 antisymmetric function,看到这个说法有点儿懵,这里特来记…

上海亚商投顾:沪指逼近3400点 CPO概念股再度爆发

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪沪指今日震荡反弹,午后逼近3400点关口,创业板指则小幅调整。CPO概念股再度爆发,…

[oeasy]python00134_[趣味拓展]python起源_历史_Guido人生_ABC编程语言_Tanenbaum

python 历史 回忆上次内容 颜文字是kaomoji 把字符变成一种图画的方法一层叠一层很多好玩儿的kaomoji是一层层堆叠起来的meme 虚拟的表情也在真实世界有巨大影响 一步步地影响 字符编码就是这样一步步发展过来的python也是 一步步 发展到今天的 python究竟是 怎么发展的呢&…

异常(throwable)

异常 异常分类 (1)Throwable类 所有的异常类型都是它的子类,它派生两个子类Error、Exception。 (2)Error类 表示仅靠程序本身无法恢复的严重错误(内存溢出动态链接失败、虚拟机错误)&#…

分布式定时任务

本文引用了谷粒商城的课程 定时任务 定时任务是我们系统里面经常要用到的一些功能。如每天的支付订单要与支付宝进行对账操作、每个月定期进行财务汇总、在服务空闲时定时统计当天所有信息数据等。 定时任务有个非常流行的框架Quartz和Java原生API的Timer类。Spring框架也可以…

【面试题】20个常见的前端算法题,你全都会吗?

现在面试中,算法出现的频率越来越高了,大厂基本必考 今天给大家带来20个常见的前端算法题,重要的地方已添加注释,如有不正确的地方,欢迎多多指正💕 大厂面试题分享 面试题库 前后端面试题库 (…

Spring 6 正式“抛弃”feign

近期,Spring 6 的第一个 GA 版本发布了,其中带来了一个新的特性——HTTP Interface。这个新特性,可以让开发者将 HTTP 服务,定义成一个包含特定注解标记的方法的 Java 接口,然后通过对接口方法的调用,完成 …

Simulink仿真封装中的参数个对话框设置

目录 参数和对话框窗格 初始化窗格 文档窗格 为了更加直观和清晰的分析仿真,会将多个元件实现的一个功能封装在一起,通过参数对话框窗格,可以使用参数、显示和动作选项板中的对话框控制设计封装对话框。如图所示: 参数和对话框…