- 相關(guān)推薦
C語言嵌入式系統(tǒng)編程軟件設(shè)計(jì)研究論文
摘要:近年來,C語言編程在嵌入式系統(tǒng)越來越受到廣大技術(shù)人員的青睞。介紹了C語言系統(tǒng)軟件的編程思路,闡述了嵌入式系統(tǒng)編程軟件架構(gòu)的基本知識(shí),包括模塊劃分、分層架構(gòu)、中斷服務(wù)程序編寫、系統(tǒng)軟件設(shè)計(jì)要領(lǐng)等,并給出了在編寫嵌入式系統(tǒng)C語言時(shí)基本架構(gòu)所包含的主要內(nèi)容。
關(guān)鍵詞:C語言;嵌入式系統(tǒng);程序框架
1概述
C語言的廣泛應(yīng)用主要是因其具有出色的移植性,能夠在多種不同體系結(jié)構(gòu)的軟件或硬件平臺(tái)上運(yùn)行;語法機(jī)制結(jié)構(gòu)緊湊、使用靈活并能直接訪問硬件;并具有很高的運(yùn)行效率。與一般形式的軟件編程相比,嵌入式系統(tǒng)有其特殊性,其面向的是一種專用的計(jì)算機(jī)系統(tǒng),既有應(yīng)用層次上的通用性,也有硬件操作的復(fù)雜性。因此,運(yùn)用高效合理的編程構(gòu)架和設(shè)計(jì)流程,規(guī)范管理編程的過程,對(duì)于提高程序的安全性可靠性是十分有利的,同時(shí)可以提高軟件的開發(fā)、執(zhí)行、維護(hù)效率。在常規(guī)軟件編程基礎(chǔ)上,把分層思想、模塊化思想、面向?qū)ο蠹夹g(shù)應(yīng)用到嵌入式C語言編程系統(tǒng)中,對(duì)嵌入式編程中的模塊劃分、分層架構(gòu)、中斷服務(wù)程序編寫、系統(tǒng)軟件設(shè)計(jì)思路進(jìn)行討論。嵌入式系統(tǒng)的高速發(fā)展使得對(duì)其編程的效率與質(zhì)量有了更高的要求和標(biāo)準(zhǔn),更需要一種更加普遍并高效的編程框架與基本標(biāo)準(zhǔn),以供廣大技術(shù)人員參考與使用。
2模塊劃分
模塊劃分是指把一個(gè)復(fù)雜的、綜合性的程序根據(jù)可實(shí)現(xiàn)的不同功能分成小段,每一小段可實(shí)現(xiàn)一個(gè)特定的功能。軟件應(yīng)盡量減少與外部模塊的聯(lián)系,提高程序的可移植性,并且明確其可實(shí)現(xiàn)的功能。一般情況下,嵌入式系統(tǒng)包含硬件驅(qū)動(dòng)模塊與軟件功能模塊。一個(gè)硬件驅(qū)動(dòng)模塊對(duì)應(yīng)一種特定的硬件,劃分軟件功能模塊時(shí)應(yīng)盡量滿足低偶合、高內(nèi)聚的基本要求。設(shè)計(jì)實(shí)現(xiàn)不同功能的模塊時(shí),有兩個(gè)重要原則,(1)模塊的獨(dú)立性,各個(gè)功能模塊之間不會(huì)有信息交叉混淆,不會(huì)互相影響互相依存,一個(gè)模塊中函數(shù)指令不需要其他模塊的變量,模塊之間的連接通過函數(shù)接口來實(shí)現(xiàn)。(2)正交性,各個(gè)功能模塊是唯一確定的,其中的變量與其實(shí)現(xiàn)的功能是無歧義的。在劃分模塊時(shí)有下列注意事項(xiàng):(1)某一個(gè)模塊提供給其他功能模塊所需調(diào)用的數(shù)據(jù)和外部函數(shù)需在頭文件(.h)中以extern關(guān)鍵字來聲明。(2)某功能模塊內(nèi)的全局變量與函數(shù)信息需在.c文件的開頭以static關(guān)鍵字進(jìn)行聲明。(3)一個(gè)模塊由一個(gè).h文件和一個(gè).c文件結(jié)合而成,此模塊的接口在頭文件(.h)中聲明。(4)頭文件(.h文件)中不能定義任何變量。定義變量是匯編階段的概念,會(huì)依據(jù)要求分配內(nèi)存。
3分層架構(gòu)
3.1分層方向
分層技術(shù)有兩個(gè)方向,目前嵌入式系統(tǒng)應(yīng)用層開發(fā)常用的方法是自頂向下,即從抽象到具體,從邏輯整體描述規(guī)范或者最頂層的程序?yàn)槠瘘c(diǎn)向下延伸到具體的操作模塊。自底向上是另一個(gè)思路,即從具體功能到抽象實(shí)現(xiàn),是在硬件驅(qū)動(dòng)開發(fā)中常用的方法。先分析功能模塊,使其作用在某個(gè)應(yīng)用對(duì)象上,分析常用操作的方式。這兩個(gè)方法各有優(yōu)勢(shì),為了達(dá)到較好的效果,在系統(tǒng)軟件設(shè)計(jì)過程中,可按照具體需求把這兩種方法混合使用。在邏輯分析應(yīng)用時(shí)采用自頂向下的方式,規(guī)范功能模塊的邏輯表達(dá),提高各個(gè)模塊的開發(fā)、執(zhí)行、移植效率。使用自底向上的方式規(guī)范硬件操作,把單位操作從中抽象出來,以便進(jìn)行上層應(yīng)用的模塊移植。
3.2分層架構(gòu)設(shè)計(jì)方法
分層是為了更好地滿足編程時(shí)各功能需要,把一個(gè)總體功能分解成一個(gè)個(gè)小功能,分層進(jìn)行實(shí)現(xiàn),再整合。這樣就需要把代碼分解成不同概念層次的模塊,確定各個(gè)模塊的聯(lián)系,進(jìn)行合理連接,最終實(shí)現(xiàn)復(fù)雜的總體功能。分層時(shí)有固定的需要遵循的原則:(1)分層時(shí)盡量減小層間關(guān)聯(lián)性,不要互相影響互相制約,降低模塊的可移植性。若某一層出現(xiàn)了錯(cuò)誤或問題,也可以不影響整個(gè)程序,只影響部分功能的實(shí)現(xiàn)。則技術(shù)人員可有針對(duì)性地對(duì)這一層進(jìn)行修改完善,不對(duì)其他層產(chǎn)生影響。(2)每層需要為該層的上一層提供支撐,每層可以獨(dú)立地解決一個(gè)特定的問題,如頻率采樣功能,可以分為數(shù)據(jù)采集層、數(shù)據(jù)處理層、數(shù)據(jù)顯示層等,層與層之間相互聯(lián)系,實(shí)現(xiàn)功能。(3)盡量實(shí)現(xiàn)層與層之間的高度內(nèi)聚、相互之間又低耦合,每層內(nèi)部對(duì)模塊進(jìn)行劃分,實(shí)現(xiàn)最優(yōu)模塊化,可移植性也最強(qiáng)。如果把功能分解得越簡單清晰,實(shí)現(xiàn)起來也就越容易,但若把功能目標(biāo)太過細(xì)化,又會(huì)引起調(diào)用次數(shù)增多,復(fù)雜程度增大的問題,所以合理劃分層次和模塊,是需要不斷嘗試和修改的。以自底向上、自頂向下與模塊化的方法進(jìn)行分層架構(gòu)。首先,對(duì)嵌入式系統(tǒng)應(yīng)用需求進(jìn)行梳理,為把各種不同的模塊功能抽象出來,先采取自頂向下的方向,再由軟件層次轉(zhuǎn)化到概念層次。這是一個(gè)必經(jīng)的過程,把目標(biāo)需求抽象出來,轉(zhuǎn)化為開發(fā)軟件的功能。比如,采集信號(hào)頻率,需要信號(hào)的數(shù)據(jù),輸入嵌入式系統(tǒng),經(jīng)算法和程序,在LCD屏上顯示頻率,這涉及到了硬件驅(qū)動(dòng)、數(shù)據(jù)采集與處理、數(shù)據(jù)顯示等層次。接下來是對(duì)硬件所需實(shí)現(xiàn)的功能進(jìn)行抽象,采用自底向上的方式,硬件操作原語是在抽象硬件所需實(shí)現(xiàn)功能時(shí)必須細(xì)化出來的。在嵌入式編程系統(tǒng)中,由軟件編程驅(qū)動(dòng)硬件來實(shí)現(xiàn)相應(yīng)的功能是很普遍的,為減少硬件功能的相互耦合與相互影響,對(duì)硬件功能進(jìn)行封裝,這不但有利于實(shí)現(xiàn)不同功能間的低耦合,還可以使當(dāng)前系統(tǒng)更加簡單易行,便于程序的執(zhí)行與應(yīng)用,提高程序的可移植性,F(xiàn)在更多地傾向于采用自頂向下與自底向上兩種方法相結(jié)合的思想,為確保每層的上一層調(diào)用都能得到滿足,需要逐層檢查相鄰層間是否有信息交叉,調(diào)用關(guān)系是否合理。最后,優(yōu)化模塊的功能設(shè)計(jì),整合各個(gè)功能層的功能,并進(jìn)行分類,盡可能實(shí)現(xiàn)模塊的最優(yōu)化。嵌入式系統(tǒng)需要進(jìn)行面向?qū)ο、去中心化設(shè)計(jì),設(shè)計(jì)時(shí)可以將系統(tǒng)邏輯架構(gòu)區(qū)分為以下4個(gè)不同的層次:(1)應(yīng)用管理層。實(shí)現(xiàn)功能調(diào)度、邏輯轉(zhuǎn)化、顯示界面關(guān)聯(lián)等功能。(2)算法協(xié)議層。實(shí)現(xiàn)的功能為數(shù)據(jù)庫訪問、協(xié)議管理與解析、算法實(shí)現(xiàn)、文件整理等。(3)功能拓展層。實(shí)現(xiàn)各個(gè)器件的功能可移植性、接口連接訪問等功能,并實(shí)現(xiàn)器件的低耦合性。④硬件驅(qū)動(dòng)層。硬件操作原語由硬件驅(qū)動(dòng)層提供,并實(shí)現(xiàn)硬件功能的獨(dú)立性。以上的分層方式與原則,整合了可實(shí)現(xiàn)相似功能或同類的功能模塊,使代碼應(yīng)用、算法與硬件功能之間的相互聯(lián)系大大減少,降低了各個(gè)功能在設(shè)計(jì)和實(shí)現(xiàn)時(shí)的耦合性,避免交叉混淆,使嵌入式系統(tǒng)的程序代碼結(jié)構(gòu)更加明晰,可用性更高?梢灾С侄鄠(gè)應(yīng)用邏輯的模型算法才是一個(gè)成熟的算法,可以在不同硬件環(huán)境中順利執(zhí)行與應(yīng)用的軟件功能模塊才是一個(gè)成熟的功能模塊,這樣可提高嵌入式系統(tǒng)軟件功能模塊的開發(fā)、執(zhí)行、移植效率。
4中斷服務(wù)程序
程序有時(shí)需要實(shí)現(xiàn)自動(dòng)停止正在運(yùn)行的程序并轉(zhuǎn)入處理新的情況的程序的功能,這就需要中斷服務(wù)程序處理新情況后再返回原被暫停的原程序斷點(diǎn)繼續(xù)運(yùn)行。中斷服務(wù)程序是嵌入式系統(tǒng)中的重要部分,因中斷系統(tǒng)可便捷地在系統(tǒng)的運(yùn)行過程中實(shí)現(xiàn)中斷,執(zhí)行中斷服務(wù)程序,并快速返回?cái)帱c(diǎn)繼續(xù)主程序,從而提高系統(tǒng)的運(yùn)行效率,并且在不產(chǎn)生中斷時(shí)不占用內(nèi)存,節(jié)約系統(tǒng)內(nèi)存,F(xiàn)在已經(jīng)出現(xiàn)許多在標(biāo)準(zhǔn)C語言上對(duì)中斷服務(wù)程序的拓展,出現(xiàn)了新的用于表示中斷函數(shù)的關(guān)鍵字,如_interrupt、#programinterrupt等。當(dāng)編寫中斷服務(wù)程序的函數(shù)時(shí),中斷現(xiàn)場(chǎng)入棧和出棧代碼會(huì)由編譯器會(huì)自動(dòng)為該函數(shù)提供。中斷服務(wù)程序需要滿足下列要求:(1)中斷服務(wù)程序不能有返回值。(2)不能給中斷服務(wù)程序傳遞參數(shù)。(3)中斷服務(wù)程序應(yīng)盡量簡單精煉。
5系統(tǒng)軟件設(shè)計(jì)
5.1C語言的面向?qū)ο蠡?/p>
中類的概念出現(xiàn)于在面向?qū)ο蟮恼Z言中。對(duì)某一類數(shù)據(jù)的特定操作的集合稱為類。類包含了兩個(gè)范疇:數(shù)據(jù)和操作。面向?qū)ο笥?個(gè)特性:封裝、繼承和多態(tài)。繼承是指通過結(jié)構(gòu)嵌套可實(shí)現(xiàn)對(duì)象屬性的繼承。封裝是指把數(shù)據(jù)和函數(shù)捆綁,調(diào)用時(shí)可把函數(shù)與數(shù)據(jù)一起調(diào)用。多態(tài)是指不需考慮函數(shù)的數(shù)據(jù)調(diào)用方式,調(diào)用函數(shù)時(shí)可有多種不同方式。但更多時(shí)候,為使軟件代碼結(jié)構(gòu)清晰易操作,只需將數(shù)據(jù)與函數(shù)進(jìn)行封裝即可。有時(shí)C語言編程時(shí),會(huì)出現(xiàn)數(shù)據(jù)與函數(shù)聯(lián)系不緊密,結(jié)構(gòu)混亂等問題,C語言模擬面向?qū)ο笫菫榱私鉀Q這些問題,意義并不在于模擬這個(gè)行為本身。
5.2模塊重用設(shè)計(jì)
一般通過模塊化來實(shí)現(xiàn)C語言代碼重用,其中包含頭文件和函數(shù)實(shí)現(xiàn)文件,即.h文件和對(duì)應(yīng)的.c文件。一般有兩種方式定義函數(shù):(1)宏定義,宏定義的優(yōu)點(diǎn)在于不會(huì)占用額外內(nèi)存,與函數(shù)的參數(shù)類型無關(guān),缺點(diǎn)在于一些功能是無法通過宏來實(shí)現(xiàn)的;(2)函數(shù),函數(shù)可實(shí)現(xiàn)的功能較多,并且可重復(fù)利用,可以接受其他函數(shù)的數(shù)據(jù),也可把運(yùn)算結(jié)果作為返回值輸出。
6結(jié)語
闡述了C語言嵌入式系統(tǒng)編程的所包含的基本元素與基本框架,合理的軟件設(shè)計(jì)架構(gòu)可大大提高程序的開發(fā)、執(zhí)行、移植效率,在實(shí)際應(yīng)用中有重要價(jià)值。
參考文獻(xiàn)
[1]肖宛昂,曾為民.如何用C語言開發(fā)DSP嵌入式系統(tǒng)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2003,(01):81-84.
[2]孫育紅.?dāng)?shù)字多媒體數(shù)據(jù)采編系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2017,40(15):122-125.
[3]黃亞克.嵌入式系統(tǒng)C語言編程方法研究[J].科技信息(學(xué)術(shù)研究),2007,(16):166-167.