嵌入式应用选择正确的系统设计方法:第一部分

news2024/11/16 5:44:11

现代嵌入式开发设计的功能规格丰富,并且必须在成本,性能等方面遵守多项其他要求,因此它们本质上是复杂的。因此,在设计大型系统时,我们需要方法和框架来帮助指导我们的决策。

在这个由三部分组成的系列的第一部分中,我将尝试回答以下问题:1)哪些系统设计方法很重要,以及2)使用它们的嵌入式开发人员有什么好处。

在 第2部分中,我研究(1)需求分析,它捕获了关于什么系统的非正式描述,以及(2) 用于更正式地指定系统功能以及如何将这些规范转变为体系结构设计的技术。第3部分介绍了质量保证(QA)主题,必须在整个设计过程中予以考虑,以确保高质量的设计。

为什么需要设计方法?领取嵌入式物联网学习资料

流程很重要,因为没有流程,我们将无法可靠地交付我们要创建的产品。考虑构建某些东西所需的步骤顺序似乎是多余的。但是事实是,每个人都有自己的设计过程,即使他们没有明确表述。

如果您要自己在地下室设计嵌入式系统,那么有自己的工作习惯就可以了。但是,当几个人一起完成一个项目时,他们需要就谁将做事以及如何完成工作达成共识。

当人们一起工作时,对过程保持清晰是很重要的。因此,由于许多嵌入式计算系统过于复杂,无法由一个人进行设计和构建,因此我们必须考虑设计过程。

设计过程的明显目标是创建一种可以做有用的事情的产品。产品的典型规格包括功能(例如,手机),制造成本(零售价必须低于200美元),性能(必须在3秒钟内上电),功耗(必须使用两节AA电池运行12小时)或其他属性。当然,设计过程除功能,性能和功能外还具有其他重要目标。以下总结了其中三个目标。

上市时间: 客户始终希望获得新功能。首先出现的产品可以赢得市场,甚至可以为下一代产品设定客户偏好。某些产品的盈利市场寿命为3英寸6个月-如果您迟到了3个月,您将永远无法赚钱。

在某些类别中,竞争是违规的,而不仅仅是竞争者。例如,计算器在秋季开学前就大量出售。如果您错过了市场窗口,则必须等待一年才能进入另一个销售季节。

设计成本: 许多消费产品对成本非常敏感。工业购买者也越来越关注成本。系统设计成本与制造成本截然不同-工程师的薪水,设计中使用的计算机等成本必须分散在所售单元中。

在某些情况下,只能构建一个嵌入式系统的一个或几个副本,因此设计成本可能会占据制造成本的主导地位。当上市时间压力导致团队规模扩大时,设计成本对于大批量消费类设备也很重要。

质量: 客户不仅希望其产品便宜又便宜,他们也希望它们是正确的。解决劣质产品的设计方法很快将被迫退出市场。从设计工作的开始就必须明确指出正确性,可靠性和可用性,以便最终获得高质量的产品。

流程会随着时间而发展。它们由于外力和内力而改变。客户可能会更改,需求更改,产品更改以及可用组件也会更改。在内部,人们学习如何做得更好,人们继续进行其他项目,其他人进来,并通过买卖公司来合并和塑造公司文化。

软件工程师花费了大量时间来考虑软件设计过程。这种想法大部分是由大型机软件(例如数据库)激发的。但是嵌入式开发程序也激发了有关软件设计过程的一些重要思想。

好的方法对于构建正常运行的系统至关重要。向用户提供越野车系统总是会引起不满。但是在某些应用中,例如医疗和汽车系统,错误会造成严重的安全问题,从而危及用户生命。

我将在本系列的第3部分中更详细地讨论质量。但是,作为引言,下面的应用示例 描述了导致无人火星空间探测器丢失的问题。

应用示例:火星气候观测者的损失。 1999年9月,专为研究火星而设计的美国无人飞行器火星气候观察员失踪了,它很可能爆炸了,因为它靠近火星后在火星大气层中升温。

IEEE Spectrum和特约编辑詹姆斯·奥伯格(James Oberg)的分析表明,由于一系列问题,该航天器太靠近火星了。

从嵌入式系统的角度来看,最好将第一个问题归类为需求问题。在洛克希德·马丁公司制造航天器的承包商计算了数值,供喷气推进实验室(JPL)的飞行控制器使用。JPL没有指定要使用的物理单位,但他们希望它们以牛顿为单位。

洛克希德·马丁公司的工程师以磅力为单位返回了值。这种差异导致轨迹调整比原先的预期大4.45倍。

该错误不是由软件配置过程捕获的,也不是由手动检查捕获的。尽管担心航天器的轨迹,但并没有及时发现航天器位置计算中的错误。

确定设计流程的有用性领取嵌入式物联网学习资料

设计流程是设计过程中应遵循的一系列步骤。其中一些步骤可以由工具(例如编译器或CAD系统)执行;其他步骤可以手动执行。在本节中,我们研究设计流程的基本特征。

下面的图9.1 显示了瀑布模型,它是为软件开发过程提出的第一个模型。瀑布式开发模型包括五个主要阶段:需求分析确定系统的基本特征;架构设计将功能分解为主要组件;编码实现了各个部分并将它们集成在一起;测试发现错误;和维护需要现场部署,错误修复和升级。

图9.1:软件开发的瀑布模型。

瀑布模型之所以得名,是因为它的工作和信息从较高的抽象层次到更详细的设计步骤(只有有限的反馈到下一个较高的抽象层次)大量流动。

尽管自上而下的设计是理想的,因为它暗示了在早期设计阶段就很好地实现了实现,但是大多数设计显然不是那么自上而下的。大多数设计项目都需要进行实验和进行更改,这些更改需要自下而上的反馈。结果,今天的瀑布模型被认为是不现实的设计过程。

但是,重要的是要知道瀑布模型将能够理解什么,以及其他人对该模型如何反应。下面的图9.2 说明了称为螺旋模型的另一种软件开发模型。瀑布模型假定系统是整体构建一次的,而螺旋模型假定将要构建系统的多个版本。

图9.2:软件设计的螺旋模型。

早期的系统将是简单的模型,可帮助设计人员直观理解并积累系统经验。随着设计的进行,将构建更复杂的系统。

在设计的每个级别,设计人员都要经过需求,构造和测试阶段。在以后的阶段,当构建更完整的系统版本时,每个阶段都需要更多的工作,从而扩大了设计螺旋。这种连续改进的方法可以帮助设计人员通过一系列设计周期来了解他们正在使用的系统。

螺旋顶部的第一个循环非常小且很短,而螺旋底部的最终循环增加了从螺旋的早期循环中学到的细节。螺旋模型比瀑布模型更现实,因为通常需要多次迭代才能添加足够的细节来完成设计。但是,当设计时间成为主要要求时,具有太多螺旋的螺旋方法可能会花费太长时间。

下图9.3 显示了连续的改进设计方法。用这种方法,系统要构建几次。将第一个系统用作粗糙的原型,并进一步完善该系统的后续模型。

当您相对不熟悉要为其构建系统的应用程序域时,此方法才有意义。通过构建几个日益复杂的系统来完善系统,使您可以测试体系结构和设计技术。

图9.3:连续的改进开发模型。

各种迭代也可能仅部分完成;例如,仅通过详细的设计阶段继续执行初始系统可能会教给您足够的知识,以帮助您避免在第二次设计迭代(直到完成)中出现许多错误。

嵌入式计算机系统通常涉及硬件和软件的设计。即使您不是在设计电路板,也可能会选择电路板并将多个硬件组件插入在一起以及编写代码。

下面的图9.4 显示了组合的硬件/软件项目的设计方法。诸如规范和体系结构之类的前端活动同时考虑了硬件和软件方面。同样,后端集成和测试会考虑整个系统。

但是,在中间阶段,硬件和软件组件的开发可以相对独立地进行-虽然其中一个的测试需要另一个的存根,但是大多数硬件和软件的工作可以相对独立地进行。

图9.4:一种简单的硬件/软件设计方法。

实际上,许多复杂的嵌入式系统本身都是由较小的设计构建的。完整的系统可能需要设计重要的软件组件,自定义逻辑等,而这些又可以从需要设计的较小组件中构建。

设计流程遵循系统中的抽象级别,从最抽象的完整系统设计流程到单个组件的设计流程。这些复杂系统的设计流程类似于下面的图9.5所示。

图9.5:嵌入式系统的分层设计流程。

流程的实施阶段本身就是从规范到测试的完整流程。在如此大的项目中,每个流程可能将由单独的人员或团队来处理。团队必须依靠彼此的结果。

组件团队从处理更高级别抽象的团队中获取他们的要求,而更高级别的团队则依赖于组件团队执行的设计和测试的质量。在这样的大型项目中,良好的沟通至关重要。

当与许多人一起设计大型系统时,很容易失去对整个设计流程的了解,并使每个设计师对他或她在设计流程中的角色有一个狭窄的认识。并行工程尝试采用更广泛的方法并优化总流量。

减少设计时间是并行工程的重要目标,但是它可以帮助贯穿设计流程的设计的任何方面,例如可靠性,性能,功耗等。

它试图消除“跨墙”设计步骤,在该步骤中,一位设计师执行一项隔离的任务,然后将结果扔给下一位设计师,而两者之间几乎没有交互。

特别是,要从并行工程中获得最大收益,通常需要消除设计和制造之间的隔wall。并行工程工作包括以下几个元素:

跨职能团队 包括该过程中涉及各个学科的成员,包括制造,硬件和软件设计,市场营销等。

并行产品实现 过程活动是并行工程的核心。一次执行多项操作(例如同时设计各种子系统)对于减少设计时间至关重要。

增量信息共享 和使用有助于最大程度地减少同时实现产品导致意外的机会。一旦有新信息可用,就将其共享并集成到设计中。跨职能团队对于及时有效地共享信息非常重要。

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

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

相关文章

2023年国赛如何运行脚本文件

1、设备脚本文件运行: 链接:https://pan.baidu.com/s/1xqLvO0k7LIJVLkzcL0KohQ?pwdwgzj 提取码:wgzj 二维码 2、linux虚拟机脚本文件运行 链接:https://pan.baidu.com/s/1vzRt01AT4u77ynel1KWCaw?pwdwgzj 提取码&#xff1…

马应龙-600993 三季报分析(20231030)

马应龙-600993 基本面分析 基本情况 公司名称:马应龙药业集团股份有限公司 A股简称:马应龙 成立日期:1994-05-09 上市日期:2004-05-17 所属行业:医药制造业 周期性:0 主营业务:主要从事中西药制…

正则表达式引擎比较(翻译自:A comparison of regex engines)

原文: A comparison of regex engines – Rust Leipzig 引言 正则表达式(或简称regex)通常用于模式搜索算法。 有许多不同的正则表达式引擎提供不同的表达式支持、性能约束和语言绑定。 基于 John Maddock 之前的工作 (regex comparison)和…

C++前缀和算法的应用:统计中位数为 K 的子数组

本文涉及的基础知识点 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 题目 给你一个长度为 n 的数组 nums ,该数组由从 1 到 n 的 不同 整数组成。另给你一个正整数 k 。 统计并返回 nums 中的 中位数 等于 k 的非空子数组的…

【用Percona Toolkit给mysql大表在不锁表的情况下建索引】

用Percona Toolkit给mysql大表在不锁表的情况下建索引 安装Percona Toolkit建立索引 安装Percona Toolkit 共分为两步骤: 配置仓库 安装文档1 安装 安装文档2 建立索引 由于mysql8默认使用的是caching_sha2_password,认证方式,而Percona…

javaEE -11(10000字HTML入门级教程)

一&#xff1a; HTML HTML 代码是由 “标签” 构成的. 例如&#xff1a; <body>hello</body>标签名 (body) 放到 < > 中大部分标签成对出现. 为开始标签, 为结束标签.少数标签只有开始标签, 称为 “单标签”.开始标签和结束标签之间, 写的是标签的内容. (h…

软件工程:小组开发过程技术(VS VSS UNIX C++)

&#xff08;注&#xff1a;这个东西是2007年写的&#xff0c;算是个缅怀&#xff0c;或是个吐槽。所有注都是本次发布新加的。&#xff09; 简介 本文讲述完全没有软件工程经验的软件小组如何借助VS VSS等工具为UNIX开发C程序&#xff0c;实现在小组规模的初级开发过程。这不…

【Linux】——使用yum进行软件安装和卸载Win和Linux文件交互

个人主页点击直达&#xff1a;小白不是程序媛 Linux系列专栏&#xff1a;Linux被操作记 目录 前言&#xff1a; Linux软件包管理器yum 什么是软件包 ​编辑软件查找 如何安装软件 如何卸载软件 lrzsz的使用 将Windows的文件传送到Linux 将Linux的文件传送到Windows …

Linux作业ssh双向免密登陆

目录 步骤一&#xff1a;双方都生成非对称密钥 步骤二&#xff1a;将生成的id_rsa.pub文件发送到对端 步骤三&#xff1a;检测 步骤一&#xff1a;双方都生成非对称密钥 [rootserver ~]# ssh-keygen -t rsa [rootnode1 ~]# ssh-keygen -t rsa 查看是否生成&#xff1a; 步…

torch.nn中有哪些损失函数?

在PyTorch库的torch.nn模块中&#xff0c;提供了许多预定义的损失函数&#xff0c;用于不同的机器学习任务。以下是一些常见的损失函数&#xff1a; MSELoss&#xff08;均方误差损失&#xff09;: 常用于回归问题&#xff0c;计算预测值与真实值之间的平均平方误差。 import…

【AcWing】1.1.3二分搜索

一、二分搜索 1、查找数的范围 原题链接  这道题看似是二分搜索的题目&#xff0c;实则就是二分搜索。与一般的搜索不同的是&#xff0c;若查找元素重复&#xff0c;则分别返回重复元素的左端下标和右端下标&#xff0c;若不存在则返回“-1 -1。我们常用的二分搜索是返回的…

在Vue.js中,什么是单文件组件(Single File Component)?它的结构是怎样的?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

基于物联网、大数据、云计算、人工智能等技术的智慧工地源码(Java+Spring Cloud +UniApp +MySql)

智慧工地是指利用物联网、大数据、云计算、人工智能等技术手段&#xff0c;为建筑施工现场提供智能硬件及物联网平台的解决方案&#xff0c;实现建筑工地的实时化、可视化、多元化、智慧化、便捷化。智慧工地的建设目标是实现全天候的管理监控&#xff0c;提高施工效率和质量&a…

【机器学习合集】模型设计之分组网络 ->(个人学习记录笔记)

文章目录 分组网络1. 什么是分组网络1.1 卷积拆分的使用1.2 通道分离卷积的来源1.3 GoogLeNet/Inception1.4 从Inception到Xception(extreme inception)1.5 通道分组卷积模型基准MobileNet 2. 不同通道分组策略2.1 打乱重组的分组2.2 多尺度卷积核分组2.3 多分辨率卷积分组2.4 …

《云计算白皮书(2023年)》丨三叠云

✦ ✦✦ ✦✦ ✦✦ ✦ 这是中国信息通信研究院第九次发布云计算白皮书。本次白皮书聚焦过去一年多来云计算产业的新发展新变化&#xff0c;总结梳理国内外云计算政策、市场、技术、应用等方面的发展特点&#xff0c;并对未来发展进行展望。【目 录】 一、全球云计算发展概述…

【UnityGUI】UGUI的六大组件和三大基础控件详解

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;UI_…

vue中使用deck.gl

deck,gl网址&#xff1a;Home | deck.gl 因为deck.gl是国外的技术&#xff0c;国外最流行的框架是react&#xff0c;所以deck.gl有为react提供的地图组件&#xff0c;没有为vue提供&#xff0c;并且还需要翻墙。所以想用vue使用这个还是有一定难度的。 除了用到deck.gl之外还…

【docker】数据卷:docker run和k8s同步宿主机与容器文件的两种方法

前言 Docker容器卷是一个特殊目录&#xff0c;它存放在宿主机的文件系统中&#xff0c;可供一个或多个容器使用。这种卷绕过了联合文件系统&#xff08;Union File System&#xff09;&#xff0c;可以提供很多有用的特性。例如&#xff0c;对数据卷的修改会立即生效&#xff…

如何用ATECLOUD进行芯片各项性能指标的测试?

功能测试&#xff1a;主要涵盖输入测试向量和响应的一致性。功能测试可以覆盖极高比例的逻辑电路的失效模型。 Parametric测试&#xff1a;有DC和AC测试。DC主要是短路(short)、开路(open)、最大电流(maximmum current)、漏电流(leakage)、输出驱动电流(output drivel current…

MSQL系列(十) Mysql实战-Join驱动表和被驱动表如何区分

Mysql实战-Join驱动表和被驱动表如何区分 前面我们讲解了Mysql的查询连接Join的算法原理, 我发现大家都知道小表驱动大表,要让小表作为驱动表, 现在有2个问题 查询多表, 到底哪个是驱动表?哪个是被驱动表, 如何区分?索引如何优化,到底是加在驱动表上,还是被驱动表上? &…