當前位置:學問谷 >

行業範例 >設計 >

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

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

摘要:近年來,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.

  • 文章版權屬於文章作者所有,轉載請註明 https://xuewengu.com/flhy/sheji/4m6nq9.html