现代嵌入式开发设计的功能规格丰富,并且必须在成本,性能等方面遵守多项其他要求,因此它们本质上是复杂的。因此,在设计大型系统时,我们需要方法和框架来帮助指导我们的决策。
在这个由三部分组成的系列的第一部分中,我将尝试回答以下问题: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。并行工程工作包括以下几个元素:
跨职能团队 包括该过程中涉及各个学科的成员,包括制造,硬件和软件设计,市场营销等。
并行产品实现 过程活动是并行工程的核心。一次执行多项操作(例如同时设计各种子系统)对于减少设计时间至关重要。
增量信息共享 和使用有助于最大程度地减少同时实现产品导致意外的机会。一旦有新信息可用,就将其共享并集成到设计中。跨职能团队对于及时有效地共享信息非常重要。