下面是System的代码规范:
1.system主体
和FSM的实现非常类似,只是没有S集合而已,每个SI成员从0开始定义.
它的主体函数也是一个swtich分发而已,不同的SI链接到不同的地方去,简单的函数调用,也就是FSM的分发函数加以相应输入作为参数.
2.system输出头文件
每个SO成员定义一个0开始的整数,每个输出函数的声明也放在这里,很简单.
3.system输出函数
system的输出,或者操作,是需要开发者改动的代码(其它的mirage自动生成),这里只是一些函数框架,这套规范保证这些输出函数将在适当的时候被调用.
源代码是最好的语言,来看例子吧:
--------------------------------------system头文件--------------------------------------
// This file is created by Mirage.
// Mirage is a freeware under the GNU General Public License.
// http://sourceforge.net/projects/mirages/
// mirages-developer@lists.sourceforge.net
--------------------------------------system的C文件--------------------------------------
// This file is created by Mirage.
// Mirage is a freeware under the GNU General Public License.
// http://sourceforge.net/projects/mirages/
// mirages-developer@lists.sourceforge.net
void SysTest(int nSysInput)
{
switch(nSysInput)
{
case SYSTEST_I_SI1:
Auto1(AUTO1_I_A1I1) ;
break ;
case SYSTEST_I_SI2:
Auto2(AUTO2_I_A2I1) ;
break ;
default:
break ;
}//switch
return ;
}
--------------------------------------system输出头文件--------------------------------------
// This file is created by Mirage.
// Mirage is a freeware under the GNU General Public License.
// http://sourceforge.net/projects/mirages/
// mirages-developer@lists.sourceforge.net
//define system output function
void SysTest_SO1() ; //System Output No.1
void SysTest_SO2() ; //System Output No.2
#endif // MIRGAE_SYS_O_H
--------------------------------------system输出C文件--------------------------------------
// This file is created by Mirage.
// Mirage is a freeware under the GNU General Public License.
// http://sourceforge.net/projects/mirages/
// mirages-developer@lists.sourceforge.net
C语言:
每个FSM的实现代码分以下几步:
1.头文件
我们需要把S,FI,FO的所有成员使用#define定义到一个整数上.为了调用方便,规定FI和FO从0开始逐个定义,S则从0开始,以SI的成员数量作为间隔定义.例如FI集合有15个成员,它们分别定义为0~14,而集合S有4个成员,它们将是0,15,30,45.
另外,还要定义S-FI组合,有了上面的规定大家可以看到,只要简单的把它们相加就是连续的整数了.
2.分发机制
很简单,就是一个switch语句,根据S-FI组合进入不同的case分句中,每个分句通常由状态变更语句和输出语句组成,由于我们将为每个输出编写一个单独的函数,而前者是一个赋值语句,大家可以想见每个case是很清爽的.
3.输出函数
每个输出一个函数,根据System的定义它必然链接到FSM输入或者System的输出上,它们也都是一个函数调用而已.
当然了,分发函数和状态变量的声明,头文件中还是需要有的.
下面是一个例子,它是由mirage生成的,熟悉C语言的读者可以很容易地读懂它们:
--------------------------------------h文件--------------------------------------
// This file is created by Mirage.
// Mirage is a freeware under the GNU General Public License.
// http://sourceforge.net/projects/mirages/
// mirages-developer@lists.sourceforge.net
#ifndef MIRAGE_AUTO1_H
#define MIRAGE_AUTO1_H
//define Auto1 state
#define AUTO1_S_A1S1 0 //Auto1 State No.1
#define AUTO1_S_A1S2 2 //Auto1 State No.2
//define Auto1 State-Input peer
#define AUTO1_A1S1_A1I1 0 //Auto1 State No.1-Auto1 Input No.1
#define AUTO1_A1S1_A1I2 1 //Auto1 State No.1-Auto1 Input No.1
#define AUTO1_A1S2_A1I1 2 //Auto1 State No.2-Auto1 Input2
#define AUTO1_A1S2_A1I2 3 //Auto1 State No.2-Auto1 Input2
extern int nAuto1CurState ;
void Auto1(int nAuto1Input) ; //Finite State Machine Auto1
#endif //MIRAGE_AUTO1_H
--------------------------------------C文件--------------------------------------
// This file is created by Mirage.
// Mirage is a freeware under the GNU General Public License.
// http://sourceforge.net/projects/mirages/
// mirages-developer@lists.sourceforge.net
后面我会介绍有限状态机(FSM:Finited State Machine)的概念,作为分析中心模块的基础,学习过离散数学和计算理论的读者可以略过.下一节介绍一套基于FSM的C和汇编语言编码规范,为前面的分析提供一个具体有效的实现途径.第四节我介绍根据这套编码规范开发的工具mirage的操作指南.最后提出一些有待讨论的改进方案,希望各位读者能够参与mirage的改进.