状态机到面向过程 以上实现的是“输入外部事件>>>>引流到>>>>状态机” 那如何实现“状态机>>>>执行>>>>具体地操作”呢?状态机有一个固定的执行流程(当然也有根据条件执行不同的运行流程的分支),其实这些个流程都是非常确定的执行过程。 在开发过程中的经验体现:就是对所有执行流程的精确完整的分析,然后将其全部罗列出来。“全部罗列出来”这个执行流程在程序中有两种体现方式: 1、把所有的执行流程以“空函数”的形式罗列出来。 2、把所有的执行流程以“函数指针”的形式罗列出来: 好处一:可以把软件框架写出来,具体逻辑流程已经做好 好处二:具体的函数的接口可以先空着(NULL),待写好了函数就把函数名赋值给它(sys_api_func* = you_func ;) 好处三:通用性更高,逻辑性更强 void (sys_api_func1)(void);
void (sys_api_func2)(void);
void (sys_api_func3)(void);
...
void sys_api_init(void)
{
sys_api_func1 = NULL; // 还没有写好实现函数就先赋为NULL
sys_api_func2 = NULL;
sys_api_func3 = NULL;
...
}
// 状态机1
void machine_1(void)
{
execute_api_void(sys_api_func1); // 状态机:步骤一
execute_api_void(sys_api_func2); // 状态机:步骤二
... // 状态机:步骤....
}
|