首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >应用什么设计来应用嵌入式状态机?

应用什么设计来应用嵌入式状态机?
EN

Stack Overflow用户
提问于 2014-05-15 18:09:34
回答 3查看 1.4K关注 1票数 1

我需要为硬件设备制造一台状态机。它将有超过25个州,我不知道应该采用什么设计。

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

它应该更像C风格的设计吗?我以前一次都没编码过。有人能给我指点什么是最适合的设计吗?

系统信息:

代码语言:javascript
运行
复制
ARM Cortex-M4  
1 MB Flash  
196 KB Ram

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-15 20:16:47

State模式效率不高,因为任何函数调用都至少要通过指针和vtable查找,但是只要您不每2或3个时钟周期更新状态或在时间关键循环中调用状态机函数,您就应该没事。毕竟,M4是一个相当强大的微控制器。

问题是,你是否需要它。在我看来,状态模式只是有意义的,如果在每种状态中,对象的行为都有很大的不同(在每种状态中需要不同的内部变量),如果您不想在状态转换期间传递变量值。

如果您的TS只是在读取事件α并在此过程中发射信号β时从A到B的转换,那么基于表或开关的经典方法就更明智了。

编辑:

我只想澄清一下,我的回答并不是作为反对c++或OOP的声明,我在这里肯定会使用它们(主要是出于个人喜好)。我只想指出,State Pattern可能有些过分,仅仅因为一个人在使用c++并不意味着他/她必须在任何地方使用类层次结构、多态性和特殊的设计模式。

票数 3
EN

Stack Overflow用户

发布于 2014-05-15 20:05:50

考虑一下QP主动对象框架,一种在嵌入式系统中实现分层状态机的框架。这本书是在米罗·萨梅克( Miro Samek )的书“C/C++中实用的UML状态图:面向嵌入式系统的事件驱动编程”中描述的。此外,本书第3章还描述了在C和C++中实现状态机的更传统方法。

票数 1
EN

Stack Overflow用户

发布于 2014-05-15 18:25:39

上课没什么不对的。您可以定义一个' State‘枚举,并在事件中使用case开关状态来访问corect操作代码/函数,从而传递或队列。我更喜欢简单的硬件控制状态引擎,而不是经典的‘状态机101’表驱动方法。表驱动的引擎非常灵活,但对于复杂的功能来说,可能会变得有点复杂,调试起来也会更加困难。

它应该更像C风格的设计吗?

高德,不!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23685682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档