当前位置: 首页 > news >正文

嵌入式开发:你需要知道的5种简单

  传达嵌入式软件体系结构设计意图通常伴随着基于嵌入式开发人员经验的假设。你可以从资源受限的基于微控制器的系统的角度来看架构设计。如何设计架构将取决于系统的嵌入式软件分类。有许多不同的方法可以对嵌入式软件进行分类。我发现有五种简单的嵌入式软件分类可以帮助我调整视角,以更好地理解手头的系统。

  让我们探索5种简单的嵌入式软件分类,你需要了解这些分类才能成功地进行通信和设计你的系统。

  分类1 — 裸机

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

  你通常会在资源受限的设备上找到裸机软件设计,例如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不同。设计师可以完全访问库和操作系统资源,这是他们在开发桌面或移动应用程序时所需要的。

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

  完整的操作系统可以减轻嵌入式开发人员的内存限制负担。此外,你通常可以让非嵌入式软件人员参与进来。对于构建在操作系统上的应用程序,软件专业化要少得多。

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

  分类4 — 容器/微服务

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

  微服务公司

  微服务将应用程序构造为松散耦合的服务的集合,可以独立部署并且易于维护(如果做得好)。微服务将应用程序构建为为业务领域开发的小型自治服务的集合。微服务提供了一个松散耦合的服务,并考虑了特定的特性。

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

  微服务可以通过需要协调器和运行时环境来增加设计的复杂性。这绝不是破坏交易,但你必须小心使用资源,并仔细监控系统的实时响应。然而,微服务可以提供非常可扩展的系统,易于现场维护和更新。

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

  

  容器

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

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

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

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

  分类5 — 混合

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

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

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

  结论

  嵌入式软件系统可分为多种类型。如何设计和构建嵌入式软件将取决于你选择的分类。每个分类都将规定用于构建和实现系统的设计模式和工具。在嵌入式开发人员设计或讨论系统时,请先指定系统类型,然后再继续,会发现这个简单的练习会帮助你找到正确的方向。

相关文章:

嵌入式开发:你需要知道的5种简单

传达嵌入式软件体系结构设计意图通常伴随着基于嵌入式开发人员经验的假设。你可以从资源受限的基于微控制器的系统的角度来看架构设计。如何设计架构将取决于系统的嵌入式软件分类。有许多不同的方法可以对嵌入式软件进行分类。我发现有五种简单的嵌入式软件分类可以帮助我调整…...

MVC与MVVM

MVC与MVVM举例说明MVCMVVM两者比较MVC <!DOCTYPE html> <html><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><title>mvc案例</title><link rel"styleshe…...

Cortex-M0异常和中断

目录1.概念2.异常类型3.异常优先级定义4.向量表5.异常流程概述接受异常请求压栈和出栈异常返回指令末尾连锁延迟到达6.EXC_RETURN7.异常入口流程的细节压栈取出向量并更新PC寄存器更新8.异常退出流程的细节1.概念 异常是能够引起程序流偏离正常流程的事件&#xff0c;当异常发…...

数据库(6)--存储过程

一、学习目标 熟悉存储过程的定义和使用&#xff0c;熟练运用 select ,update ,insert ,delete 命令完成对学生信息数据库的查询、更新、添加、删除操作。 二、学习内容 学生&#xff08;学号&#xff0c;年龄&#xff0c;性别&#xff0c;系名&#xff09; 课程&#xff08;…...

c++ 指针、引用和常量

指针、引用和常量的关系_夜悊的博客-CSDN博客 1. ① 指针是对象&#xff0c;引用不是对象&#xff08;在此可以理解为变量&#xff0c;一个变量是一个对象&#xff09; 指针不必须初始化引用只是为一个已经存在的对象所起的另一个名字&#xff08;别名&#xff09;&#xff…...

1、HAL库UART 中断|DMA 自动回显接收数据

1、实现代码&#xff1a; stm32f4xx_hal_conf.h文件开启UART宏定义 #define HAL_UART_MODULE_ENABLED添加stm32f4xx_hal_uart.c和stm32f4xx_hal_dma.c到自己工程&#xff1b; 编写好的代码&#xff1a;usart_Driver.c /***************************************************…...

NPOI - ConditionalFormattingRule

NPOI 给xls(xlsx)创建条件格式 获取 XSSFSheetConditionalFormatting 对象 初始化 IWorkbook _workbook new XSSFWorkbook(); ISheet _dataSheet _workbook.GetSheet("template"); ISheetConditionalFormatting fcs _dataSheet.SheetConditionalFormatting;调用…...

JavaのString类这一篇就够了(包含StringBuffer_Builder)

1.&#x1f957;String类简介 在我们写代码的时候&#xff0c;String总是充斥着前前后后。 但你会不会经常力不从心&#xff0c; “这个*** 字符串怎么** 转换不成功啊” “*** 这个字符串到底是常量还是对象啊” “这*** 字符串内存结构到底* * * 是什么啊” “为啥我的字符串…...

C# dataGridView 导出表格 xls NPOI 2.4.1 版本

using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; try { SaveFileDialog fileDialog new SaveFileDialog(); fileDialog.Filter “Excel(97-2003)|*.xls”; if (fileDialog.ShowDialog() System.Windows.Forms.DialogResult.Cancel) { return; } //不允许dataGridView…...

秒杀项目的消息推送

目录 一、创建消费者 二、创建订单链路配置 1.定义RabbitMQ配置类 2.创建RabbitmqOrderConfig配置类 三、如何实现RabbitMQ重复投递机制 1.开启发送者消息确认模式 2.消息发送确认 ① 创建ConfirmCallBacker确认模式 ② 创建ReturnCallBack退回模式 3.创建生产者 …...

最近开发及 vue3 几个小总结

只是单纯记录一下最近维护了几个项目之后的感触&#xff0c;也只是在自己现在水平上面的一些感觉。发发牢骚&#xff0c;水水文章 是否过度封装 可能水平不够吧&#xff0c;在 axios 封装的时候&#xff0c;只是把响应和拦截还有一些全局的配置封装了一下&#xff0c;并没有加…...

代谢组学分享-花青素通过调节氨基酸代谢改善糖尿病肾病的肾功能

代谢组学文献分享&#xff0c;文章标题&#xff1a;Anthocyanin improves kidney function in diabetic kidney disease by regulating amino acid metabolism 发表期刊&#xff1a;Journal of Translational Medicine 影响因子&#xff1a;8.44 作者单位&#xff1a;中山大…...

超简单!pytorch入门教程:Tensor

超简单&#xff01;pytorch入门教程&#xff1a;Tensor 一、pytorch安装 安装pytorch之前&#xff0c;需要安装好python&#xff08;废话&#xff09;&#xff0c;还没安装过python的宝宝请先移步到廖雪峰的python教程&#xff0c;待安装熟悉完之后&#xff0c;再过来这边。 …...

如何使用COCO数据集,注意事项

COCO数据集可用来训练目标检测&#xff0c;分类&#xff0c;实例分割等。 下面简单说下如何使用这个数据集&#xff0c; 数据集下载可用如下的代码进行&#xff0c;以2017为例。 # Download the image data. cd ./images echo "Downloading MSCOCO train images ...&quo…...

金三银四跳槽季,JAVA面试撸题就来【笑小枫】微信小程序吧~

JAVA面试撸题就来【笑小枫】微信小程序啦~ 疫情已过&#xff0c;金三银四即将到来&#xff0c;小伙伴们是否有跳槽的打算呢&#xff1f;不管有没有&#xff0c;技术不能丢&#xff0c;让我们一起来撸题吧。 博主最近整理了一批面试题&#xff0c;包括JAVA基础、多线程与锁、Red…...

分享115个HTML电子商务模板,总有一款适合您

分享115个HTML电子商务模板&#xff0c;总有一款适合您 115个HTML电子商务模板下载链接&#xff1a;https://pan.baidu.com/s/158y3jP0tv7ZikxNOBMKsSg?pwdt970 提取码&#xff1a;t970 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 import os import shuti…...

Python 字符串

字符串是 Python 中最常用的数据类型。我们可以使用引号 ( 或 " ) 来创建字符串。创建字符串很简单&#xff0c;只要为变量分配一个值即可。例如&#xff1a;var1 Hello World!var2 "Python Runoob"Python 访问字符串中的值Python 不支持单字符类型&#xff…...

总线定义,车载总线:车载etherNet or CAN

总线的定义总线是连接多个设备或者接入点的数据传输通路。这里面的关键词是多个设备或者接入点&#xff0c;所以不要过于局限的看待总线。根据互联的设备/接入点不同&#xff0c;传输的数据带宽&#xff0c;速率&#xff0c;距离不同和应用场景的不同都可能有不同的总线。不同的…...

Python(for和while)循环嵌套及用法

Python 不仅支持 if 语句相互嵌套&#xff0c;while 和 for 循环结构也支持嵌套。 所谓嵌套&#xff08;Nest&#xff09;&#xff0c;就是一条语句里面还有另一条语句&#xff0c;例如 for 里面还有 for&#xff0c;while 里面还有 while&#xff0c;甚至 while 中有 for 或者…...

6万字电力行业系统解决方案光伏电站综合安防系统解决方案

【版权声明】本资料来源网络&#xff0c;知识分享&#xff0c;仅供个人学习&#xff0c;请勿商用。【侵删致歉】如有侵权请联系小编&#xff0c;将在收到信息后第一时间删除&#xff01;完整资料领取见文末&#xff0c;部分资料内容&#xff1a; 目录 第 一 章背景与需求 1.1行…...

[Android Studio]Android 数据存储--SQLite数据库存储

&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Android Debug&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Topic 发布安卓学习过程中遇到问题解决过程&#xff0c;希望我的解决方案可以对小伙伴们有帮助。 &#x1f4cb;笔记目…...

学校节能降耗减排方案——能耗监管平台的建设及效果剖析

摘要&#xff1a;作为崭新的校园能耗管理手段&#xff0c;能耗监测平台以传统管理方式无法企及的优势有力地提升了高校能源管理工作的水平&#xff0e;从而受到了相关管理者的青睐。本文梳理总结了高校能耗监测平台的基本组成和优势特点&#xff0c;同时对能耗平台建设和使用中…...

探索IP地址的应用

无论是互联网行业还是传统行业都会用到网络&#xff0c;作为企业如何维护网络安全&#xff0c;保障网站不被攻击&#xff0c;数据不被泄露等。这个时候我们就会通查询IP归属地&#xff0c;辅助企业解决安全问题。下面介绍一下ip归属地在各行业的具体应用。1.网安行业应用一&…...

点赞破万!阿里面试官总结的2022最新1685页Java面试宝典太全了

程序员入职企业的难度也在持续加大&#xff0c;如何顺利通过面试成为了大家所关心的话题。针对这些人群的需求&#xff0c;小编从阿里找来一份让大家在求职过程中旗开得胜&#xff01;是从什么时候开始准备的&#xff1f;大概的我已经记不清了&#xff0c;可能是 4 月份左右开始…...

项目搭建规范

一. 代码规范 1.1. 集成editorconfig配置 EditorConfig 有助于为不同 IDE 编辑器上处理同一项目的多个开发人员维护一致的编码风格。 # http://editorconfig.org root true [*] # 表示所有文件适用 charset utf-8 # 设置文件字符集为 utf-8 indent_style space # 缩进…...

8.Docker Machine

Docker Machine Docker Machine是Docker官方编排&#xff08;Orchestration&#xff09;项目之一&#xff0c;负责在多种平台上快速安装 Docker 环境。 Docker Machine项目基于Go语言实现&#xff0c;目前在Github上进行维护。 Docker Machine是 Docker 官方提供的一个工具&…...

如何配合使用ESLINT 和 PRETTIER

各自的作用 eslint&#xff1a;静态分析语法错误prettier&#xff1a;代码格式化工具&#xff08;需要在IDE中安装prettier的插件&#xff09; 使用方法&#xff1a; 安装 npm install eslint --save-dev // 创建 .eslintrc.json 文件 npx eslint --init npm install eslint-…...

学英语的优势已来,抓住这个机会

文 / 冰雪&#xff08;微信公众号&#xff1a;王不留&#xff09; ChatGPT大火&#xff0c;国外的商业价值还没找到&#xff0c;咱们这边已经开始变现了。谷雨小姐姐昨天在”一起学英语”微信群发了一张“收割韭菜”的文案截图。 299入社群&#xff0c;服务内容为&#xff1a;免…...

基于微信小程序云开发实现考研题库小程序项目(完整版)

今天手把手的带大家实现一款答题类的题库小程序&#xff0c;如果着急的话&#xff0c;可以直接去看文末源码.下载与项目部署。考研题库小程序云开发实战&#xff0c;完整版提供给大家学习。题库小程序&#xff0c;基于云开发的微信答题小程序&#xff0c;软件架构是微信原生小程…...

AI一点通:使用 ColumnTransformer 转换 Pandas DataFrame 的一个或多个列

在处理表格数据时&#xff0c;常常需要对一个或多个列进行转换以使它们更适合于分析或建模。在许多情况下&#xff0c;可以使用 Pandas 库轻松完成这些转换。然而&#xff0c;在处理大型数据集或构建机器学习管道时&#xff0c;使用 scikit-learn 的 ColumnTransformer 类来将转…...

做网站导航怎么调整大小/南京seo按天计费

1. 电商网站里都少不了减库存的操作&#xff0c;当然什么时候减各有各的处理&#xff0c;有的下单就减&#xff0c;有的发起支付就减少&#xff0c;有的支付完成后回调时减。对于这个减库存的时间点&#xff0c;因产品而已&#xff0c;比如秒杀类必须下单就减。 减库存时就不可…...

工信部网站备案系统/网站推广的渠道有

冯.诺依曼体系结构,个人的理解:物理电学补充:所有的物质,是由分子或原子组成的。分子是能保持物质化学性质不变的最小微粒。分子是由原子组成的&#xff0c;可分为单原子分子和多原子分子。原子的原子核式结构&#xff1a;原子的中心为原子核&#xff0c;电子在不同轨道上绕着原…...

遵义网站建设厂家/竞价系统

<wbr> 1、什么是const?<br> 常类型是指使用类型修饰符const说明的类型&#xff0c;常类型的变量或对象的值是不能被更新的。&#xff08;当然&#xff0c;我们可以偷梁换柱进行更新&#xff1a;&#xff09;</wbr> 2、为什么引入const&#xff1f;   cons…...

知名外贸网站建设公司/网站快速上排名方法

一个电子商务网站&#xff0c;是依据某中盈利目的而建立。任何网站&#xff0c;建立后要做的第一件事情即是将网站推广出去&#xff0c;为人所知。通常采用的办法&#xff0c;一是开展线下推广&#xff0c;二是开展线上推广。 线下推广&#xff0c;一般是采取传统市场营销采用的…...

徐州专业网站建设公司/营销型网站外包

前言递归是一种非常重要的算法思想&#xff0c;无论你是前端开发&#xff0c;还是后端开发&#xff0c;都需要掌握它。在日常工作中&#xff0c;统计文件夹大小&#xff0c;解析xml文件等等&#xff0c;都需要用到递归算法。它太基础太重要了&#xff0c;这也是为什么面试的时候…...

360建筑网官方网站/域名查询系统

终极版C语言&#xff08;十六&#xff09;—3380人已学习 课程介绍 整个教程以 C 语言为核心&#xff0c;完整精彩的演练了数据结构、算法、设计模式、数据库、大数据高并发检索、文件重定向、多线程同步、进程通讯、黑客劫持技术、网络安全、加密解密&#xff0c;以及各种精…...