C語言嵌入式系統程式設計軟體設計研究論文

來源:果殼範文吧 5.77K

摘要:近年來,C語言程式設計在嵌入式系統越來越受到廣大技術人員的青睞。介紹了C語言系統軟體的程式設計思路,闡述了嵌入式系統程式設計軟體架構的基本知識,包括模組劃分、分層架構、中斷服務程式編寫、系統軟體設計要領等,並給出了在編寫嵌入式系統C語言時基本架構所包含的主要內容。

C語言嵌入式系統程式設計軟體設計研究論文

關鍵詞:C語言;嵌入式系統;程式框架

1概述

C語言的廣泛應用主要是因其具有出色的移植性,能夠在多種不同體系結構的軟體或硬體平臺上執行;語法機制結構緊湊、使用靈活並能直接訪問硬體;並具有很高的執行效率。與一般形式的軟體程式設計相比,嵌入式系統有其特殊性,其面向的是一種專用的計算機系統,既有應用層次上的通用性,也有硬體操作的複雜性。因此,運用高效合理的程式設計構架和設計流程,規範管理程式設計的過程,對於提高程式的安全性可靠性是十分有利的,同時可以提高軟體的開發、執行、維護效率。在常規軟體程式設計基礎上,把分層思想、模組化思想、面向物件技術應用到嵌入式C語言程式設計系統中,對嵌入式程式設計中的模組劃分、分層架構、中斷服務程式編寫、系統軟體設計思路進行討論。嵌入式系統的高速發展使得對其程式設計的效率與質量有了更高的要求和標準,更需要一種更加普遍並高效的程式設計框架與基本標準,以供廣大技術人員參考與使用。

2模組劃分

模組劃分是指把一個複雜的、綜合性的程式根據可實現的不同功能分成小段,每一小段可實現一個特定的功能。軟體應儘量減少與外部模組的聯絡,提高程式的可移植性,並且明確其可實現的功能。一般情況下,嵌入式系統包含硬體驅動模組與軟體功能模組。一個硬體驅動模組對應一種特定的硬體,劃分軟體功能模組時應儘量滿足低偶合、高內聚的基本要求。設計實現不同功能的模組時,有兩個重要原則,(1)模組的獨立性,各個功能模組之間不會有資訊交叉混淆,不會互相影響互相依存,一個模組中函式指令不需要其他模組的變數,模組之間的連線通過函式介面來實現。(2)正交性,各個功能模組是唯一確定的,其中的變數與其實現的功能是無歧義的。在劃分模組時有下列注意事項:(1)某一個模組提供給其他功能模組所需呼叫的資料和外部函式需在標頭檔案(.h)中以extern關鍵字來宣告。(2)某功能模組內的全域性變數與函式資訊需在.c檔案的開頭以static關鍵字進行宣告。(3)一個模組由一個.h檔案和一個.c檔案結合而成,此模組的介面在標頭檔案(.h)中宣告。(4)標頭檔案(.h檔案)中不能定義任何變數。定義變數是彙編階段的概念,會依據要求分配記憶體。

3分層架構

3.1分層方向

分層技術有兩個方向,目前嵌入式系統應用層開發常用的方法是自頂向下,即從抽象到具體,從邏輯整體描述規範或者最頂層的程式為起點向下延伸到具體的操作模組。自底向上是另一個思路,即從具體功能到抽象實現,是在硬體驅動開發中常用的方法。先分析功能模組,使其作用在某個應用物件上,分析常用操作的方式。這兩個方法各有優勢,為了達到較好的效果,在系統軟體設計過程中,可按照具體需求把這兩種方法混合使用。在邏輯分析應用時採用自頂向下的方式,規範功能模組的邏輯表達,提高各個模組的開發、執行、移植效率。使用自底向上的方式規範硬體操作,把單位操作從中抽象出來,以便進行上層應用的模組移植。

3.2分層架構設計方法

分層是為了更好地滿足程式設計時各功能需要,把一個總體功能分解成一個個小功能,分層進行實現,再整合。這樣就需要把程式碼分解成不同概念層次的模組,確定各個模組的聯絡,進行合理連線,最終實現複雜的總體功能。分層時有固定的需要遵循的原則:(1)分層時儘量減小層間關聯性,不要互相影響互相制約,降低模組的可移植性。若某一層出現了錯誤或問題,也可以不影響整個程式,隻影響部分功能的實現。則技術人員可有針對性地對這一層進行修改完善,不對其他層產生影響。(2)每層需要為該層的上一層提供支撐,每層可以獨立地解決一個特定的問題,如頻率取樣功能,可以分為資料採集層、資料處理層、資料顯示層等,層與層之間相互聯絡,實現功能。(3)儘量實現層與層之間的高度內聚、相互之間又低耦合,每層內部對模組進行劃分,實現最優模組化,可移植性也最強。如果把功能分解得越簡單清晰,實現起來也就越容易,但若把功能目標太過細化,又會引起呼叫次數增多,複雜程度增大的問題,所以合理劃分層次和模組,是需要不斷嘗試和修改的。以自底向上、自頂向下與模組化的方法進行分層架構。首先,對嵌入式系統應用需求進行梳理,為把各種不同的.模組功能抽象出來,先採取自頂向下的方向,再由軟體層次轉化到概念層次。這是一個必經的過程,把目標需求抽象出來,轉化為開發軟體的功能。比如,採集訊號頻率,需要訊號的資料,輸入嵌入式系統,經演算法和程式,在LCD屏上顯示頻率,這涉及到了硬體驅動、資料採集與處理、資料顯示等層次。接下來是對硬體所需實現的功能進行抽象,採用自底向上的方式,硬體操作原語是在抽象硬體所需實現功能時必須細化出來的。在嵌入式程式設計系統中,由軟體程式設計驅動硬體來實現相應的功能是很普遍的,為減少硬體功能的相互耦合與相互影響,對硬體功能進行封裝,這不但有利於實現不同功能間的低耦合,還可以使當前系統更加簡單易行,便於程式的執行與應用,提高程式的可移植性。現在更多地傾向於採用自頂向下與自底向上兩種方法相結合的思想,為確保每層的上一層呼叫都能得到滿足,需要逐層檢查相鄰層間是否有資訊交叉,呼叫關係是否合理。最後,優化模組的功能設計,整合各個功能層的功能,並進行分類,儘可能實現模組的最優化。嵌入式系統需要進行面向物件、去中心化設計,設計時可以將系統邏輯架構區分為以下4個不同的層次:(1)應用管理層。實現功能排程、邏輯轉化、顯示介面關聯等功能。(2)演算法協議層。實現的功能為資料庫訪問、協議管理與解析、演算法實現、檔案整理等。(3)功能拓展層。實現各個器件的功能可移植性、介面連線訪問等功能,並實現器件的低耦合性。④硬體驅動層。硬體操作原語由硬體驅動層提供,並實現硬體功能的獨立性。以上的分層方式與原則,整合了可實現相似功能或同類的功能模組,使程式碼應用、演算法與硬體功能之間的相互聯絡大大減少,降低了各個功能在設計和實現時的耦合性,避免交叉混淆,使嵌入式系統的程式程式碼結構更加明晰,可用性更高。可以支援多個應用邏輯的模型演算法才是一個成熟的演算法,可以在不同硬體環境中順利執行與應用的軟體功能模組才是一個成熟的功能模組,這樣可提高嵌入式系統軟體功能模組的開發、執行、移植效率。

4中斷服務程式

程式有時需要實現自動停止正在執行的程式並轉入處理新的情況的程式的功能,這就需要中斷服務程式處理新情況後再返回原被暫停的原程式斷點繼續執行。中斷服務程式是嵌入式系統中的重要部分,因中斷系統可便捷地在系統的執行過程中實現中斷,執行中斷服務程式,並快速返回斷點繼續主程式,從而提高系統的執行效率,並且在不產生中斷時不佔用記憶體,節約系統記憶體。現在已經出現許多在標準C語言上對中斷服務程式的拓展,出現了新的用於表示中斷函式的關鍵字,如_interrupt、#programinterrupt等。當編寫中斷服務程式的函式時,中斷現場入棧和出棧程式碼會由編譯器會自動為該函式提供。中斷服務程式需要滿足下列要求:(1)中斷服務程式不能有返回值。(2)不能給中斷服務程式傳遞引數。(3)中斷服務程式應儘量簡單精煉。

5系統軟體設計

5.1C語言的面向物件化

中類的概念出現於在面向物件的語言中。對某一類資料的特定操作的集合稱為類。類包含了兩個範疇:資料和操作。面向物件有3個特性:封裝、繼承和多型。繼承是指通過結構巢狀可實現物件屬性的繼承。封裝是指把資料和函式捆綁,呼叫時可把函式與資料一起呼叫。多型是指不需考慮函式的資料呼叫方式,呼叫函式時可有多種不同方式。但更多時候,為使軟體程式碼結構清晰易操作,只需將資料與函式進行封裝即可。有時C語言程式設計時,會出現資料與函式聯絡不緊密,結構混亂等問題,C語言模擬面向物件是為了解決這些問題,意義並不在於模擬這個行為本身。

5.2模組重用設計

一般通過模組化來實現C語言程式碼重用,其中包含標頭檔案和函式實現檔案,即.h檔案和對應的.c檔案。一般有兩種方式定義函式:(1)巨集定義,巨集定義的優點在於不會佔用額外記憶體,與函式的引數型別無關,缺點在於一些功能是無法通過巨集來實現的;(2)函式,函式可實現的功能較多,並且可重複利用,可以接受其他函式的資料,也可把運算結果作為返回值輸出。

6結語

闡述了C語言嵌入式系統程式設計的所包含的基本元素與基本框架,合理的軟體設計架構可大大提高程式的開發、執行、移植效率,在實際應用中有重要價值。

參考文獻

[1]肖宛昂,曾為民.如何用C語言開發DSP嵌入式系統[J].微控制器與嵌入式系統應用,2003,(01):81-84.

[2]孫育紅.數字多媒體資料採編系統設計與實現[J].現代電子技術,2017,40(15):122-125.

[3]黃亞克.嵌入式系統C語言程式設計方法研究[J].科技資訊(學術研究),2007,(16):166-167.

熱門標籤