哪个 UML 图应该用于将用 C 语言为微控制器编写的软件概述?

Which UML diagram should be used for a Software overview which will be written in C for microcontrollers?

我想知道如何使用 UML 图呈现软件概览。代码将用 C 语言为微控制器编写。所以,我猜我不能使用 CLASS 图/ OBJECT 图/ COMPOSITE STRUCTURE 图。那么,

  1. 我应该使用哪个 UML 图?

  2. 可以用Activity图吗?如果是这样,是否有任何方法可以将所有活动组合在一个图表中以查看整个软件?

  3. 如果 UML 图不合适,那么哪一个是适合此目的的?

提前致谢。

理想情况下,程序设计应该与您的需求规范联系起来,这样对于每个需求都有一个代码模块,并且对于该代码模块有一个测试来证明它如何满足需求。这是一种很难在实践中坚持的乌托邦,但无论如何,这种设计是一个很好的抱负。

那么一般来说,如何记录程序设计并不重要,只要整体设计得到记录即可 - 即使在专业环境中,这种情况也很少见。但是 UML 的所有迂腐细节实际上都是可选的,在找到适合它们的情况下使用它们,不要仅仅为了它而使用它们。我经常使用 UML class 图来记录代码依赖关系,以及对记录应用程序行为很有用的状态图。等等 - 在没有实施细节的情况下保持广泛。

class 的 C 等价物通常是具有相同名称的 .h/.c 对,一起形成一个“模块”或“ADT”或任何您喜欢的名称。

您需要记录所有 class A 使用 class B 依赖项,以及所有 class B是一个class A依赖(继承)。继承在嵌入式系统中不是很常见,但实现 HAL 是使用它的典型示例。您在特定于硬件的驱动程序之上有一个抽象 API。

显然,您需要尽早决定此类抽象是否合理——程序最终会移植到另一个 MCU 上,还是指望芯片供应商的“长寿命”保证 MCU 不会在预期的产品寿命?看看今天完全崩溃的硅市场,我认为任何微控制器项目都需要在其生命周期内移植很多次。

要对用 C 编写的大型应用程序的静态结构进行建模,我会推荐一个包图。图中的包将代表子系统,很可能对应于应用程序的高级目录结构。这些包之间的依赖箭头将指示哪个子系统使用哪个其他子系统。

对于每个顶级包,您可以创建一个单独的包图,显示 subsystems/subdirectories 及其依赖项。