Closed. This question is opinion-based。它当前不接受答案。












想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。

6年前关闭。



Improve this question




我需要为硬件设备制作状态机。它将有25个以上的州,我不确定要应用哪种设计。

因为我使用的是C++11,所以我考虑过使用OOP并使用State Pattern来实现它,但我认为它不适用于嵌入式系统。

应该更像C风格的设计吗?我以前没有编码。有人可以给我一些最适合的设计的建议吗?

系统信息:
ARM Cortex-M4
1 MB Flash
196 KB Ram

我还看到了this问题,接受的答案指向表格设计,另一个答案指向State pattern设计。

最佳答案

状态模式不是很有效,因为任何函数调用至少都要通过指针和vtable查找,但是只要您不每隔2或3个时钟周期更新一次状态,或者不在关键时间循环内调用状态机功能,应该没事。毕竟,M4是一个功能强大的微 Controller 。

问题是,是否需要它。我认为,状态模式仅在以下情况下才有意义:如果在每个状态下对象的行为明显不同(每个状态需要不同的内部变量),并且您不想在状态转换过程中保留变量值。

如果您的TS仅在读取事件alpha并在此过程中发出信号beta时从A过渡到B,则基于经典表或开关的方法更为明智。

编辑:

我只是想澄清一下,我的答案并不是要针对c++或OOP的声明,我将在此明确使用(主要出于个人喜好)。我只想指出State Pattern可能会过大,仅因为使用c++并不意味着他/她必须在任何地方使用类层次结构,多态性和特殊设计模式。

关于c++ - 嵌入式状态机应采用什么设计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23685682/

10-10 13:33
查看更多