嵌入式軟件中狀態(tài)機(jī)的抽象與實(shí)現(xiàn)
(作者未知) 2012/1/15
摘要:文中提出了在嵌入式軟件中把狀態(tài)機(jī)作為一個獨(dú)立模塊從控制模塊中抽象出來的思想,描述了抽象出來的狀態(tài)機(jī)模塊。并介紹了如何將這種狀態(tài)機(jī)抽象模塊應(yīng)用到實(shí)際項目中。
關(guān)鍵詞:嵌入式軟件;狀態(tài)機(jī);模塊化
1 引言
從傳統(tǒng)的工業(yè)控制到人們?nèi)粘I钪械碾娨、手機(jī),到處都可以見到實(shí)時嵌入式系統(tǒng)的應(yīng)用。實(shí)時嵌入式系統(tǒng)與普通計算機(jī)系統(tǒng)的差別首先是資源較少,其次是系統(tǒng)不僅要保證計算產(chǎn)生正確結(jié)果,而且還要保證在規(guī)定時間內(nèi)產(chǎn)生結(jié)果。
在開發(fā)嵌入式實(shí)時系統(tǒng)的軟件時,經(jīng)常需要用多個狀態(tài)來描述系統(tǒng)的行為。這些狀態(tài)的狀態(tài)變化和轉(zhuǎn)移形成了狀態(tài)
機(jī)。如果能抽象出一種通用的狀態(tài)機(jī)模型,則可減輕嵌入式軟件開發(fā)人員的工作負(fù)擔(dān),同時提高軟件的可讀性,增強(qiáng)軟件的可維護(hù)性和可擴(kuò)充性。
2 抽象狀態(tài)機(jī)的意義
在實(shí)時程序中,執(zhí)行速度和各事件之間的配合是非常重要的,但軟件中的結(jié)構(gòu)化設(shè)計和數(shù)據(jù)隱藏等方法也同樣十分
重要。如果在處理速度、硬件資源和開發(fā)工具允許的范圍內(nèi)充分將軟件劃分為各個獨(dú)立的模塊,將可以提高程序的可維護(hù)性,并為軟件升級奠定良好的基礎(chǔ)。
雖然在嵌入式實(shí)時軟件中常用的開發(fā)語言———C 語言不直接支持模塊,但可以把一個文件當(dāng)作一個模塊來處理。在C 語言中,被說明為是靜態(tài)函數(shù)和靜態(tài)變量的內(nèi)容,可以被同一文件內(nèi)的其它例程調(diào)用,而不能由文件外的程序調(diào)用[1 ] 。在不支持靜態(tài)聲明的應(yīng)用中,也可以人為的規(guī)定不作外部引用(或除少數(shù)特殊應(yīng)用外不作外部引用) 。待組織成不同的模塊文件后,可用頭文件的形式說明函數(shù)和變量類型,以便模塊間相互調(diào)用。用這種方式構(gòu)造的典型的模塊文件的組織形式如下[1 ] :包含頭文件說明函數(shù)和變量;說明全局變量;說明模塊內(nèi)的函數(shù)原型和變量;接口或輸入函數(shù)的源代碼;初始化函數(shù)的源代碼。
在實(shí)際的工程應(yīng)用中,比較容易就可以將諸如主程序模塊、控制程序模塊之類的功能抽象出來,卻往往習(xí)慣將狀態(tài)機(jī)的處理混入控制程序模塊中。如果這么做,將會在控制程序模塊中引入大量的變量賦值和條件判斷,增大軟件開發(fā)的難度并給系統(tǒng)帶來安全隱患,因?yàn)殚_發(fā)人員可能會弄不清楚變量的意義而不得不反復(fù)查閱設(shè)計文檔,或者因混淆眾多變量而錯誤的對某些變量進(jìn)行賦值。這種情況在系統(tǒng)開發(fā)后期尤為明顯。
在工程實(shí)踐中發(fā)現(xiàn):可以將狀態(tài)機(jī)作為一個單獨(dú)的模塊抽象出來。這樣做的好處是進(jìn)一步增強(qiáng)了軟件的可讀性,而
且狀態(tài)機(jī)模塊作為一個獨(dú)立模塊,可以在其它工程項目中實(shí)現(xiàn)代碼級的軟件重用,甚至可以影響到設(shè)計級的重用。
.......
附件下載:點(diǎn)擊下載查閱全文
|