Tag: 有限状态机

在C中使用GOTO作为FSM

我在C中创建了一个有限状态机。我从硬件角度(HDL语言)学习了FSM。 所以我使用了一个每个状态一个case的switch 。 我还想在编程时应用Separation of Concerns概念。 我的意思是我想得到这个流程: 根据当前状态和输入标志计算下一个状态 validation下一个状态(如果用户请求不允许的转换) 允许时处理下一个状态 作为开始,我实现了3个函数:static e_InternalFsmStates fsm_GetNextState(); static bool_t fsm_NextStateIsAllowed(e_InternalFsmStates nextState); static void fsm_ExecuteNewState(e_InternalFsmStates); 目前它们都包含一个大的开关盒,它是相同的: switch (FSM_currentState) { case FSM_State1: […] break; case FSM_State2: […] break; default: […] break; } 既然它有效,我想改进代码。 我知道在3个函数中我将执行交换机的相同分支。 所以我想以这种方式使用goto : // // Compute next state // switch (FSM_currentState) { case FSM_State1: next_state = THE_NEXT_STATE goto […]

C中的有限状态机

我试图在C中创建一个简单的有限状态机,我对如何开始感到困惑。 我尝试在网上看,但没有什么能真正为我解决这个问题。 我的目标是检查字符串是八进制,hex还是十进制。 要成为八进制,字符串必须以0开头,后跟数字0-7。 要成为hex,字符串必须以0x或OX开头,然后是(af,AF,0-9) 我创建州的尝试将是: typedef enum { ERROR, OCTAL, HEX, DECIMAL } stringStates; 现在,我将使用switch语句遍历整个字符串并在不同状态之间切换,直到我正确识别它属于哪个状态。 while (current_Position<=end_String-1) { switch( "input something here") { case 0: //process string break; case 1: //process string break; case 2: //process string break; case 3: //process string break; default: break; } } 这个概念对我来说仍然是一个新概念,我很难理解它的实现。 如果有人可以解决一些问题,那将非常感激。

任意数字计数器

我需要一个计数器algortihm ,它使用任意给定的数字进行计数。 我的代码与此类似: static char digits[] = {‘x’,’y’,’z’}; /* Arbitrary number of arbitrary digits. */ int i; for(i=0; i<100; i++) { printf("%s\n", get_next()); } 我的预期产量: x y z yx yy yz zx zy zz yxx yxy yxz yyx yyy yyz yzx yzy yzz zxx … and so on 如您所见,我需要算法来实现get_next()函数,因此使用C语言不是重点。 编辑我以澄清目的: 我的get_next()函数可能与此类似: char get_next() { static […]