⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readme.txt

📁 linuxFedure4环境下串口编程后台运行状态机
💻 TXT
字号:
有限状态机(FSM)的简单设计报告刘可嘉<donaldliew@gmail.com>Nov 24, 20051. 接口定义系统提供6个函数接口fsm_load,fsm_doevent, fsm_free, fsm_create, fsm_setstate和fsm_add。============================================================struct FSM *fsm_load(const unsigned char *filename,          const struct func_table *funcv, int funcc);从指定的配置文件及字符串/函数指针对照表建立相应FSM对象。出错时返回NULLfilename -- 配置文件名funcv -- 函数表数组funcc -- 函数表项数struct FSM -- 状态机对象类型,具体实现用户不可见struct func_table -- 字符串/函数指针对照表,定义如下struct func_table{	const unsigned char symbol[MAX_SYMBOL_LEN];	callback_ptr func;};其中callback_ptr是一个typedef,即回调函数指针类型:typedef void (*callback_ptr)(const unsigned char *resource);示例代码:void play(const unsigned char *res){	//...}void hangup(const unsigned char *res){	//...}struct func_table table[]={	{"PLAY", play},	{"HANGUP", hangup}};void sys_init(){	struct FSM *fsm=fsm_load("fsm/ar.fsm", table, 2);	// ...}============================================================int fsm_doevent(struct FSM *fsm, const unsigned char *event);产生事件event,系统自动完成回调函数的执行和状态的迁移,成功返回0,出错返回非零。fsm -- FSM对象指针event -- 事件描述字符串示例代码:if(fsm_doevent(fsm, "1#") != 0){	printf("出错啦~\n");}============================================================void fsm_free(struct FSM *fsm);释放FSM对象所占用的资源。示例代码:fsm_free(fsm);fsm=NULL; // 防止"野指针"============================================================struct FSM *fsm_create(const struct func_table *funcv, int funcv);创建空的FSM对象。说明:此函数仅供功能扩展之用。============================================================intfsm_add(const char *state, const char *event, const char *next,         const char *func, const char *resource);手工添加一条状态迁移规则。说明:此函数仅供功能扩展之用。============================================================voidfsm_setstate(struct FSM *fsm, const unsigned char *state);强制跳转到指定状态,不执行任何回调函数。============================================================2. 配置文件格式配置文件为一文本文件,不妨规定扩展名.fsm,以示区别文件格式规定如下:以'#'开头的行为注释行,加载时将被直接忽略空行(或只含空白字符--空格或'\t'字符--的行)将被直接忽略非注释行各栏之间用任意多个空白字符隔开各栏不得超过MAX_SYMBOL_LEN个字符,不得包含空白字符无关紧要的栏可以写作none,但不可以为空不区分大小写第一个非注释行格式为InitState	StateName定义了初始状态的名字以后每个非注释行的格式均为State	Event	Next	Func	Resource分别定义一条状态迁移规则3. 内部实现为提高效率,状态迁移规则和函数对照表采用hash表存放,具体细节见程序注释。4. 文件列表fsm.h		函数/数据结构声明fsm.c		函数实现hash.h & hash.c	一个简单的hash表实现sample.c	示例代码sample.fsm	示例配置文件readme.txt	本文件Makefile	就是Makefile。。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -