本发明属于软件可靠性设计技术领域,具体涉及一种嵌入式软件状态机的实现方法,提高嵌入式软件容错能力的方法。
背景技术:
随着武器系统精确打击能力越来越强,信息化程度越来越高,各专业对弹上嵌入软件也有了更高的要求。传统嵌入式软件由于与制导机交互状态繁多,代码中包含大量的if…else…和switch…case…语句,软件的可维护性、安全性较差。在该情况下,如果总体对通讯协议进行一些修改,则软件需要进行大量的改动,大大增加了软件开发人员的工作量和工作难度,也给后续涉及到的软件文档的修改和评测带来了繁琐的工作量。
状态机是一种具有指定数目的状态的概念机。该概念机在某个指定的时刻仅处于一个状态,状态的改变是由输入信号的变化而引起的.作为对输入信号的响应,系统可能转变到相同或不同的状态,而输出事件可能是任意产生的。在程序设计中引入状态机的思想,可使复杂的程序更清晰,程序修改起来更容易。采用状态机思想来进行嵌入式软件的设计则可以大大提高软件的可维护性、安全性,降低总体对通讯协议修改后给软件改动所带来的工作量,涉及到的后续软件文档的修改和评测的工作量也大为降低。
在大气测量装置软件中还没有嵌入式软件状态机的实现方法,亟需针对其进行研制满足设计要求。
技术实现要素:
本发明要解决的技术问题是提供一种大气测量装置软件中嵌入式软件状态机的实现方法,从而减少程序的判断语句,并提高可修改性。
为了实现这一目的,本发明采取的技术方案是:
一种大气测量装置软件中嵌入式软件状态机的实现方法,大气测量装置软件采用状态机进行流程控制和任务触发,软件在正常工作模式、半实物仿真工作模式、地面测试模式、软件传输模式程序架构相同;添加状态机动作执行函数,用来执行状态机产生过程中的中间操作;根据型号的系统属性,对于中间存在的特定状态通过空信号来迁移;具体包括如下步骤:
(1)确定大气测量装置状态机方程:
驱动方程:Z=G[X,Qn]
状态方程:(Qn+1,E)=H[Z,Qn]
状态方程中各元素说明如下:
X为输入信号,该信号为外部制导计算机或测试设备输入的指令、数据,大气测量装置软件根据通讯协议对其进行验证,如果满足通讯协议要求,则将其当作输入信号;
Qn为现态;Qn+1为次态;
大气测量装置软件涉及19种状态,分别为:
1.State_PowerOn
2.State_NormalOperation
3.State_Test
4.State_Simulation
5.State_SoftTrans
6.State_ParameterTrans
7.State_FileTransStart
8.State_FileIniStart
9.State_FileIniTrans
10.State_FileDataStart
11.State_FileDataTrans
12.State_FileVerify
13.State_FileProgram
14.State_FileTransEnd
15.State_FileReadStart
16.State_FileReadTrans
17.State_FileReadTransData
18.State_FileReadTransWait
19.State_Error
程序刚上电时,设置最初状态为State_PowerOn状态,表示大气测量装置上电状态;上述19个状态根据该型号通讯协议及程序的具体实现过程来命名和设定;根据该型号任务的特点,第16种状态State_FileReadTrans可通过空信号进行迁移,达到驱动整个程序流动的目的;
Z:驱动信号,大气测量装置软件对输入信号进行分类,得到19种驱动信号,分别为:
1.Sig0100
2.Sig0200.0
3.Sig0200.1
4.Sig0200.2
5.Sig0200.3
6.Sig0200.F
7.Sig1000
8.Sig1100
9.Sig1200.12
10.Sig1200.13
11.Sig1300
12.Sig1200.23
13.Sig1200.25
14.Sig1200.24
15.Sig1200.26
16.Sig1200.11
17.SigFileReadTransData
18.SigFileEnd
19.SigNull
各驱动信号的命名及驱动信号数量根据该型号的通讯协议来设定;
其中第19个信号SigNull为空信号,它的产生对应外界输入的错误信号或者是外界的空输入,在系统设定的状态下驱动该状态发生迁移;
G:驱动信号产生函数;在大气测量装置软件中定义如下:
Uint16 SignalGeneration(Uint16 *pRecvFrame,Uint16nLen,StateMachineSignal*psig);
函数功能:软件对接收到的制导计算机指令、数据进行验证处理后生成状态机的驱动信号;
H:大气机状态生成函数;在大气测量装置软件中的定义如下:
Uint16StateGeneration(Signal,StateOld,&StateNew,&nFunc);
函数功能:根据输入的驱动信号与上一拍状态一起生成状态机本拍的状态 和动作执行函数;
E:状态机动作执行函数;在大气测量装置软件中有20个动作执行函数,分别为:
1,DoDevInfoQuery
2,DoNormalOperation
3,DoSimulation
4,DoTest
5,DoSoftTrans
6,DoParameterTrans
7,DoFaultQuery
8,DoMemQuery
9,DoFileTransStart
10,DoFileIniStart
11,DoFileIniTrans
12,DoFileDataStart
13,DoFileDataTrans
14,DoFileVerify
15,DoFileProgram
16,DoFileTransEnd
17,DoFileReadStart
18,DoFileReadTrans
19,DoFileReadTransData
20,DoFileReadTransWait
上述动作执行函数在程序运行过程中对系统设定的中间过程进行置位,辅助各状态进行函数操作;
(2)确定状态机操作步骤:
(2.1)驱动信号生成
大气测量装置软件对接收到的制导计算机指令、数据进行处理后生成状态机的驱动信号;
(2.2)状态发生
驱动信号与上一拍状态信号一起生成状态机本拍的状态信号和动作执行函数;
(2.3)动作执行
动作执行函数根据动作执行标志置位相应任务触发标志;
状态机操作在大气测量装置软件主循环中5ms定时标志未置位时进行,驱动信号生成时对输入信息按通讯协议规定进行校验;状态表中所有元素均进行定义,避免未定义操作对状态机造成的影响。
进一步的,如上所述的一种大气测量装置软件中嵌入式软件状态机的实现方法,其中:状态发生操作基于二维状态转换表实现。
本发明技术方案的有益效果在于:本方案中的状态机根据型号任务特点,将传统状态机进行部分改进,应用到嵌入式软件研制过程中,可使程序的判断语句至少减少一半,并且编程思路清晰、编写过程简单、可修改性强,同时也满足设计要求。
具体实施方式
下面结合具体实施例对本发明技术方案进行详细说明。
本发明一种大气测量装置软件中嵌入式软件状态机的实现方法,大气测量 装置软件采用状态机进行流程控制和任务触发,软件在正常工作模式、半实物仿真工作模式、地面测试模式、软件传输模式程序架构相同;添加状态机动作执行函数,用来执行状态机产生过程中的中间操作;根据型号的系统属性,对于中间存在的特定状态通过空信号来迁移;具体包括如下步骤:
(1)确定大气测量装置状态机方程:
驱动方程:Z=G[X,Qn]
状态方程:(Qn+1,E)=H[Z,Qn]
状态方程中各元素说明如下:
X为输入信号,该信号为外部制导计算机或测试设备输入的指令、数据,大气测量装置软件根据通讯协议对其进行验证,如果满足通讯协议要求,则将其当作输入信号;
Qn为现态;Qn+1为次态;
大气测量装置软件涉及19种状态,分别为:
1.State_PowerOn
2.State_NormalOperation
3.State_Test
4.State_Simulation
5.State_SoftTrans
6.State_ParameterTrans
7.State_FileTransStart
8.State_FileIniStart
9.State_FileIniTrans
10.State_FileDataStart
11.State_FileDataTrans
12.State_FileVerify
13.State_FileProgram
14.State_FileTransEnd
15.State_FileReadStart
16.State_FileReadTrans
17.State_FileReadTransData
18.State_FileReadTransWait
19.State_Error
程序刚上电时,设置最初状态为State_PowerOn状态,表示大气测量装置上电状态;上述19个状态根据该型号通讯协议及程序的具体实现过程来命名和设定;根据该型号任务的特点,第16种状态State_FileReadTrans可通过空信号进行迁移,达到驱动整个程序流动的目的;
Z:驱动信号,大气测量装置软件对输入信号进行分类,得到19种驱动信号,分别为:
1.Sig0100
2.Sig0200.0
3.Sig0200.1
4.Sig0200.2
5.Sig0200.3
6.Sig0200.F
7.Sig1000
8.Sig1100
9.Sig1200.12
10.Sig1200.13
11.Sig1300
12.Sig1200.23
13.Sig1200.25
14.Sig1200.24
15.Sig1200.26
16.Sig1200.11
17.SigFileReadTransData
18.SigFileEnd
19.SigNull
各驱动信号的命名及驱动信号数量根据该型号的通讯协议来设定;
其中第19个信号SigNull为空信号,它的产生对应外界输入的错误信号或者是外界的空输入,在系统设定的状态下驱动该状态发生迁移;
G:驱动信号产生函数;在大气测量装置软件中定义如下:
Uint16 SignalGeneration(Uint16 *pRecvFrame,Uint16nLen,StateMachineSignal*psig);
函数功能:软件对接收到的制导计算机指令、数据进行验证处理后生成状态机的驱动信号;
H:大气机状态生成函数;在大气测量装置软件中的定义如下:
Uint16StateGeneration(Signal,StateOld,&StateNew,&nFunc);
函数功能:根据输入的驱动信号与上一拍状态一起生成状态机本拍的状态和动作执行函数;
E:状态机动作执行函数;在大气测量装置软件中有20个动作执行函数,分别为:
1,DoDevInfoQuery
2,DoNormalOperation
3,DoSimulation
4,DoTest
5,DoSoftTrans
6,DoParameterTrans
7,DoFaultQuery
8,DoMemQuery
9,DoFileTransStart
10,DoFileIniStart
11,DoFileIniTrans
12,DoFileDataStart
13,DoFileDataTrans
14,DoFileVerify
15,DoFileProgram
16,DoFileTransEnd
17,DoFileReadStart
18,DoFileReadTrans
19,DoFileReadTransData
20,DoFileReadTransWait
上述动作执行函数在程序运行过程中对系统设定的中间过程进行置位,辅 助各状态进行函数操作;
(2)确定状态机操作步骤:
(2.1)驱动信号生成
大气测量装置软件对接收到的制导计算机指令、数据进行处理后生成状态机的驱动信号;
(2.2)状态发生
驱动信号与上一拍状态信号一起生成状态机本拍的状态信号和动作执行函数;状态发生操作基于二维状态转换表实现。
(2.3)动作执行
动作执行函数根据动作执行标志置位相应任务触发标志;
状态机操作在大气测量装置软件主循环中5ms定时标志未置位时进行,驱动信号生成时对输入信息按通讯协议规定进行校验;状态表中所有元素均进行定义,避免未定义操作对状态机造成的影响。