我开始使用RTOS进行嵌入式软件编程,并且由于我已经是桌面应用程序的开发人员,所以我一直想知道使用UML图(如活动图,序列图,用例等)对嵌入式软件进行建模的感觉如何。
嵌入式软件是否使用UML设计的,与桌面应用程序一样?是最好的选择还是有更好的选择?我可以举一些例子吗?
是否有执行此操作的特定工具?
我开始使用RTOS进行嵌入式软件编程,并且由于我已经是桌面应用程序的开发人员,所以我一直想知道使用UML图(如活动图,序列图,用例等)对嵌入式软件进行建模的感觉如何。
嵌入式软件是否使用UML设计的,与桌面应用程序一样?是最好的选择还是有更好的选择?我可以举一些例子吗?
是否有执行此操作的特定工具?
Answers:
UML的实时扩展已被一家公司所普及,该公司的名字此刻使我无所适从。我记得几年前在上面写过一篇论文。布鲁斯·鲍威尔·道格拉斯(Bruce Powell Douglass)写了几本有关使用UML对嵌入式系统进行建模的主题的书,但是我想的并不是他的公司。
就是说,呼应Wouter,嵌入式软件本身没有什么特别之处。我每天都会为运行在奔腾级处理器上的系统编写嵌入式软件。UML非常适用。另外,请记住,随着时间的流逝,UML已添加了控制软件的许多方面:在序列图中提供了用于指定同步或异步事件以及响应时间的语法,可以在活动图中找到Petri网络类型的行为,状态图模型的行为甚至更好比状态图可以的等等。
OTOH,很多人喜欢使用结构化设计和数据流概念对嵌入式软件进行建模。这与您要设计的系统类型以及最有效的系统有关。
当使用RTOS时,我们通常会处理一个应用程序,该应用程序具有许多并发任务,这些任务需要进行最佳安排,以便每个任务都能按时完成任务或安全地共享资源。您选择的RTOS框架实现了一个任务计划程序,您的工作(通常是)是使用一组特定的属性(时段,优先级等)编写这些单独的任务,然后将其交给计划程序。因此,对于文档记录,我将采用的方法是仔细记录每个任务。
据我所知,大多数嵌入式软件以及大多数RTOS都不是用面向对象的语言编写的,因此可能无法从许多面向诸如类图之类的东西中受益。
但是,在记录RTOS任务时,任何描述任务的图表都将是一个很大的好处。我可以想象每个任务的时序图会很有帮助。除此之外,您还可以指定其硬性要求,例如其周期/频率,优先级,它可能使用的任何共享资源,抢占要求等。同样有价值的是记录您如何配置RTOS以及状态-机器的调度算法。
接受任何建议,但是您喜欢,自从我上大学以来,我就从来没有对RTOS感到困惑,也从来没有真正“记录”过这项工作。
建模就是一切
知道您的应用程序中哪些方面是困难而复杂的,
寻找适合该方面的建模工具/语言/抽象/惯例/符号
设计那个方面
因此,没有建模工具/方法/等适用于所有情况。卫星可能是一个实时多任务系统,可能有多个处理器。任务结构图,STD和顺序图可能有用(仅举几例)。如果项目是用C完成的,那么类图就不太有用了(如果事实证明非常有用,则选择C可能是错误的)。我不太喜欢UseCases,而且卫星an-sich没有用户。在要与非技术用户讨论系统需求的情况下,用例最合适。如果是这种情况,您正在从事卫星项目,那就出问题了。
我没有设计任何符合空间要求的东西。但是我曾为美国国防部(DoD)航空分包商工作,我的许多设计都具有飞行资格。他们需要有关您的设计的大量文档,并提供详细说明他们想要查看的内容的数据项描述(DID)。
如果在“标题中的单词”字段中键入“软件”并单击“提交”,则可以使用DoD ASSIST快速搜索来查看所需文档的所有DID。(我发现国防部站点抛出证书安全警告很有趣,但我向您保证,这很安全)。
由于您专门询问设计文档,因此这里是软件设计说明(SDD)DID。他们强调使用文字来描述设计的每个部分。但是,如果使用UML,状态图,流程图,伪代码等可以增强对设计的理解,那么他们当然希望您将其包括在内。
正如其他人所述,选择哪种建模方法取决于您的设计。但是我认为看到航空航天软件的DID可能会帮助您编写设计文档,因为您的项目与空间有关。