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

news2024/11/13 9:31:41

在设计嵌入式系统之前,我们需要知道我们在设计什么。在这种情况下,术语“要求”和“规范”以多种方式使用-有些人将它们用作同义词,而另一些人将它们用作不同的阶段。它们在这里用来表示设计过程中相关但截然不同的步骤。

需求 是对客户需求的非正式描述,你而规格 则是可用于创建体系结构的系统的更详细,精确和一致的描述。但是,要求和规范都针对系统的外部行为,而不是其内部结构。

创建需求文档的总体目标是客户与设计人员之间的有效沟通。设计师应该知道他们期望为客户设计什么;客户,无论是事先知道的还是由营销代表的,都应该了解他们会得到什么。

我们有两种类型的需求:功能需求和非功能需求。功能需求说明了系统必须执行的操作,例如计算FFT。非功能性需求可以是许多其他属性,包括物理尺寸,成本,功耗,设计时间,可靠性等。一组好的要求应该满足几个测试:

正确性: 需求不应错误地描述客户的需求。正确性的一部分是避免过度需求-需求不应添加不必要的条件。

明确性: 需求文档应清晰且仅具有一种简单的语言解释。嵌入式物联网学习路线领取

完整性: 应包括所有要求。

可验证性: 应该有一种经济有效的方法来确保最终产品中的每个要求都得到满足。例如,如果没有就吸引力的定义达成一致,就很难验证系统软件包“有吸引力”的要求。

一致性: 一个要求不应与另一个要求相矛盾。

可修改性: 应该对需求文档进行结构化,以便可以对其进行修改以满足不断变化的需求,而又不会失去一致性,可验证性等。

可追溯性: 每个需求应通过以下方式可追溯:

1)我们应该能够从需求追溯到知道为什么每个需求存在的原因。

2)我们还应该能够追溯需求之前创建的文档(例如,市场备忘录),以了解它们与最终需求的关系。

3)我们应该能够向前了解如何在实施中满足每个要求。

4)我们还应该能够从实现中追溯,以了解他们打算满足哪些要求。

您如何确定需求?如果该产品是一系列产品的延续,那么许多要求都是众所周知的。但是,即使是最适度的升级,与客户交谈也是很有价值的。在大型公司中,营销或销售部门可能会执行大部分询问客户需求的工作,但是数量惊人的公司却让设计师直接与客户对话。

直接的客户联系为设计人员提供了客户所说的未经过滤的样本。它还有助于建立与客户的同理心,这通常会在更干净,更易于使用的客户界面中得到回报。与客户交谈还可能包括进行调查,组织焦点小组或要求选定的客户测试模型或原型。

开发更正式的系统规范

嵌入式开发工程师可以使用许多先进的技术来制定正式的系统规范。它们分为两大类:(1) 嵌入式开发工程师熟悉的面向控制的规范语言,例如SDL语言,状态图和AND / OR表;和(2) 的高级系统规范的方法,如那些在安全关键系统设计中使用。

通信行业开发了一种用于指定通信协议,电话系统等的状态机规范语言,即用于在UML中指定控件的SDL语言。

如在示出的下面的图9.6,SDL规格包括状态,动作,和状态之间既有条件和无条件转移。由于状态之间的转换是由内部和外部事件引起的,所以SDL是面向事件的状态机模型。

图9.6:SDL规范语言

可以使用其他技术来消除混乱并阐明基于状态的规范的重要结构。该状态图 是用于基于状态的说明书中一个众所周知的技术,该技术引入了一些重要的概念。

Statechart表示法使用事件驱动模型。状态图允许将状态分组在一起以显示通用功能。有两个基本分组:OR和AND。下面的图9.7 通过比较传统的状态转换图和通过OR状态描述的Statechart来显示OR状态的示例。

图9.7:Statecharts中的OR状态。

状态机指定当它们接收到输入i2时,它们会从s1,s2 或s3中的任何一个进入状态s4 。Statechart通过在s1,s2 和s3周围绘制OR状态来表示这种共性(OR状态 的名称在该状态顶部的小框中给出)。

出OR状态的单个过渡S123 指定对机器进入状态S4 ,当它接收到I2 的输入,而在包含在任何状态S123 .the或状态仍然允许其成员状态之间有趣的过渡。进入s123的方式有多种 (通过s1或s2),或者 在OR状态内的状态之间可能存在转换(例如从s1 到s3 或s2 到s3).OR状态只是用于指定一些与这些状态有关的转换。

下面的图9.8 显示了用Statechart表示法指定的AND状态与传统状态机模型中的等效状态相比的示例。在传统模型中,状态之间存在许多转换。在该状态集群中也有一个入口点,在该集群之外有一个出口过渡点。

图9.8:状态图中的AND状态

在Statechart中,AND状态sab 分解为两个部分sa 和sb。 当机器进入“与”状态时,它同时驻留在 组件sa的状态s1 和 组件sb的状态s3中。我们可以认为系统的状态是多维的。当它进入sab时,要了解机器的完整状态,需要检查sa 和sb。

传统状态机中的状态名称揭示了它们与AND状态组件的关系。因此,状态s1-3 对应于状态图机器,其sa 分量在s1中 ,而sb 分量在s3中,依此类推。 只有在传统规范中,我们处于状态s2-4 并接收输入r时,我们才能退出此状态集群以进入状态s5。

在AND状态,这对应于SA 在状态S2,SB 处于状态S4,且机器接收,而在此组合状态的R输入。尽管传统模型和Statechart模型描述了相同的行为,但是每个组件只有两个状态,并且这些状态之间的关系要简单得多。

另一种状态机格式,AND / OR表 ,可用于描述状态之间的相似关系。下面的图9.9中显示了一个示例AND / OR表及其描述的布尔表达式。

图9.9:AND / OR表

AND / OR表中的行在表达式中标有基本变量。每列对应于表达式中的AND项。例如,AND项(cond2 而不是cond3)在第二列中用T 表示cond2,F 表示cond3,而破折号(忽略)表示cond1。这与以下事实相对应:cond2 必须为T,cond3 F 为AND项为真。嵌入式物联网学习路线领取

我们使用该表来评估系统中是否存在给定条件。将变量的当前状态与表元素进行比较。如果所有当前变量值均与该列中给出的要求相对应,则该列的值为true。

如果任一列的计算结果为true,则表的表达式的计算结果为true,就像我们期望的AND / OR表达式一样。此表示法与Statecharts之间最重要的区别在于,表中明确表示了“不在乎”,发现这对识别规范表中的问题有很大帮助。

更高级的规范

高级规范方法的优秀示例是为设计用于飞机的安全关键系统而开发的。这种规范的典型代表是为飞机的防撞系统TCAS II(交通警报和防撞系统)开发的规范。

为确保此系统的正确性和安全性而开发的规范技术也可以用于许多应用程序中,尤其是在其中许多复杂性进入控制结构的系统中。

根据各种信息,飞机中的TCAS单元会跟踪附近其他飞机的位置。如果TCAS判定可能发生空中相撞,它会使用音频命令来建议逃避行动-例如,预先录制的声音可能会警告“下降!下降!” 如果TCAS认为上方的飞机构成威胁,并且下方有回旋的余地。

TCAS实时做出复杂的决策,并且显然对安全至关重要。一方面,它必须检测到尽可能多的潜在碰撞事件(在其传感器等范围内)。另一方面,它必须生成尽可能少的错误警报,因为它建议的极端操作本身可能具有危险。

我不会在这里介绍整个规范,而足以提供其风味。TCAS II规范是用RSML语言编写的。它使用状态图表示法的修改版本来指定状态,其中状态的输入和输出是明确的。下图说明了该符号。

他们还使用转换总线来显示所有(或几乎所有)状态之间都存在转换的状态集。在以下示例中,存在从a,b,c或d到任何其他状态的转换:嵌入式物联网学习路线领取

CAS的顶级描述如下所示:

此图指定系统具有“关闭”和“打开”状态。在开机状态下,系统可能处于待机或完全运行模式。在“完全运行”模式下,按照AND状态的规定,三个组件并行运行:本机飞机子系统,一个最多可跟踪其他30架飞机的子系统以及一个最多可跟踪15个模式S的子系统提供雷达信息的地面站。下面显示的是“本机与”状态的规范。

同样,本机的行为是多个子行为的AND组成。Effective-SL和Alt-SL状态是控制系统灵敏度级别(SL)的两种方式,每种状态代表不同的灵敏度级别。

根据与地面的距离和其他因素,需要不同的灵敏度。Alt-Layer状态将垂直空域划分为多个层,该状态跟踪当前层。禁止爬升和禁止下降状态分别用于有选择地禁止爬升(在高海拔地区可能很困难)或下降(在地面附近显然很危险)。

同样,“抑制上升”和“抑制下降”状态可以抑制高速率的上升和下降。由于咨询状态非常复杂,因此此处不显示其详细信息。

将规格和需求转化为设计

到目前为止,我们已经讨论了许多用于制定特定决策的技术。现在,在本节中,我们研究如何掌握整个系统的体系结构。在CRC卡 的方法是众所周知的和有用的方式来帮助分析系统的结构。

它特别适合面向对象的设计,因为它鼓励数据和功能的封装。首字母缩写词CRC表示该方法论试图识别的以下三个主要项目:

类 定义数据和功能的逻辑分组。

职责 描述班级的工作。

协作者 是与给定类一起工作的其他类。

CRC卡之所以得名,是因为该方法是通过人们在索引卡上书写来实践的。(在美国,索引卡的标准尺寸为3英寸乘5英寸,因此这些卡通常称为3 x 5卡。)示例卡如下图9.10所示。

图9.10:CRC卡的布局。

它有空间写下班级名称,职责和合作者以及其他信息。CRC卡方法的本质是让人们在这些卡上书写,谈论它们并更新卡,直到他们对结果满意为止。

这项技术似乎是设计计算机系统的原始方法。但是,它具有几个重要的优点。首先,非计算机人员很容易创建CRC卡。

在系统设计中,获得领域专家(例如,用于汽车电子的汽车设计人员或用于PDA设计的人为因素专家)的建议非常重要。

首先,CRC卡方法非常非正式,不会吓到非计算机专家,并且可以让您捕获他们的输入。其次,它通过鼓励他们一起工作并分析场景来帮助计算机专家。

与CRC卡一起使用的演练过程在确定设计范围和确定对系统哪些部分了解不足方面非常有用。这种非正式的技术对于基于工具的设计和编码很有价值。如果您仍然需要使用工具来帮助您练习CRC方法,可以使用可自动创建CRC卡的软件工程工具。

在研究方法之前,让我们更详细地回顾一下CRC概念。我们熟悉类-它们封装了功能。类可以表示真实世界的对象,也可以描述仅为了帮助体系结构而创建的对象。一个类既具有内部状态又具有功能接口。功能接口描述了类的功能。

责任集是描述该功能接口的非正式方法。职责提供类的接口,而不是其内部实现。但是,与用编程语言描述课程不同,可以用英语(或您喜欢的语言)非正式地描述职责。一个类的协作者只是与之交谈的类,即,使用其功能或调用其以帮助其完成工作的类。

当面向对象的程序员查看CRC卡时,类术语有点误导。在该方法中,实际上使用类的方式更像是OO编程语言中的对象-CRC卡类用于表示系统中的实际角色。但是,在面向对象的设计中,CRC卡类别很容易转换为类别定义。

CRC卡分析由一组人员执行。可以自己使用它,但是该方法的很多好处来自与他人讨论开发类。

在开始该过程之前,应使用图9.10中所示的基本格式创建大量CRC卡。在小组中工作时,您将在这些卡片上书写;您可能会丢弃其中许多内容,并随着系统的发展将其重写。

CRC卡方法是非正式的,但是在使用它来分析系统时,应遵循以下步骤:

1.制定一个初步的班级清单: 写下班级名称,并写下一些有关其作用的文字。类可以表示现实世界的对象或建筑的对象。识别类所属的类别(例如,在实际对象的名称旁边放一个星号)会很有帮助。

每个人都可以负责处理系统的一部分,但是团队成员应在此过程中进行交谈,以确保不会遗漏任何类,并且不会创建重复的类。

2.编写职责和合作者的初始列表: 职责列表有助于更详细地描述班级的工作。协作者列表应基于类之间的明显关系构建。责任和协作者将在以后的阶段中得到完善。

3.创建一些使用场景: 这些场景描述了系统的功能。场景可能始于某种形式的外部刺激,这是识别相关现实对象的重要原因之一。

4.遍历场景: 这是方法论的核心。在演练期间,团队中的每个人代表一个或多个课程。场景应该通过行动来模拟:人们可以喊出他们的班级正在做什么,要求其他班级执行操作,等等。

例如,四处走动以显示数据的传输,可以帮助您可视化系统的操作。在演练期间,到目前为止创建的所有信息都将用于更新和完善,包括类,其职责和协作者以及使用场景。

在此过程中,可以创建,销毁或修改类。您可能还会在方案本身中发现许多漏洞。

5.完善班级,职责和合作者: 其中一些将在演练过程中完成,但在场景之后进行第二遍是个好主意。更长的视角将帮助您对CRC进行更全面的更改牌。

6.添加类关系: 完善CRC卡后,子类和超类关系应变得更清晰,并可以添加到卡中。

拥有CRC卡后,您需要以某种方式使用它们来帮助推动实施。在某些情况下,最好将CRC卡用作实现者的直接来源材料。如果您可以让设计人员参与CRC卡流程,那就尤其如此。

在其他情况下,您可能想用UML或另一种语言对CRC卡分析过程中捕获的信息进行更正式的描述,然后将该正式描述用作系统实现者的设计文档。

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

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

相关文章

Leaflet地图工具

2023 年 5 月 18 日 — Leaflet 1.9.4 正式发布! Leaflet 是一个开源并且对移动端友好的交互式地图 JavaScript 库。 它大小仅仅只有 42 KB of JS, 并且拥有绝大部分开发者所需要的所有地图特性 。 Leaflet 简单、高效并且易用。 它可以高效的运行在桌面和移动平台, 拥有着大…

[Machine Learning][Part 7]神经网络的基本组成结构

这里我们将探索神经元/单元和层的内部工作原理。特别是,与之前学习的回归/线性模型和逻辑模型进行比较。最后接介绍tensorflow以及如何利用tensorflow来实现这些模型。 神经网络和大脑的神经元工作原理类似,但是比大脑的工作原理要简单的多。大脑中神经元的工作原理…

Ajax学习笔记第6天--COOKIE

放弃该放弃的是无奈,放弃不该放弃的是无能,不放弃该放弃的是无知,不放弃不该放弃的是执着! 【1. cookie】 1.Cookie机制 而Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与…

python爬虫,如何在代理的IP被封后立刻换下一个IP继续任务?

前言 在实际的爬虫应用中,爬虫程序经常会通过代理服务器来进行网络访问,以避免访问过于频繁而受到网站服务器的限制。但是,代理服务器的IP地址也可能被目标网站限制,导致无法正常访问。这时候,我们需要在代理IP被封后…

聚观早报 |华为nova 11 SE登场;vivo Y100正式发布

【聚观365】10月31日消息 华为nova 11 SE登场 vivo Y100正式发布 PTC Arena落地中国 2023财年苹果印度业务营收 iQOO 12外观设计揭晓 华为nova 11 SE登场 半年前,华为发布了nova 11系列手机,以“敢拍,敢出色”为宣传口号,继…

Variations-of-SFANet-for-Crowd-Counting代码复现

前文对Variations-of-SFANet-for-Crowd-Counting做了一点基础梳理,并对开源框架的可视化代码进行了验证,链接如下: Variations-of-SFANet-for-Crowd-Counting记录-CSDN博客 Variations-of-SFANet-for-Crowd-Counting可视化代码-CSDN博客 这…

数字时代新趋势:TikTok算法与海外网红营销的融合策略

在当今数字化时代,社交媒体已经成为品牌推广和市场营销的重要渠道。TikTok作为全球范围内最受欢迎的短视频平台之一,以其独特的算法和用户参与度,正日益成为海外网红营销的热门选择。本文Nox聚星将和大家探讨TikTok算法和海外网红营销之间的融…

五种UI设计师的必备界面设计工具,干货来袭!

工具的重要性对设计师来说是不言而喻的。任何想法都需要通过工具来实现。要成为一名优秀的UI设计师,你需要掌握更多的技能来增强你的竞争力。同时,我们也给那些想成为UI设计师的朋友一些工具建议。接下来,让我们来看看那些UI设计师需要掌握的…

AUTOSAR CAN协议栈架构总览介绍

Classic AUTOSAR层级架构简介 如下图是Classic AUTOSAR层级架构图,每个层主要功能如下 微控制器抽象层:使上层软件和微处理器型号无关,包含MCU中内部外设的驱动以及MCU内存映射的外部设备的驱动ECU抽象层:使上层软件和ECU硬件设计无关,包含ECU板上外部设备的驱动以及内部…

已解决WARNING: You are using pip version 20.1.1:however,version 22.3.1 is available.

成功解决(pip提示升级):已解决WARNING: You are using pip version 20.1.1:however,version 22.3.1 is available. You should consider upgrading via the ‘e: \python\python.exe -m pip install --upgrade pip’ c…

2023年【低压电工】作业考试题库及低压电工操作证考试

题库来源:安全生产模拟考试一点通公众号小程序 低压电工作业考试题库参考答案及低压电工考试试题解析是安全生产模拟考试一点通题库老师及低压电工操作证已考过的学员汇总,相对有效帮助低压电工操作证考试学员顺利通过考试。 1、【单选题】()仪表由固定…

java数据机构.冒泡排序,选择排序 插入排序 递归算法,递归求阶乘,快速排序

排序算法 冒泡排序选择排序插入排序递归算法递归求1~100的和递归求阶乘 快速排序总结 冒泡排序 相邻两个元素比较,大的放右边,小的放左边 第一轮循环结束最大值已经找到,在数组最右边(归为算法) 第二轮在剩余的元素比较找到次大值,第二轮可以少循环一次 如果有n个数据,总共我们…

第18期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练 Transformer(GPT)、人工智能生成内容(AIGC)以及大型语言模型(LLM)等安全领域应用的知识。在这里,您可以…

微信小程序怎么制作?【小程序开发平台教学】

随着移动互联网的快速发展,微信小程序已经成为了人们日常生活中不可或缺的一部分。从购物、支付、出行到社交、娱乐、教育,小程序几乎涵盖了我们生活的方方面面。那么,对于有营销需求的企业商家来说,如何制作一个自己的微信小程序…

wow这么洋气的羽绒服,看起来太暖和了吧

超足充绒量+杜邦三防工艺 高立领连帽设计+腰部抽绳调节 独特压线设计+实用大口袋 洋气又实用的一款羽绒服!!

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

文章目录 模型设计之残差网络1. 什么是残差结构1.1 网络加深遇到的优化问题1.2 short connect技术 2. 残差网络及有效性理解2.1 残差网络 3. 残差网络的发展3.1 密集残差网络3.2 更宽的残差网络(wide resnet)3.3 分组残差网络3.4 Dual Path Network3.5 加权残差网络3.6 预激活残…

Java逻辑程序控制与方法

🐵本篇文章将对Java的分支结构、循环结构以及方法的部分知识点进行讲解 Java的分支结构、循环结构和C语言基本一致,这里只做简单介绍 1. 分支结构↔️ 1.1 if语句 if (布尔表达式) { ... } else if (布尔表达式) { ... } else { ... } if () {if () {.…

文件同步软件选择准则

随着科技的飞速发展,文件同步软件已成为我们日常工作中不可或缺的一部分。它可以帮助我们轻松地实现文件在不同设备、不同服务器之间的同步,确保数据的安全性和一致性。然而,市场上的文件同步软件种类繁多,如何选择适合自己的软件…

管网智慧化建设能为管网提供哪些优势?第3点特别值得注意!

关键词:智能管网、智慧管网、智慧管网建设、智慧燃气、气管网压力监测解决方案 随着信息技术的不断发展,数字城市的发展正在快速向智慧城市推进,而管网智慧化建设是目前智慧城市建设中不可或缺的一个重要举措。 因为早期铺设使用的排水管道…

[NISACTF 2022]join-us 无列名注入 过滤database() 报错获取表名 字段名

mysql注入可报错时爆表名、字段名、库名 – Wupcos Blog 又是sql注入 来做一些吧 这里我们可以很快就获取注入点 抓包开干 开fuzz 过滤很多东西哦 database都过滤了 那么要咋弄啊。。。 绕过database() 这里其实我们可以通过报错来实现 1|a()%23 数据库名这不就来了 然后…