状态机

一 传统的switch..case:

  是状态嵌套事件还是事件嵌套状态,这是一个问题;按照发生概率的大小倒序安排case值顺序;GUN扩展支撑case x..y的写法(即范围在【x,y】之间);

二 指针函数法:

typedef enum{ ev_0, ev_1.....ev_max}ev_type_e; 

typedef enum{ state_0, state_1.....state_max}state_e; 

typedef state_e (*pFun_state)(ev_type_e_t ev)//内部继续对ev进行switch ..case.

pFun_stae  state_tbl[]={state0_fun,state1_fun,state0_fun,};//指针函数表格或者

三 表格法:横轴状态(正整数),纵轴事件,内容为func_state_event()函数,每增一个状态,就需要增加一列【即增加NULL状态函数,还要避免二维数组越界时函数跑飞】。

事件:typedef struct{ev_type_e ev_type; int value }event_e即识别事件,也区分事件内容(譬如按键内容);状态函数的形参是void *类型,从而能接收event_e类型。

os下的并发:为保证状态改变的唯一,结合GNU扩展的内建函数解决原子化操作。

 

posted on 2025-10-15 14:56  杰瑞鼠  阅读(2)  评论(0)    收藏  举报