【问题标题】:State design pattern usage in embedded software嵌入式软件中的状态设计模式使用
【发布时间】:2018-01-05 07:34:43
【问题描述】:

我一直在解决以下问题。我是 C++ 的新手,我需要实现 嵌入式软件的状态机。该状态机应构成 应用程序逻辑的核心。它应该控制状态之间的转换 控制器的“STANDSTILL”、“RUN”和“FAULT”。这些转变发生基于 开启:逻辑输入状态、模拟输入状态、通过通信线路接收的消息以及在控制器软件内部创建的消息。

我想以我利用 C++(面向对象编程)的强大功能。所以我花了一些时间在 寻找一些合适的设计模式。我找到了“状态”设计 模式,但我不确定这对我来说是否是一个不错的选择。据,直到...为止 我以正确的方式理解该定义,它适用于以下情况 有一些对象(所谓的上下文对象),其行为(其公共接口的方法)强烈依赖于其状态。

我的第一个想法是所谓的上下文对象可以是控制器本身。 (我的意思是一个将实现整个设备的软件模型的类。)状态相关方法可以是与上述状态机处理的输入相关的方法,即逻辑输入、模拟输入、通过通信线路接收的消息和内部消息。但我不确定这是否是好方法。有人对状态设计模式的这种用法有任何经验吗?感谢您的任何建议。

【问题讨论】:

  • 据我了解您的问题,您正确地将状态机模式转移到您的情况。
  • 您正在寻找的是“有限状态机”,它已经有了相当多的实现。一定要检查boost中的那个是否可以使用(根据你的具体项目限制)

标签: c++ design-patterns embedded


【解决方案1】:

仅仅因为您使用的是 C++,您不一定使用面向对象的设计。在实现琐碎的事情时,您也必须使用 OOD。在不涉及OOD的情况下实现状态机是非常可行的,因为它是一个如此简单的数据结构。基本上它只是一个带有命名成员的数组(函数指针)。

“模式”称为finite state machine。嵌入式系统的典型 C 实现可以在here 找到。您可以围绕该数组编写一个简单的类。嵌入式系统中的状态机几乎总是静态和只读的,因此该类必须是“单例”。你会发现在这里使用类并没有明显的好处。

【讨论】:

    【解决方案2】:

    状态模式是一个很好的开始设计。但如前所述,现有的工具可以为您生成代码。您可以查看的另一个是http://scxmlcc.org。这个创建的代码使用“C++ 的力量”并且也是基于状态模式设计的。

    【讨论】:

      猜你喜欢
      • 2015-06-28
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多