状态机到面向过程 以上实现的是“输入外部事件>>>>引流到>>>>状态机” 那如何实现“状态机>>>>执行>>>>具体地操作”呢?状态机有一个固定的执行流程(当然也有根据条件执行不同的运行流程的分支),其实这些个流程都是非常确定的执行过程。 在开发过程中的经验体现:就是对所有执行流程的精确完整的分析,然后将其全部罗列出来。“全部罗列出来”这个执行流程在程序中有两种体现方式: 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); // 状态机:步骤二
- ... // 状态机:步骤....
- }
|