我正在寻找一个提供分层状态机 (HSM) 执行的框架。
这些是对框架的要求:
- 符合 UML 状态机语义(尽可能)
- 至少支持
- 运行到完成语义
- 等级状态
- 进入和退出动作
- 过渡动作
- 警卫
- 带有自定义参数的事件
- 面向对象或至少不禁止 OO 设计
目标平台是带有操作系统的中大型嵌入式系统。
你知道满足上述要求的框架吗?你的框架的优缺点是什么?
我正在寻找一个提供分层状态机 (HSM) 执行的框架。
这些是对框架的要求:
目标平台是带有操作系统的中大型嵌入式系统。
你知道满足上述要求的框架吗?你的框架的优缺点是什么?
你应该去看看Boost MSM,它是 Boost 1.44 的新功能,但看起来很完整。我自己还没有尝试过,但它看起来很有希望。
查看量子平台。
我已经在几个嵌入式项目(从非常小到非常大)中使用了它,它支持您需要的所有项目符号项目,等等。
QP 的网页比我在这里做得更好。
请注意,QP 并没有实现 UML 规范中指定的 100% 的功能,但是对这些差异进行了清楚的解释,并且根据我对 QP 的所有经验,它们都不是项目的问题。
还有 2 个 Boost 状态图包,你似乎知道。
截至今天,有一个新的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 状态机”的第一名,这使得它非常相关。
如果您正在寻找一个支持具有 UML 语义(进入/退出、转换、保护、带参数的事件、异步/同步)的分层和并发状态机的框架,请查看我的状态机代码和图表生成器。
而不是“手动”实现状态机,而是用简单的人类可读和可写的 xml 描述来描述状态机,并让状态机生成器用 C++、C# 或 java 编写代码源。
实际上,对于 C++ 版本,生成的代码可以很容易地交叉编译用于中/大型嵌入式系统。它已经完成了。