C++ 嵌入式状态机应用什么设计

C++ 嵌入式状态机应用什么设计,c++,c++11,embedded,arm,state-machine,C++,C++11,Embedded,Arm,State Machine,我需要为硬件设备制作一个状态机。它将有超过25个州,我不确定应用什么样的设计 因为我使用的是C++11,所以我想使用OOP并使用状态模式实现它,但我认为它不适合嵌入式系统 它应该更像C风格的设计吗?我以前没有编写过代码。有人能给我一些建议什么是最合适的设计吗 系统信息: ARM Cortex-M4 1 MB Flash 196 KB Ram 我还看到了一个问题,被接受的答案指向一个表设计,另一个答案指向一个状态模式设计。类没有问题。您可以在事件中定义“状态”枚举和传递或队列,使用案例开

我需要为硬件设备制作一个状态机。它将有超过25个州,我不确定应用什么样的设计

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

它应该更像C风格的设计吗?我以前没有编写过代码。有人能给我一些建议什么是最合适的设计吗

系统信息:

ARM Cortex-M4  
1 MB Flash  
196 KB Ram

我还看到了一个问题,被接受的答案指向一个表设计,另一个答案指向一个
状态模式
设计。

类没有问题。您可以在事件中定义“状态”枚举和传递或队列,使用案例开关打开状态来访问corect操作代码/函数。与经典的“状态机101”表驱动方法相比,对于更简单的硬件控制状态引擎,我更喜欢这种方法。表驱动引擎具有惊人的灵活性,但对于复杂的功能来说可能会有点复杂,调试起来也会有点困难

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


盖德,不

一门课没什么问题。您可以在事件中定义“状态”枚举和传递或队列,使用案例开关打开状态来访问corect操作代码/函数。与经典的“状态机101”表驱动方法相比,对于更简单的硬件控制状态引擎,我更喜欢这种方法。表驱动引擎具有惊人的灵活性,但对于复杂的功能来说可能会有点复杂,调试起来也会有点困难

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


盖德,不

考虑,这是一个在嵌入式系统中实现分层状态机的框架。米罗·萨梅克的书中描述了这一点。此外,本书第3章描述了C和C++中实现状态机的更传统方式。米罗·萨梅克的书中描述了这一点。此外,本书第3章描述了C和C++中实现状态机的更传统方式。因为任何函数调用都至少要经过指针和vtable查找,但只要不每隔2或3个时钟周期更新状态,或在时间关键型循环中调用状态机函数,就可以了。毕竟M4是一款功能强大的微控制器

问题是,你是否需要它。在我看来,状态模式只有在每个状态中对象的行为显著不同(每个状态需要不同的内部变量)并且不希望在状态转换期间保留变量值时才有意义

如果您的TS只是在读取事件alpha并在过程中发出信号beta时从A转换到B,那么经典的基于表或开关的方法更为合理

编辑:


我想澄清一下,我的回答不是针对C++或OOP的声明,我肯定会在这里使用(主要是出于个人偏好)。我只想指出,<代码>状态模式可能是一种过激行为,只是因为使用C++并不意味着他/她必须使用类层次结构、多态性和特殊设计模式。

< P>状态模式不是很有效,因为任何函数调用都至少要经过指针和vtable查找,但只要不每隔2或3个时钟周期更新状态,或在时间关键型循环中调用状态机函数,就可以了。毕竟M4是一款功能强大的微控制器

问题是,你是否需要它。在我看来,状态模式只有在每个状态中对象的行为显著不同(每个状态需要不同的内部变量)并且不希望在状态转换期间保留变量值时才有意义

如果您的TS只是在读取事件alpha并在过程中发出信号beta时从A转换到B,那么经典的基于表或开关的方法更为合理

编辑:


我想澄清一下,我的回答不是针对C++或OOP的声明,我肯定会在这里使用(主要是出于个人偏好)。我只想指出,<代码>状态模式可能是一种过激行为,只是因为使用C++并不意味着他/她必须使用类层次结构、多态性和特殊设计模式。如果你已经有C++环境,你对C++感到满意,为什么不使用它呢?然而,C++常常需要更多的支持;设置C++支持可能比在任何语言中编码状态机花费更多的时间。状态机可以是数据驱动的,也可以通过函数指针(代码驱动)实现。许多“C”系统在结构中使用一个简单的变量,并
switch/case
实现状态。状态通常只是一个
枚举和允许的转换;如何实现转换通常是一个困难的部分。另请参阅:如果嵌入了中断感知,这可能适用。C++有非常好的语法来实现,这通常是有用的,取决于你想让你的状态机有多大。状态机有点微不足道,我不理解这个问题,任何和所有的语言都会很好地工作。对于一个ARCORTEX-M4C或C++,你喜欢哪一个是你最好的候选人,仅仅是从哪个平台的角度来看,这取决于环境。如果你已经有C++环境,你对C++感到满意,为什么不使用它呢?然而,C++常常需要更多的支持;设置C++支持可能比在任何语言中编码状态机花费更多的时间。圣徒