Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Button FSM中的状态复制_Button_Timer_Interrupt_Fsm - Fatal编程技术网

Button FSM中的状态复制

Button FSM中的状态复制,button,timer,interrupt,fsm,Button,Timer,Interrupt,Fsm,我正在尝试实现一个FSM,它通过以下方式处理按钮: 在待机状态下,它只需等待按钮被按下 当按下时,它会移动到intButtonPress状态,此时会启动2秒计时器。如果超时,则表示按钮保持2秒钟,下一个状态必须为Action。如果按钮在超时之前释放,则状态将返回待机状态,因为按钮未保持足够长的时间 在动作模式下,执行某些动作,但可通过按下按钮来中断。问题是我不能重用intButtonPress状态,因为它的超时转换将导致返回到操作状态,所以一个明显的解决方案是使用相同的状态,其唯一区别是它导致待

我正在尝试实现一个FSM,它通过以下方式处理按钮:

在待机状态下,它只需等待按钮被按下

当按下时,它会移动到intButtonPress状态,此时会启动2秒计时器。如果超时,则表示按钮保持2秒钟,下一个状态必须为Action。如果按钮在超时之前释放,则状态将返回待机状态,因为按钮未保持足够长的时间

在动作模式下,执行某些动作,但可通过按下按钮来中断。问题是我不能重用intButtonPress状态,因为它的超时转换将导致返回到操作状态,所以一个明显的解决方案是使用相同的状态,其唯一区别是它导致待机状态,但它很难看

有没有更好的方法来处理这个问题


FSM在这里:无法嵌入图片回答我自己的问题-使用分层状态机:


超级备用状态不是严格需要的。

您是否计划实际编写分层状态机代码,还是仅仅是一个理论练习?是的,使用,尽管我还没有开始。