5

我正在寻找一个提供分层状态机 (HSM) 执行的框架。

这些是对框架的要求:

  • 符合 UML 状态机语义(尽可能)
  • 至少支持
    • 运行到完成语义
    • 等级状态
    • 进入和退出动作
    • 过渡动作
    • 警卫
    • 带有自定义参数的事件
  • 面向对象或至少不禁止 OO 设计

目标平台是带有操作系统的中大型嵌入式系统。

你知道满足上述要求的框架吗?你的框架的优缺点是什么?

4

5 回答 5

4

你应该去看看Boost MSM,它是 Boost 1.44 的新功能,但看起来很完整。我自己还没有尝试过,但它看起来很有希望。

于 2010-09-20T10:49:17.717 回答
4

查看量子平台

我已经在几个嵌入式项目(从非常小到非常大)中使用了它,它支持您需要的所有项目符号项目,等等。

QP 的网页比我在这里做得更好。

请注意,QP 并没有实现 UML 规范中指定的 100% 的功能,但是对这些差异进行了清楚的解释,并且根据我对 QP 的所有经验,它们都不是项目的问题。

还有 2 个 Boost 状态图包,你似乎知道。

于 2010-09-20T19:42:56.657 回答
3

截至今天,有一个新的C++(支持 C++11 和 C++03 with Boost)替代方案可用。它被称为yasmine(我是建筑师)。它满足上述所有要求。

一些优点和缺点(引自 yasmine 网页):

使用yasmine的好处

  • 她提供了 UML 状态机语义的完整实现。
  • yasmine 是使用 C++11 的现代 C++ 实现(也提供 C++03 支持)。
  • 因为它是 C++(而不是 C),所以代码很好地集成到了 OO 代码中。
  • 她有据可查 [...]
  • 因为她是开源的,所以你可以查看她的实现。这也保证了长期的可用性和可用性。
  • 该库使您能够在运行时创建状态机。
  • [...]

什么yasmine不是

无论可用资源有多少,她都不是优先考虑在每个系统上运行的最小占用空间库。yasmine 并不缺乏资源,但她不能(也不想)与基于 switch-case 的裸机非抽象库竞争。

笔记

我知道这是一个老问题,但它是 Google 的“c++ uml 状态机”的第一名,这使得它非常相关。

于 2016-06-20T17:08:43.387 回答
1

如果您正在寻找一个支持具有 UML 语义(进入/退出、转换、保护、带参数的事件、异步/同步)的分层和并发状态机的框架,请查看我的状态机代码和图表生成器

而不是“手动”实现状态机,而是用简单的人类可读和可写的 xml 描述来描述状态机,并让状态机生成器用 C++、C# 或 java 编写代码源。

实际上,对于 C++ 版本,生成的代码可以很容易地交叉编译用于中/大型嵌入式系统。它已经完成了。

于 2011-08-07T21:10:14.407 回答
1

您可以查看我的 C++ 模板类框架STTCL,它旨在提供 UML 2.2 状态图符号到实现类的映射。STTCL 方法是对 GoF 状态模式的改进,并试图填补 UML 状态图符号的空白。

只要需要,框架实现就操作系统依赖项是可配置的(仅适用于异步执行模型)。

有一个PDF 文档可以更详细地解释这个概念。

于 2012-02-20T11:32:52.123 回答