前言:想要寫出一篇引人入勝的文章?我們特意為您整理了嵌入式系統(tǒng)下C語言編程軟件設(shè)計(jì)架構(gòu)范文,希望能給你帶來靈感和參考,敬請(qǐng)閱讀。
摘要:傳統(tǒng)編程過程中,不僅需要消耗大量時(shí)間,同時(shí)還會(huì)出現(xiàn)軟件資源空間占用率高等問題,為了切實(shí)解決這些問題,本研究指出了一種基于嵌入式系統(tǒng)的C語言編程軟件設(shè)計(jì)架構(gòu)方法,具體闡述了模塊劃分原則以及重點(diǎn)注意事項(xiàng),并從分層方向與分層架構(gòu)設(shè)計(jì)方法兩個(gè)方面分析了分層架構(gòu),依托于中斷服務(wù)程序,完成系統(tǒng)軟件開發(fā)與設(shè)計(jì)。
關(guān)鍵詞:嵌入式系統(tǒng);C語言;編程軟件
0引言
C語言在嵌入式軟件開發(fā)中有著非常廣泛的應(yīng)用,這是因?yàn)镃語言能夠很好的匹配高級(jí)與低級(jí)語言,同時(shí)簡(jiǎn)潔高效、靈活便捷,可以實(shí)現(xiàn)對(duì)硬件的直接操作,然而由于C語言具有較強(qiáng)的靈活性,也導(dǎo)致了代碼管理與維護(hù)問題較為繁瑣復(fù)雜[1]。和傳統(tǒng)形式的軟件編程相比較,嵌入式系統(tǒng)編程是以某個(gè)相應(yīng)的硬件平臺(tái)為載體的,服務(wù)的是一種專用的計(jì)算機(jī)系統(tǒng),不單單有對(duì)硬件操作的復(fù)雜性,同時(shí)還表現(xiàn)出應(yīng)用層次的通用性。所以,在實(shí)際開展軟件開發(fā)時(shí),選取適宜的軟件框架以及優(yōu)異的設(shè)計(jì)方法,加強(qiáng)對(duì)項(xiàng)目的工程化管理,可以有效地指導(dǎo)軟件開發(fā)的層次劃分以及功能模塊規(guī)劃設(shè)計(jì)。一方面可以很好的提升高級(jí)軟件系統(tǒng)開發(fā)速度與質(zhì)量,提高后期執(zhí)行與維護(hù)的便捷性,另一方面也可以有效地提升程序代碼的重用性、延伸性以及穩(wěn)定性。為了進(jìn)一步提高嵌入式系統(tǒng)視域下C語言編程軟件設(shè)計(jì)效率與品質(zhì),本文建立在現(xiàn)階段已有的主流軟件工程思想之上,將面向?qū)ο笤O(shè)計(jì)技術(shù)、分層技術(shù)等與C語言嵌入式編程結(jié)合起來,深入探討基于嵌入式系統(tǒng)的C語言編程軟件設(shè)計(jì)方法、分層架構(gòu)等,為不斷提高編程質(zhì)量與效率提供幫助。
1模塊劃分
模塊劃分主要表示為將某個(gè)龐大的、復(fù)雜程度較高的程序依照需要實(shí)現(xiàn)的不同功能,將其分割成若干個(gè)小段,并確保每一個(gè)小段都能夠完成一個(gè)相應(yīng)的功能[2]。軟件需要最大程度降低和外部模塊的接觸,進(jìn)一步改善程序的可移植性能,同時(shí)明確其能夠達(dá)到的既定功能。通常來說,嵌入式系統(tǒng)涵蓋了兩個(gè)方面的模塊,分別是硬件驅(qū)動(dòng)模塊以及軟件功能模塊[3]。其中一個(gè)硬件驅(qū)動(dòng)模塊往往只與某個(gè)特定的硬件相匹配,而在進(jìn)行軟件功能模塊劃分過程中,應(yīng)當(dāng)要最大程度符合低耦合、高內(nèi)聚的基礎(chǔ)需求[4]。在進(jìn)行模塊設(shè)計(jì)與開發(fā)以達(dá)到不同功能時(shí),需要嚴(yán)格遵守兩個(gè)關(guān)鍵性原則。(1)模塊的獨(dú)立性原則,每一個(gè)模塊均是獨(dú)立存在的,避免不同功能模塊之間出現(xiàn)信息交互的現(xiàn)象,既不會(huì)產(chǎn)生相互之間的影響,同時(shí)也不會(huì)產(chǎn)生相互之間的依存,任何一個(gè)模塊中的函數(shù)指令均不會(huì)與其他模塊變量建立聯(lián)系,不同功能模塊之間的連接是建立在函數(shù)接口基礎(chǔ)之上的。(2)正交性原則,所有的功能模塊都是唯一且確定的,而這中間的變量和其要達(dá)成的功能是相同的。在實(shí)際進(jìn)行模塊劃分過程中,應(yīng)當(dāng)要特別重視以下四點(diǎn)注意事項(xiàng):(1)當(dāng)一個(gè)功能模塊在為其他關(guān)聯(lián)功能模塊提供相關(guān)數(shù)據(jù)以及外部函數(shù)時(shí),應(yīng)當(dāng)要在頭文件(.h)中特別注明extern字樣進(jìn)行聲明。(2)某一個(gè)功能模塊內(nèi)包含的全局變量以及函數(shù)信息,應(yīng)當(dāng)要在頭文件(.c)中特別注明static字樣來聲明。(3)當(dāng)出現(xiàn)某一個(gè)功能模塊同時(shí)涵蓋有.h文件以及.c文件時(shí),需要在該功能模塊的接口文件中基于(.h)進(jìn)行聲明。(4)需要特別注意的是,(.h)頭文件中不可以對(duì)任何定量進(jìn)行定義,這是由于定義變量屬于匯編方面的內(nèi)容,會(huì)根據(jù)實(shí)際要求匹配相應(yīng)的內(nèi)存[5]。
2分層架構(gòu)
2.1分層方向
現(xiàn)階段技術(shù)分層主要涵蓋了兩個(gè)大方向,(1)自頂往下的方法,這種方法在當(dāng)下嵌入式系統(tǒng)應(yīng)用層設(shè)計(jì)中有著十分廣泛的應(yīng)用,不僅僅是一種從抽象向具體的開發(fā)模式,同時(shí)也是一種基于邏輯總體描述規(guī)范或最上層的程序?yàn)槌霭l(fā)點(diǎn)逐步往下拓展的操作模塊。(2)自底層往上的方法,是一種實(shí)際功能發(fā)展為抽象概念,這種模式在硬件驅(qū)動(dòng)開發(fā)與設(shè)計(jì)中有著較為普遍的應(yīng)用。先進(jìn)行功能模塊的探究,確保其能夠?qū)δ繕?biāo)應(yīng)用對(duì)象產(chǎn)生一定的作用,同時(shí)研究普遍使用的操作方式。不管是自頂往下方法,還是自底往上方法,兩者方法都有著各自的優(yōu)勢(shì)與劣勢(shì),為了確保能夠獲得理想的效果,在實(shí)際進(jìn)行系統(tǒng)軟件設(shè)計(jì)與開發(fā)時(shí),應(yīng)當(dāng)要在明確軟件實(shí)際功能需求的基礎(chǔ)之上,科學(xué)合理地使用某一種方法或兩者混合使用。例如在邏輯分析應(yīng)用過程中,應(yīng)當(dāng)要選取自頂往下的方法,進(jìn)一步明確功能模塊的邏輯性,降低不同功能模塊的開發(fā)時(shí)間,該是模塊執(zhí)行與移植的速度。在進(jìn)行硬件操作過程中,則需要選用自底往上的方法,充分明確硬件操作規(guī)范,將各個(gè)操作從中獨(dú)立出來,從而為上層應(yīng)用的模塊移植提供良好的支持。
2.2分層架構(gòu)設(shè)計(jì)方法
之所以對(duì)架構(gòu)進(jìn)行分層設(shè)計(jì)與開發(fā),其重要目的是為了有效滿足編程過程中不同功能的具體需求,將需要實(shí)現(xiàn)的總體功能劃分為若干個(gè)獨(dú)立子功能,在確保各個(gè)子功能可以實(shí)現(xiàn)對(duì)應(yīng)功能后,再對(duì)其進(jìn)行整合。所以,必須要依照功能需求的不同將代碼轉(zhuǎn)化為各種概念層次的模型,指出不同模塊之間的關(guān)聯(lián)性,之后再進(jìn)行科學(xué)連接,從而確保總體的復(fù)雜功能得到全面實(shí)現(xiàn)。在實(shí)際進(jìn)行分層過程中,也需要嚴(yán)格依照以下原則進(jìn)行。(1)在開展分層過程中應(yīng)當(dāng)要最大程度降低層與層之間的聯(lián)系,既可以避免出現(xiàn)相互影響的問題,也能夠防止層與層之間相互制約,減小模塊的可移植性[6]。當(dāng)某一個(gè)功能層出現(xiàn)故障或者問題時(shí),并不會(huì)對(duì)整體功能產(chǎn)生較大影響,僅僅會(huì)導(dǎo)致具備功能運(yùn)行不正常。相關(guān)技術(shù)人員在進(jìn)行故障排查與解決時(shí),也只需要對(duì)問題層進(jìn)行調(diào)整與改進(jìn),不會(huì)妨礙其他功能層的正常運(yùn)行。(2)所有功能層都需要為其上一層提供相應(yīng)的支持,同時(shí)確保所有層都可以獨(dú)自有效解決一個(gè)問題,比如頻率收集功能,能夠依照其實(shí)現(xiàn)的功能將其劃分為數(shù)據(jù)收集、數(shù)據(jù)分析以及數(shù)據(jù)顯示三個(gè)層,每個(gè)層之間存在特定的關(guān)聯(lián)性,共同實(shí)現(xiàn)模塊功能。(3)最大程度提高各個(gè)功能層之間的內(nèi)聚性,同時(shí)還需要維持各自之間的低耦合性,對(duì)各個(gè)模塊內(nèi)部進(jìn)行規(guī)劃,獲得理想形態(tài)下的模塊,進(jìn)一步改善模塊的可移植性能。當(dāng)將模塊功能劃分得十分詳細(xì)時(shí),能夠有效降低各個(gè)功能模塊實(shí)現(xiàn)的難度,然而當(dāng)劃分出較多數(shù)量的功能模塊時(shí),又會(huì)導(dǎo)致復(fù)雜程度越來越高,因此要做到科學(xué)規(guī)劃層次與功能模塊,加強(qiáng)對(duì)其的調(diào)整與改進(jìn),使其達(dá)到理想狀態(tài)。嵌入式系統(tǒng)必須要開展面向?qū)ο?、去中心化設(shè)計(jì),在實(shí)際進(jìn)行設(shè)計(jì)過程中需要將系統(tǒng)邏輯架構(gòu)劃分為四個(gè)層次,分別是應(yīng)用管理層、算法協(xié)議層、功能延伸層以及硬件驅(qū)動(dòng)層,每個(gè)層都有著各自的功能。(1)應(yīng)用管理層主要是進(jìn)行應(yīng)用功能調(diào)度、顯示界面關(guān)聯(lián)等;(2)算法協(xié)議層的主要功能是數(shù)據(jù)庫訪問、協(xié)議管理和分析、資源整理等;(3)功能延伸層的主要功能是確保不同器件的功能可移植性、接口連接訪問以及器件保持較低耦合性等;(4)硬件驅(qū)動(dòng)層主要是提供硬件操作源語言,同時(shí)確保各個(gè)硬件功能的相互獨(dú)立性。上述分層方法與原則,合理運(yùn)用了可達(dá)到相似功能的功能模塊,一方面實(shí)現(xiàn)了代碼應(yīng)用、算法以及硬件功能間保持較低關(guān)聯(lián)性,另一方面也有效減小了不同功能開發(fā)與達(dá)成時(shí)的耦合性,防止出現(xiàn)交叉混亂的現(xiàn)象,進(jìn)一步提高了嵌入式系統(tǒng)程序代碼的簡(jiǎn)潔性,表現(xiàn)出更高的應(yīng)用價(jià)值。良好的算法必須要能夠支持多個(gè)不同的應(yīng)用邏輯模型算法,相應(yīng)的優(yōu)秀的功能模塊也能夠滿足不同應(yīng)用與執(zhí)行環(huán)境的使用需求,從而改善嵌入式系統(tǒng)軟件功能模塊設(shè)計(jì)、實(shí)施與移植的速度。
3中斷服務(wù)程序
在某些特定情況下,程序往往需要具備立即終止當(dāng)下正在運(yùn)行的程序,轉(zhuǎn)而處理其他情況程序的功能,在這種情況下就需要使用到中斷服務(wù)程序,可以在其他情況程序處理結(jié)束之后,再次返回到之前被終止的程序,并確保其從暫停點(diǎn)出發(fā)繼續(xù)運(yùn)行。在嵌入式系統(tǒng)中中斷服務(wù)程序發(fā)揮了至關(guān)重要的作用,是系統(tǒng)中不可缺失的一部分,由于中斷系統(tǒng)能夠方便、快速地在系統(tǒng)運(yùn)行中完成中斷操作,轉(zhuǎn)而切換到中斷服務(wù)程序中,同時(shí)能夠在第一時(shí)間切換回?cái)帱c(diǎn)并繼續(xù)保持主程序運(yùn)行,以此來改善系統(tǒng)的運(yùn)行速度。此外,中斷服務(wù)程序在不執(zhí)行中斷任務(wù)的情況下,并不會(huì)占用系統(tǒng)的運(yùn)行內(nèi)存,從而有效避免了系統(tǒng)內(nèi)存的浪費(fèi),提高系統(tǒng)內(nèi)存的應(yīng)用率。當(dāng)下已經(jīng)產(chǎn)生了較多的依托于標(biāo)準(zhǔn)C語言的延伸中斷服務(wù)程序,同時(shí)產(chǎn)生了一些全新的代表中斷函數(shù)的中心詞語,比如說_interrupt以及#programinterrupt等。在實(shí)際開展中斷服務(wù)程序函數(shù)開發(fā)過程中,中斷現(xiàn)場(chǎng)入棧代碼程序以及出棧代碼程序均能夠通過編碼器獲得,同時(shí)確保開發(fā)完成的中斷服務(wù)程序滿足以下三項(xiàng)標(biāo)準(zhǔn)要求,分別是中斷服務(wù)程序不可以設(shè)置返回值;不可以為中斷服務(wù)程序提供參數(shù);應(yīng)當(dāng)最大程度提高中斷服務(wù)程序的簡(jiǎn)潔性。
4系統(tǒng)軟件開發(fā)與設(shè)計(jì)
4.1基于C語言的面向?qū)ο蠡?/p>
種類的概念一般存在于面向?qū)ο蟮恼Z言中[7]。類是針對(duì)特定類數(shù)據(jù)的指定操作的合集。類主要涵蓋了兩個(gè)方面,分別是數(shù)據(jù)以及操作[8]。通常情況下面向?qū)ο蠛w了三種特性,分別是封裝、繼承以及多態(tài)。封裝表示為將數(shù)據(jù)與函數(shù)結(jié)合起來形成一個(gè)共同體,在實(shí)際調(diào)用過程中能夠?qū)崿F(xiàn)兩者的共同調(diào)用。繼承表示為依托于結(jié)構(gòu)嵌套能夠達(dá)到對(duì)對(duì)象屬性繼承的目的。多態(tài)表示在實(shí)際進(jìn)行函數(shù)調(diào)用過程中,可以忽視數(shù)據(jù)調(diào)用途徑。然而在大多數(shù)情況下,為了保障軟件代碼架構(gòu)簡(jiǎn)單、操作便捷,往往只進(jìn)行數(shù)據(jù)和函數(shù)的封裝。此外,在一定情況下還會(huì)出現(xiàn)C語言編程過程中,數(shù)據(jù)和函數(shù)之間關(guān)聯(lián)性不強(qiáng)以及結(jié)構(gòu)不合理等問題,C語言模擬面向?qū)ο蟮淖罱K目的便是解決該問題。
4.2模塊重用設(shè)計(jì)
通常情況下為了促進(jìn)C語言代碼的重用,主要運(yùn)用模塊化的方式來實(shí)現(xiàn),一般涵蓋了頭文件以及函數(shù)實(shí)現(xiàn)文件,換言之既.h文件以及與之相匹配的.c文件。正常來說有兩種模式進(jìn)行函數(shù)定義,分別是宏定義以及函數(shù)。首先,宏定義的主要優(yōu)勢(shì)體現(xiàn)在可以有效節(jié)省內(nèi)存空間,同時(shí)和參數(shù)類型并沒有直接聯(lián)系,但是其也有著自身的缺陷,表現(xiàn)為部分功能難以依托于宏來實(shí)現(xiàn)。其次,函數(shù)往往能夠?qū)崿F(xiàn)多種多樣的功能,不僅能夠重復(fù)多次使用,同時(shí)也能夠有效接受第三方函數(shù)的數(shù)據(jù),甚至還能夠?qū)⒆罱K運(yùn)算結(jié)果當(dāng)成是返回值輸入。
5結(jié)語
綜上所述,嵌入式系統(tǒng)應(yīng)用不斷延伸、更新速度加快,依托于優(yōu)異的軟件設(shè)計(jì)架構(gòu),合理的軟件開發(fā)流程,達(dá)到產(chǎn)品設(shè)計(jì)的重要,降低重復(fù)設(shè)計(jì)與探究,可以顯著改善項(xiàng)目開發(fā)速度與品質(zhì)。結(jié)合C語言靈活性特征,開發(fā)適宜的軟件設(shè)計(jì)架構(gòu),可以有效強(qiáng)化程序設(shè)計(jì)開發(fā)、執(zhí)行以及移植效率,表現(xiàn)出較高的應(yīng)用價(jià)值。
作者:孫自立 單位:湖北國(guó)土資源職業(yè)學(xué)院