【问题标题】:Meta State Machine (Boost) in embedded applications嵌入式应用中的元状态机 (Boost)
【发布时间】:2014-11-14 17:56:21
【问题描述】:

您认为 MSM(Boost Meta State Machine)适合嵌入式应用吗?在我的例子中,应用程序应该在 Cortex-M4F MCU 上运行,具有 1 MB 闪存和 192 KB RAM。我喜欢 MSM 为您提供了一种更结构化的方法来定义具有正交区域的分层状态机,但它也引入了一些开销。我想知道这种方法对于具有内存限制的嵌入式应用程序是否可行,或者我应该“回到”更传统的“switch case”状态机。

【问题讨论】:

  • 我不知道 boost MSM,但STTCL 肯定适合 cortext M4。但我猜因为它被命名为 Meta-State-Machine 他们会使用类似的技术。而且,不,不要退回到传统的switch case FSM's。
  • 在这样一个有限的系统中,您可能根本不应该使用 C++。绝对不是模板。
  • @JoachimPileborg 嗯,什么?我们一直在这样做,而且做得非常成功(实际上并没有使用 boost)。
  • @Some 程序员老兄 C++ 实际上现在使用更少的内存并生成更快的代码。当很久以前 C++11 出现时,情况发生了变化。

标签: c++ boost embedded state-machine cortex-m


【解决方案1】:

这实际上取决于您需要使用它的频率以及它在时间、易于开发、可读性、可移植性等方面为您的项目增加了多少价值。

如果你有足够的时间在世界上,你可能会做出一些更专门为你的应用程序需求而构建和指定的东西。

RAM 在您的场景中非常宝贵(当然,取决于您的应用程序)。我建议使用 Boost(或使用 Boot 的示例)编写一个有点重要的状态机,检查 RAM 使用情况,然后确定您的项目是否有 [RAM] 预算。

注意,boost 需要权衡使用比运行时内存更多的代码空间(通过模板)。此外,这种权衡优化了运行时性能,因为处理器从闪存中获取指令的效率比从 RAM 中获取数据的效率高得多(在大多数情况下,使用 Cortex-M4F 时)。

记住,C++11 和 14 编译器比以前用于元编程/模板要聪明得多,所以代码膨胀不应该真的是担心,因为使用 Boost MSM 的权衡/成本对于复杂的、非平凡的状态机来说可能是值得的。

查看 Boost MSM-lite(实验性),它试图通过将 MSM 简化为香草 MSM 的有限设施集来解决许多问题。

Boost MSM-lite

【讨论】:

    猜你喜欢
    • 2011-05-15
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多