嵌入式编程状态机


8

我正在研究在具有gcc的32位MCU上实现非平凡的有限状态机(指定为UML分层状态图)。

是否有任何经验法则,哪些方法更好,哪些效果不好?我的直觉说,基于开关(甚至是计算的goto)的实现应该稍微更高性能,而通常认为基于功能指针的过渡表更易于维护。

另外:有人对嵌入式应用程序的Boost MSM进行了评估吗?我知道Boost MSM通常被认为是非常高效的,但是对于嵌入式应用程序,效率的衡量标准可能不同于PC编程领域。

有人知道MSM的编译状态机引擎是什么样吗?是更像开关跳转表还是更像函数指针转换表?它使用动态内存分配还是可以静态使用?


我会远离Boost MSM(和一般的C ++模板),因为它们会很快炸毁代码大小。
jms

C ++ 还有其他一些陷阱需要注意...
Matt Young

@jms这就像是在说wood夫应该远离锋利的工具,而要用锤子,因为with夫可能会割伤自己。模板是一种非常有用的工具,以正确的方式使用它可以提高速度并减少代码的大小,尤其是对于小型微控制器而言。如果以错误的方式使用-那么,任何工具都可能以错误的方式使用!
Wouter van Ooijen

Answers:


8

如果32位MCU有很大的不同,我会感到惊讶。避免条件分支可以为您节省几个周期,但是您真的会根据几个周期成功或失败吗?RAM和ROM上的等待状态数可能至少同样重要。CPU指令集也是如此。

过早的优化是万恶之源。从易于实现和维护的内容开始,并且仅在必要时基于分析进行优化。


我希望与动作相反,它对状态机框架(无论是DIY还是来自某些库)的性能的影响很小。正如亚当说的那样:可读性优先的代码。一秒钟。第三。(位置10的A:配置文件。本地优化远低于此。)
Wouter van Ooijen

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.