徐玉蓮
(新疆農(nóng)業(yè)職業(yè)技術(shù)學院 信息技術(shù)分院, 昌吉 831100)
隨著計算機程序復雜化程度逐漸提高,對系統(tǒng)軟件更新速度的需求逐漸提升,C語言兼具高初級語言特性,支持對硬件的直接操作,在普遍應用的嵌入式軟件開發(fā)過程中使用較多的便是C語言,在提高靈活性的同時易增加復雜代碼管理和維護的難度,在特定硬件平臺上建立的嵌入式系統(tǒng)編程需解決復雜的硬件操作問題,并實現(xiàn)應用層次上的通用性,需采用良好的軟件框架完成軟件開發(fā)過程,提高程序代碼的重用性、拓展性,實現(xiàn)工程化管理,提高軟件系統(tǒng)的開發(fā)和維護效率。
分層技術(shù)可將復雜問題轉(zhuǎn)化成具體的應用功能,隨著嵌入式系統(tǒng)應用越來越復雜,對嵌入式系統(tǒng)采用分層技術(shù)進行設計,可使軟件開發(fā)效率得以有效提升。
為實現(xiàn)復雜的軟件系統(tǒng)功能,需有效分解開發(fā)需求,將軟件按照概念層次、功能等的不同劃分為相應的軟件模塊,在此基礎上確定不同模塊間的關系。對軟件邏輯架構(gòu)進行分層時需遵循的原則為:兼顧功能顆粒度和可重用性,各層針對不同的問題能夠提供相應的解決方案,上層應用能夠從下層獲取相應支撐,以監(jiān)測環(huán)境溫度功能為例,根據(jù)概念的不同將其劃分為采集層、處理層、顯示層等,確保整體功能遞進實現(xiàn);最大程度降低層與層間的相關性,避免某一層出現(xiàn)問題后對軟件系統(tǒng)的整體性能產(chǎn)生影響,如顯示層沒有處理或修改溫度數(shù)據(jù)的權(quán)限,使處理層的邏輯實現(xiàn)更加獨立快速;確保軟件功能的高內(nèi)聚、低耦合,進行各層內(nèi)部模塊劃分時需按照任務分解、功能優(yōu)化、重用程度完成[1]。
遵循最優(yōu)模塊化的設計思路,詳細設計系統(tǒng)邏輯架構(gòu),針對嵌入式應用軟硬層次比較明顯等特點,對軟件功能模塊進行梳理和劃分:梳理嵌入式系統(tǒng)應用需求(采取自頂向下的方法),邏輯功能抽象化處理后得到明確的概念層次,在此基礎上轉(zhuǎn)化為軟件層次,屬于漸進過程,以電子羅盤開發(fā)為例,為了確定具體的方向,首先需對方位數(shù)據(jù)進行準確采集,通過傳感器數(shù)據(jù)的采集(包含x、y、z軸)實現(xiàn)方位數(shù)據(jù)的轉(zhuǎn)換,最后在顯示屏上顯示輸出,整個過程的邏輯層次可劃分為硬件訪問、硬件驅(qū)動、數(shù)據(jù)采集及處理、頁面顯示等;抽象處理硬件功能,細化應用開發(fā)所需硬件操作原語(采取自底向上方式),開發(fā)嵌入式系統(tǒng)時相應專用功能的實現(xiàn)大多通過軟件驅(qū)動底層硬件完成,為了簡化系統(tǒng)開發(fā)過程,提高程序代碼的復用性,對硬件功能進行封裝處理,降低硬件的相關性,以傳感器采集數(shù)據(jù)為例,開發(fā)時分為硬件驅(qū)動和功能拓展兩個層次,降低了系統(tǒng)的耦合性;對于鄰層間的調(diào)用關系和信息交互的檢驗則需逐層檢測(結(jié)合使用自頂向下和自底向上方式),通過合并整合各層的功能,盡量實現(xiàn)最優(yōu)模塊化[2]。
在面向?qū)ο髮η度胧较到y(tǒng)進行“去中心化”設計的基礎上,可將系統(tǒng)邏輯架構(gòu)區(qū)分為:應用管理層(負責界面交互的實現(xiàn)及調(diào)度業(yè)務邏輯等)、算法協(xié)議層(負責協(xié)議解析、文件及數(shù)據(jù)庫管理等)、功能拓展層、硬件驅(qū)動層(實現(xiàn)與硬件的無關性),為降低業(yè)務應用的耦合性,提高軟件功能模塊的開發(fā)效率,實現(xiàn)功能在使用同類或相似技術(shù)時,通過聚合處理降低模型算法及硬件操作間的耦合性,多個應用邏輯可由一個成熟的模型算法實現(xiàn),從而使功能在分析設計過程中更加清晰明確,所構(gòu)建的應用程序的結(jié)構(gòu)具備較高的靈活性、可重用性和拓展性,能夠適應不同的硬件環(huán)境。
為提高項目開發(fā)效率,基于C語言的嵌入式系統(tǒng)需靈活運用C語言的編程模式,提高代碼編寫質(zhì)量及維護效率。
C語言的優(yōu)勢在于其使用的靈活性,但易出現(xiàn)文件組織混亂、降低代碼可閱讀性等問題,可依據(jù)上述系統(tǒng)邏輯架構(gòu)設計(C語言不提供軟件框架管理)完成工程文件管理原則的構(gòu)建,從而使代碼文件的開發(fā)和管理能力得以有效提升,代碼管理主要涉及到兩部分:文件目錄管理,文件目錄的組織同樣需按照分層原則,遵循統(tǒng)一規(guī)范對各文件命名,在根目錄存放主程序、全局變量文件,在Apfunc中存放應用管理層文件,在Modelfunc中存放算法協(xié)議層,在Hardext中存放功能拓展層,在Hardopt中存放硬件驅(qū)動層文件,可通過建立Comfuc文件夾用來存放涉及到的第三方通用函數(shù)庫,利用分層模型的優(yōu)勢完成開發(fā)過程,不同文件夾可并行開發(fā)工作,滿足工程化管理需求;功能模塊管理,最大程度降低全局變量的使用量,通過函數(shù)參數(shù)實現(xiàn)數(shù)據(jù)的傳遞,以實現(xiàn)模塊化設計的高內(nèi)聚性,聚合相同或相似的業(yè)務應用功能、硬件操作功能,使其能夠在同一文件內(nèi)實現(xiàn)[3]。
充分運用C語言的結(jié)構(gòu)類型和函數(shù)指針,實現(xiàn)類似面向?qū)ο蟮闹匾匦浴?/p>
對象屬性的繼承可通過結(jié)構(gòu)嵌套實現(xiàn),以羅盤對象參數(shù)繼承為例[4]。
typedef struct_compassbase{ //羅盤基類
Int radius; //羅盤半徑
Int centerx, centery; //羅盤中心
} compassbase;
Typedef struct_compass {
Struct _ compassbase ;
Int handle; //指針位置
Int handle //指針位置
}
利用函數(shù)指針可封裝對象屬性和對象實現(xiàn),羅盤基類封裝如下:
struct_compassbase;
void (* drawcompass) (struct _compassbase * p com-base) ;
struct _ compassbase { //羅盤基類
Int radius ; //羅盤半徑
Int centerx, centery; // 羅盤中心
Draw compass pdrawcompass ;
}
通過函數(shù)模塊實現(xiàn)重用功能,函數(shù)定義實現(xiàn)方式:宏定義,宏是類型無關,降低額外開銷;函數(shù),作為可重復使用的代碼,函數(shù)能夠獨立實現(xiàn)某功能。通過使用角速度傳感器制作電子羅盤,函數(shù)的調(diào)用關系描述如下[5]。
當前方位的實時顯示在LCD顯示屏上完成,可對功能模塊(算法協(xié)議層、功能拓展層、硬件驅(qū)動層)進行復用,
通過羅盤角度函數(shù)(位于算法模型層)的調(diào)用獲取angle,通過畫線函數(shù)(位于功能拓展層)的調(diào)用獲取畫指針函數(shù),應用管理層示例代碼為:unit draw_ compass (unit angle, unit pcolor)
通過計算將傳感器獲取數(shù)據(jù)(xyz值)轉(zhuǎn)換為指針角度,以確定羅盤指針方位,算法模型層示例代碼為:uint cac_ compass (unit x, unit y, unitz );
功能拓展層的畫線、調(diào)用畫點函數(shù)示例代碼為:uint lcd_ line (unit x 1, unit y1, unit x2, unit y2, uint pcolor);
硬件驅(qū)動層驅(qū)動LID進行畫點的示例代碼為:uint lcd_pixel(unit x, unit y, unint pcolor)。
C語言涉及到較多的含有參數(shù)和函數(shù)的表達式,在程序研究中關于main函數(shù)的變化較為關鍵,在main可編輯函數(shù)中的參數(shù)的含義及個數(shù)由agent表示,分析判斷作為指導性參數(shù)值的agent能夠獲取函數(shù)相關的即時數(shù)組信息。操作系統(tǒng)的函數(shù)變化決定著函數(shù)的配置啟動,因此對其初始變化值要求較為嚴格,需先進行函數(shù)的歸零處理,通過不同數(shù)值的參數(shù)的提取(在各函數(shù)變換模塊中)使計算機程序進入有效運行狀態(tài),main語言在程序進入預定設計軌道后能夠?qū)Τ绦虻南乱徊竭\行進行自動控制(即嵌入式的系統(tǒng)模式),在嵌入過程中通過交叉比對實現(xiàn)相關參數(shù)原有數(shù)據(jù)值的保留,自動地刪除無用的數(shù)據(jù),并修改運行錯誤和編輯錯位,在嵌入交匯過程中系統(tǒng)自動甄別所出現(xiàn)的語言混亂情況,重新擬定新main函數(shù)獲取相應的函數(shù)編輯式,若仍無法完成重新定義則自動劃分函數(shù)為初始程序處理,從而確保函數(shù)間的有效串接,使系統(tǒng)程序能較好的適應新的語言環(huán)境[6]。
本文主要研究了C語言編程軟件在嵌入式系統(tǒng)中開發(fā)過程的實現(xiàn)路徑,依據(jù)分層設計的原則,完成了功能模塊劃分,對系統(tǒng)軟件的編程思路進行了詳細闡述,介紹了軟件開發(fā)過程中的程序框架、模塊重用等設計過程的實現(xiàn)方法,結(jié)合C語言編程使用的函數(shù)表達功能,提高了C語言的靈活性,同時滿足了軟件開發(fā)工程化的需求,為在嵌入式系統(tǒng)開發(fā)中使用C語言提供參考。