使用C++ 实现状态机
时间: 2024-05-11 14:15:49 浏览: 14
可以用 switch-case 语句实现状态机。具体实现方法是,根据当前的状态,在 switch 语句中判断当前的输入信号,根据输入信号和当前状态,转移状态,并执行相应的操作。例如:
```
enum State {
STATE_IDLE,
STATE_RUNNING,
STATE_STOPPED,
};
void state_machine(enum State state, int input) {
switch (state) {
case STATE_IDLE:
if (input == 1) {
// transition to STATE_RUNNING
state = STATE_RUNNING;
// do something
}
break;
case STATE_RUNNING:
if (input == 0) {
// transition to STATE_STOPPED
state = STATE_STOPPED;
// do something
}
break;
case STATE_STOPPED:
if (input == 1) {
// transition to STATE_RUNNING
state = STATE_RUNNING;
// do something
}
break;
}
}
```
在这个例子中,我们定义了三个状态 STATE_IDLE、STATE_RUNNING 和 STATE_STOPPED。根据当前状态和输入信号,我们在 switch 语句中转移状态,并执行相应的操作。当输入信号为 1 时,表示开始运行,如果当前状态是 STATE_IDLE,就转移到 STATE_RUNNING 状态,并执行相应的操作;当输入信号为 0 时,表示停止运行,如果当前状态是 STATE_RUNNING,就转移到 STATE_STOPPED 状态,并执行相应的操作;当输入信号为 1 时,表示重新开始运行,如果当前状态是 STATE_STOPPED,就转移到 STATE_RUNNING 状态,并执行相应的操作。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)