设计嵌入式软件


11

我开始使用RTOS进行嵌入式软件编程,并且由于我已经是桌面应用程序的开发人员,所以我一直想知道使用UML图(如活动图,序列图,用例等)对嵌入式软件进行建模的感觉如何。

嵌入式软件是否使用UML设计的,与桌面应用程序一样?是最好的选择还是有更好的选择?我可以举一些例子吗?

是否有执行此操作的特定工具?


8
嵌入式应用程序绝对没有特定的细节。特殊的是资源受限的应用程序,其中最常见的是时序限制,例如硬实时要求。如果您告诉我们有关您的应用程序要求的更多信息,我们可以为您提供具体答案。
Wouter van Ooijen

3
我完全同意@Wouter关于资源受限应用程序的评论,但是我认为使用RTOS与软计划的桌面开发环境(在某些情况下,阻塞调用是可以接受的)相关的设计存在细微差别。
HikeOnPast

1
提防过度设计嵌入式系统。另请参见“国王的烤面包机” ee.ryerson.ca/~elf/hack/ktoast.html
drxzcl 2012年

2
@drxzcl-不同意。首先,我认为您在设计符合太空条件的软件时不会太在意。其次,工程师对国王烤面包机的态度是造成大量面包被烧的原因。对于实际上不平凡的工作,大多数烤面包机都太简单了。
Rocketmagnet

1
@卡西欧:我和伍特在一起。您必须自己分析问题,然后使用您认为合适的任何系统来规划重要部分。在分析问题之前选择表示形式的问题是,您很难以某种方式看到问题。UML是一种源于企业软件的表示形式,您不想被引诱设计诸如企业软件之类的嵌入式软件。
drxzcl 2012年

Answers:


8

UML的实时扩展已被一家公司所普及,该公司的名字此刻使我无所适从。我记得几年前在上面写过一篇论文。布鲁斯·鲍威尔·道格拉斯(Bruce Powell Douglass)写了几本有关使用UML对嵌入式系统进行建模的主题的书,但是我想的并不是他的公司。

就是说,呼应Wouter,嵌入式软件本身没有什么特别之处。我每天都会为运行在奔腾级处理器上的系统编写嵌入式软件。UML非常适用。另外,请记住,随着时间的流逝,UML已添加了控制软件的许多方面:在序列图中提供了用于指定同步或异步事件以及响应时间的语法,可以在活动图中找到Petri网络类型的行为,状态图模型的行为甚至更好比状态图可以的等等。

OTOH,很多人喜欢使用结构化设计和数据流概念对嵌入式软件进行建模。这与您要设计的系统类型以及最有效的系统有关。


谢谢@lyndon。但是,您每天如何建模嵌入式软件?您是否认为活动图,状态机和序列图会达到目的?我实际上是在寻找设计的概念,如果有嵌入式系统的设计,那么要插入设计文档的原理图是什么。
卡西欧(Cassio)

我看到的最常见的构造是用于日常使用的状态图/状态图和序列图。老实说,我认为我们可以更多地使用类图,但是我发现人们倾向于只创建大量的“神对象”。哦:我想到的公司是Artisan Software。该链接可能会提供信息:werner.yellowcouch.org/Papers/rtuml/index.html#toc7
lyndon

5

当使用RTOS时,我们通常会处理一个应用程序,该应用程序具有许多并发任务,这些任务需要进行最佳安排,以便每个任务都能按时完成任务或安全地共享资源。您选择的RTOS框架实现了一个任务计划程序,您的工作(通常是)是使用一组特定的属性(时段,优先级等)编写这些单独的任务,然后将其交给计划程序。因此,对于文档记录,我将采用的方法是仔细记录每个任务。

据我所知,大多数嵌入式软件以及大多数RTOS都不是用面向对象的语言编写的,因此可能无法从许多面向诸如类图之类的东西中受益。

但是,在记录RTOS任务时,任何描述任务的图表都将是一个很大的好处。我可以想象每个任务的时序图会很有帮助。除此之外,您还可以指定其硬性要求,例如其周期/频率,优先级,它可能使用的任何共享资源,抢占要求等。同样有价值的是记录您如何配置RTOS以及状态-机器的调度算法。

接受任何建议,但是您喜欢,自从我上大学以来,我就从来没有对RTOS感到困惑,也从来没有真正“记录”过这项工作。


谢谢@JonL。因此,为了拥有一个不错的设计文档,我只需要设计应用程序中涉及的任务?另外,我对调度算法不是很熟悉,我从不需要处理它。我正在使用RTEMS。
卡西欧(Cassio)2012年

@Cassio,我不是在告诉您做一件事或另一件事,那完全取决于您。只是尝试做必要的事情。如果您不熟悉RTOS,我认为首先开始使用它,以及如何使用它是一个不错的起点。然后,您可以开始围绕它设计任务。
乔恩·L

是的,我仍然熟悉RTOS功能。并感谢您建议的方法!会做的!正如我之前所说,我是嵌入式软件的新手,我不确定是否需要什么。拥有嵌入式软件体系结构或设计文档将是很好的。你有其中之一吗?
卡西欧

“大多数RTOS并不是以面向对象的语言编写的”。但是对于实时建模和实现的课程,我们使用C ++中的简单(非抢占式)RTOS。
Wouter van Ooijen

5

建模就是一切

  • 知道您的应用程序中哪些方面是困难而复杂的,

  • 寻找适合该方面的建模工具/语言/抽象/惯例/符号

  • 设计那个方面

因此,没有建模工具/方法/等适用于所有情况。卫星可能是一个实时多任务系统,可能有多个处理器。任务结构图,STD和顺序图可能有用(仅举几例)。如果项目是用C完成的,那么类图就不太有用了(如果事实证明非常有用,则选择C可能是错误的)。我不太喜欢UseCases,而且卫星an-sich没有用户。在要与非技术用户讨论系统需求的情况下,用例最合适。如果是这种情况,您正在从事卫星项目,那就出问题了。


谢谢@Wouter。您为我介绍了一个新概念:任务结构图,太好了!因此,它在C中。如果没有UseCases,您将对具有所有要求的文档有什么要求?
卡西欧

IMO仅需要基于测试用例的情况下,才需要可识别的或多或少的一次性使用需求的列表。对我而言,UseCases只是获取此类列表的一种方法。在某些情况下是个好方法。
Wouter van Ooijen

1

我没有设计任何符合空间要求的东西。但是我曾为美国国防部(DoD)航空分包商工作,我的许多设计都具有飞行资格。他们需要有关您的设计的大量文档,并提供详细说明他们想要查看的内容的数据项描述(DID)。

如果在“标题中的单词”字段中键入“软件”并单击“提交”,则可以使用DoD ASSIST快速搜索来查看所需文档的所有DID。(我发现国防部站点抛出证书安全警告很有趣,但我向您保证,这很安全)。

由于您专门询问设计文档,因此这里是软件设计说明(SDD)DID。他们强调使用文字来描述设计的每个部分。但是,如果使用UML,状态图,流程图,伪代码等可以增强对设计的理解,那么他们当然希望您将其包括在内。

正如其他人所述,选择哪种建模方法取决于您的设计。但是我认为看到航空航天软件的DID可能会帮助您编写设计文档,因为您的项目与空间有关。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.