本發(fā)明屬于軟件可靠性設(shè)計技術(shù)領(lǐng)域,具體涉及一種嵌入式軟件狀態(tài)機的實現(xiàn)方法,提高嵌入式軟件容錯能力的方法。
背景技術(shù):
隨著武器系統(tǒng)精確打擊能力越來越強,信息化程度越來越高,各專業(yè)對彈上嵌入軟件也有了更高的要求。傳統(tǒng)嵌入式軟件由于與制導(dǎo)機交互狀態(tài)繁多,代碼中包含大量的if…else…和switch…case…語句,軟件的可維護性、安全性較差。在該情況下,如果總體對通訊協(xié)議進(jìn)行一些修改,則軟件需要進(jìn)行大量的改動,大大增加了軟件開發(fā)人員的工作量和工作難度,也給后續(xù)涉及到的軟件文檔的修改和評測帶來了繁瑣的工作量。
狀態(tài)機是一種具有指定數(shù)目的狀態(tài)的概念機。該概念機在某個指定的時刻僅處于一個狀態(tài),狀態(tài)的改變是由輸入信號的變化而引起的.作為對輸入信號的響應(yīng),系統(tǒng)可能轉(zhuǎn)變到相同或不同的狀態(tài),而輸出事件可能是任意產(chǎn)生的。在程序設(shè)計中引入狀態(tài)機的思想,可使復(fù)雜的程序更清晰,程序修改起來更容易。采用狀態(tài)機思想來進(jìn)行嵌入式軟件的設(shè)計則可以大大提高軟件的可維護性、安全性,降低總體對通訊協(xié)議修改后給軟件改動所帶來的工作量,涉及到的后續(xù)軟件文檔的修改和評測的工作量也大為降低。
在大氣測量裝置軟件中還沒有嵌入式軟件狀態(tài)機的實現(xiàn)方法,亟需針對其進(jìn)行研制滿足設(shè)計要求。
技術(shù)實現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題是提供一種大氣測量裝置軟件中嵌入式軟件狀態(tài)機的實現(xiàn)方法,從而減少程序的判斷語句,并提高可修改性。
為了實現(xiàn)這一目的,本發(fā)明采取的技術(shù)方案是:
一種大氣測量裝置軟件中嵌入式軟件狀態(tài)機的實現(xiàn)方法,大氣測量裝置軟件采用狀態(tài)機進(jìn)行流程控制和任務(wù)觸發(fā),軟件在正常工作模式、半實物仿真工作模式、地面測試模式、軟件傳輸模式程序架構(gòu)相同;添加狀態(tài)機動作執(zhí)行函數(shù),用來執(zhí)行狀態(tài)機產(chǎn)生過程中的中間操作;根據(jù)型號的系統(tǒng)屬性,對于中間存在的特定狀態(tài)通過空信號來遷移;具體包括如下步驟:
(1)確定大氣測量裝置狀態(tài)機方程:
驅(qū)動方程:Z=G[X,Qn]
狀態(tài)方程:(Qn+1,E)=H[Z,Qn]
狀態(tài)方程中各元素說明如下:
X為輸入信號,該信號為外部制導(dǎo)計算機或測試設(shè)備輸入的指令、數(shù)據(jù),大氣測量裝置軟件根據(jù)通訊協(xié)議對其進(jìn)行驗證,如果滿足通訊協(xié)議要求,則將其當(dāng)作輸入信號;
Qn為現(xiàn)態(tài);Qn+1為次態(tài);
大氣測量裝置軟件涉及19種狀態(tài),分別為:
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
程序剛上電時,設(shè)置最初狀態(tài)為State_PowerOn狀態(tài),表示大氣測量裝置上電狀態(tài);上述19個狀態(tài)根據(jù)該型號通訊協(xié)議及程序的具體實現(xiàn)過程來命名和設(shè)定;根據(jù)該型號任務(wù)的特點,第16種狀態(tài)State_FileReadTrans可通過空信號進(jìn)行遷移,達(dá)到驅(qū)動整個程序流動的目的;
Z:驅(qū)動信號,大氣測量裝置軟件對輸入信號進(jìn)行分類,得到19種驅(qū)動信號,分別為:
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
各驅(qū)動信號的命名及驅(qū)動信號數(shù)量根據(jù)該型號的通訊協(xié)議來設(shè)定;
其中第19個信號SigNull為空信號,它的產(chǎn)生對應(yīng)外界輸入的錯誤信號或者是外界的空輸入,在系統(tǒng)設(shè)定的狀態(tài)下驅(qū)動該狀態(tài)發(fā)生遷移;
G:驅(qū)動信號產(chǎn)生函數(shù);在大氣測量裝置軟件中定義如下:
Uint16 SignalGeneration(Uint16 *pRecvFrame,Uint16nLen,StateMachineSignal*psig);
函數(shù)功能:軟件對接收到的制導(dǎo)計算機指令、數(shù)據(jù)進(jìn)行驗證處理后生成狀態(tài)機的驅(qū)動信號;
H:大氣機狀態(tài)生成函數(shù);在大氣測量裝置軟件中的定義如下:
Uint16StateGeneration(Signal,StateOld,&StateNew,&nFunc);
函數(shù)功能:根據(jù)輸入的驅(qū)動信號與上一拍狀態(tài)一起生成狀態(tài)機本拍的狀態(tài) 和動作執(zhí)行函數(shù);
E:狀態(tài)機動作執(zhí)行函數(shù);在大氣測量裝置軟件中有20個動作執(zhí)行函數(shù),分別為:
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
上述動作執(zhí)行函數(shù)在程序運行過程中對系統(tǒng)設(shè)定的中間過程進(jìn)行置位,輔助各狀態(tài)進(jìn)行函數(shù)操作;
(2)確定狀態(tài)機操作步驟:
(2.1)驅(qū)動信號生成
大氣測量裝置軟件對接收到的制導(dǎo)計算機指令、數(shù)據(jù)進(jìn)行處理后生成狀態(tài)機的驅(qū)動信號;
(2.2)狀態(tài)發(fā)生
驅(qū)動信號與上一拍狀態(tài)信號一起生成狀態(tài)機本拍的狀態(tài)信號和動作執(zhí)行函數(shù);
(2.3)動作執(zhí)行
動作執(zhí)行函數(shù)根據(jù)動作執(zhí)行標(biāo)志置位相應(yīng)任務(wù)觸發(fā)標(biāo)志;
狀態(tài)機操作在大氣測量裝置軟件主循環(huán)中5ms定時標(biāo)志未置位時進(jìn)行,驅(qū)動信號生成時對輸入信息按通訊協(xié)議規(guī)定進(jìn)行校驗;狀態(tài)表中所有元素均進(jìn)行定義,避免未定義操作對狀態(tài)機造成的影響。
進(jìn)一步的,如上所述的一種大氣測量裝置軟件中嵌入式軟件狀態(tài)機的實現(xiàn)方法,其中:狀態(tài)發(fā)生操作基于二維狀態(tài)轉(zhuǎn)換表實現(xiàn)。
本發(fā)明技術(shù)方案的有益效果在于:本方案中的狀態(tài)機根據(jù)型號任務(wù)特點,將傳統(tǒng)狀態(tài)機進(jìn)行部分改進(jìn),應(yīng)用到嵌入式軟件研制過程中,可使程序的判斷語句至少減少一半,并且編程思路清晰、編寫過程簡單、可修改性強,同時也滿足設(shè)計要求。
具體實施方式
下面結(jié)合具體實施例對本發(fā)明技術(shù)方案進(jìn)行詳細(xì)說明。
本發(fā)明一種大氣測量裝置軟件中嵌入式軟件狀態(tài)機的實現(xiàn)方法,大氣測量 裝置軟件采用狀態(tài)機進(jìn)行流程控制和任務(wù)觸發(fā),軟件在正常工作模式、半實物仿真工作模式、地面測試模式、軟件傳輸模式程序架構(gòu)相同;添加狀態(tài)機動作執(zhí)行函數(shù),用來執(zhí)行狀態(tài)機產(chǎn)生過程中的中間操作;根據(jù)型號的系統(tǒng)屬性,對于中間存在的特定狀態(tài)通過空信號來遷移;具體包括如下步驟:
(1)確定大氣測量裝置狀態(tài)機方程:
驅(qū)動方程:Z=G[X,Qn]
狀態(tài)方程:(Qn+1,E)=H[Z,Qn]
狀態(tài)方程中各元素說明如下:
X為輸入信號,該信號為外部制導(dǎo)計算機或測試設(shè)備輸入的指令、數(shù)據(jù),大氣測量裝置軟件根據(jù)通訊協(xié)議對其進(jìn)行驗證,如果滿足通訊協(xié)議要求,則將其當(dāng)作輸入信號;
Qn為現(xiàn)態(tài);Qn+1為次態(tài);
大氣測量裝置軟件涉及19種狀態(tài),分別為:
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
程序剛上電時,設(shè)置最初狀態(tài)為State_PowerOn狀態(tài),表示大氣測量裝置上電狀態(tài);上述19個狀態(tài)根據(jù)該型號通訊協(xié)議及程序的具體實現(xiàn)過程來命名和設(shè)定;根據(jù)該型號任務(wù)的特點,第16種狀態(tài)State_FileReadTrans可通過空信號進(jìn)行遷移,達(dá)到驅(qū)動整個程序流動的目的;
Z:驅(qū)動信號,大氣測量裝置軟件對輸入信號進(jìn)行分類,得到19種驅(qū)動信號,分別為:
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
各驅(qū)動信號的命名及驅(qū)動信號數(shù)量根據(jù)該型號的通訊協(xié)議來設(shè)定;
其中第19個信號SigNull為空信號,它的產(chǎn)生對應(yīng)外界輸入的錯誤信號或者是外界的空輸入,在系統(tǒng)設(shè)定的狀態(tài)下驅(qū)動該狀態(tài)發(fā)生遷移;
G:驅(qū)動信號產(chǎn)生函數(shù);在大氣測量裝置軟件中定義如下:
Uint16 SignalGeneration(Uint16 *pRecvFrame,Uint16nLen,StateMachineSignal*psig);
函數(shù)功能:軟件對接收到的制導(dǎo)計算機指令、數(shù)據(jù)進(jìn)行驗證處理后生成狀態(tài)機的驅(qū)動信號;
H:大氣機狀態(tài)生成函數(shù);在大氣測量裝置軟件中的定義如下:
Uint16StateGeneration(Signal,StateOld,&StateNew,&nFunc);
函數(shù)功能:根據(jù)輸入的驅(qū)動信號與上一拍狀態(tài)一起生成狀態(tài)機本拍的狀態(tài)和動作執(zhí)行函數(shù);
E:狀態(tài)機動作執(zhí)行函數(shù);在大氣測量裝置軟件中有20個動作執(zhí)行函數(shù),分別為:
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
上述動作執(zhí)行函數(shù)在程序運行過程中對系統(tǒng)設(shè)定的中間過程進(jìn)行置位,輔 助各狀態(tài)進(jìn)行函數(shù)操作;
(2)確定狀態(tài)機操作步驟:
(2.1)驅(qū)動信號生成
大氣測量裝置軟件對接收到的制導(dǎo)計算機指令、數(shù)據(jù)進(jìn)行處理后生成狀態(tài)機的驅(qū)動信號;
(2.2)狀態(tài)發(fā)生
驅(qū)動信號與上一拍狀態(tài)信號一起生成狀態(tài)機本拍的狀態(tài)信號和動作執(zhí)行函數(shù);狀態(tài)發(fā)生操作基于二維狀態(tài)轉(zhuǎn)換表實現(xiàn)。
(2.3)動作執(zhí)行
動作執(zhí)行函數(shù)根據(jù)動作執(zhí)行標(biāo)志置位相應(yīng)任務(wù)觸發(fā)標(biāo)志;
狀態(tài)機操作在大氣測量裝置軟件主循環(huán)中5ms定時標(biāo)志未置位時進(jìn)行,驅(qū)動信號生成時對輸入信息按通訊協(xié)議規(guī)定進(jìn)行校驗;狀態(tài)表中所有元素均進(jìn)行定義,避免未定義操作對狀態(tài)機造成的影響。