Kl25-ch05(構(gòu)件化開發(fā)方法與底層驅(qū)動構(gòu)件封裝規(guī)范)_第1頁
Kl25-ch05(構(gòu)件化開發(fā)方法與底層驅(qū)動構(gòu)件封裝規(guī)范)_第2頁
Kl25-ch05(構(gòu)件化開發(fā)方法與底層驅(qū)動構(gòu)件封裝規(guī)范)_第3頁
Kl25-ch05(構(gòu)件化開發(fā)方法與底層驅(qū)動構(gòu)件封裝規(guī)范)_第4頁
Kl25-ch05(構(gòu)件化開發(fā)方法與底層驅(qū)動構(gòu)件封裝規(guī)范)_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第第5章章 構(gòu)件化開發(fā)方法與底層驅(qū)動構(gòu)構(gòu)件化開發(fā)方法與底層驅(qū)動構(gòu)件封裝規(guī)范件封裝規(guī)范主要內(nèi)容:主要內(nèi)容:5.1 5.1 嵌入式硬件構(gòu)件與底層軟件構(gòu)件嵌入式硬件構(gòu)件與底層軟件構(gòu)件5.2 5.2 基于硬件構(gòu)件的嵌入式系統(tǒng)硬件電路設(shè)計基于硬件構(gòu)件的嵌入式系統(tǒng)硬件電路設(shè)計5.3 5.3 基于硬件構(gòu)件的嵌入式底層軟件構(gòu)件的編程方法基于硬件構(gòu)件的嵌入式底層軟件構(gòu)件的編程方法5.4 5.4 底層驅(qū)動構(gòu)件封裝規(guī)范底層驅(qū)動構(gòu)件封裝規(guī)范5.5 5.5 本章小結(jié)本章小結(jié)5.1 嵌入式硬件構(gòu)件與底層軟件構(gòu)件嵌入式硬件構(gòu)件與底層軟件構(gòu)件 軟件產(chǎn)業(yè)的發(fā)展借鑒了機械、建筑等傳統(tǒng)產(chǎn)業(yè)先生產(chǎn)符軟件產(chǎn)業(yè)的發(fā)展借鑒了機械、建筑等傳

2、統(tǒng)產(chǎn)業(yè)先生產(chǎn)符合標(biāo)準(zhǔn)的構(gòu)件(零部件),然后將標(biāo)準(zhǔn)構(gòu)件按照規(guī)則組裝合標(biāo)準(zhǔn)的構(gòu)件(零部件),然后將標(biāo)準(zhǔn)構(gòu)件按照規(guī)則組裝成實際產(chǎn)品的模式。而成實際產(chǎn)品的模式。而隨著微控制器及應(yīng)用處理器內(nèi)部隨著微控制器及應(yīng)用處理器內(nèi)部RAM及及Flash存儲器容量的增大,以及外部模塊內(nèi)置化程存儲器容量的增大,以及外部模塊內(nèi)置化程度的提高,嵌入式系統(tǒng)的設(shè)計復(fù)雜性、設(shè)計規(guī)模及開發(fā)手度的提高,嵌入式系統(tǒng)的設(shè)計復(fù)雜性、設(shè)計規(guī)模及開發(fā)手段已經(jīng)發(fā)生了根本變化。為此希望提高軟硬件設(shè)計可重用段已經(jīng)發(fā)生了根本變化。為此希望提高軟硬件設(shè)計可重用性與可移植性,構(gòu)件的制作與應(yīng)用是重用與移植的基礎(chǔ)與性與可移植性,構(gòu)件的制作與應(yīng)用是重用與移植的

3、基礎(chǔ)與保障。保障。5.1.1 嵌入式硬件構(gòu)件的概念嵌入式硬件構(gòu)件的概念 要提高硬件設(shè)計可重用性與可移植性,就必須有工程師要提高硬件設(shè)計可重用性與可移植性,就必須有工程師們共同遵守的硬件設(shè)計規(guī)范。設(shè)計人員若憑借個人工作經(jīng)驗們共同遵守的硬件設(shè)計規(guī)范。設(shè)計人員若憑借個人工作經(jīng)驗和習(xí)慣的積累進(jìn)行系統(tǒng)硬件電路的設(shè)計,往往每次都需從零和習(xí)慣的積累進(jìn)行系統(tǒng)硬件電路的設(shè)計,往往每次都需從零開始,若在已有類似原理圖上修改又很麻煩,容易出錯。因開始,若在已有類似原理圖上修改又很麻煩,容易出錯。因此把構(gòu)件的思想引入到硬件原理圖設(shè)計中。此把構(gòu)件的思想引入到硬件原理圖設(shè)計中。 嵌入式硬件構(gòu)件嵌入式硬件構(gòu)件是指將一個或多

4、個硬件功能模塊、支撐是指將一個或多個硬件功能模塊、支撐電路及其功能描述封裝成一個可重用的硬件實體,并提供一電路及其功能描述封裝成一個可重用的硬件實體,并提供一系列規(guī)范的輸入系列規(guī)范的輸入/輸出接口。輸出接口。 據(jù)接口之間的生產(chǎn)消費關(guān)系,接口可分為提供接口和需據(jù)接口之間的生產(chǎn)消費關(guān)系,接口可分為提供接口和需求接口兩類。根據(jù)所擁有接口類型的不同,硬件構(gòu)件分為求接口兩類。根據(jù)所擁有接口類型的不同,硬件構(gòu)件分為核核心構(gòu)件心構(gòu)件、中間構(gòu)件中間構(gòu)件和和終端構(gòu)件終端構(gòu)件三種類型。三種類型。5.1.2 嵌入式底層驅(qū)動構(gòu)件的概念嵌入式底層驅(qū)動構(gòu)件的概念 構(gòu)件構(gòu)件(Component)是可重用的實體,它包含了合乎

5、)是可重用的實體,它包含了合乎規(guī)范的接口和功能實現(xiàn),能夠被獨立部署和被第三方組裝規(guī)范的接口和功能實現(xiàn),能夠被獨立部署和被第三方組裝 。 軟件構(gòu)件軟件構(gòu)件(Software Component)是指,在軟件系統(tǒng))是指,在軟件系統(tǒng)中具有相對獨立功能、可以明確辨識構(gòu)件實體。中具有相對獨立功能、可以明確辨識構(gòu)件實體。 嵌入式軟件構(gòu)件嵌入式軟件構(gòu)件(Embedded Software Component)是實現(xiàn)一定嵌入式系統(tǒng)功能的一組封裝的、規(guī)范的、可重)是實現(xiàn)一定嵌入式系統(tǒng)功能的一組封裝的、規(guī)范的、可重用的、具有嵌入特性的軟件構(gòu)件單元,是組織嵌入式系統(tǒng)功用的、具有嵌入特性的軟件構(gòu)件單元,是組織嵌入式系

6、統(tǒng)功能的基本單位。能的基本單位。 嵌入式軟件分為嵌入式軟件分為高層軟件構(gòu)件高層軟件構(gòu)件和和底層軟件構(gòu)件底層軟件構(gòu)件(底層驅(qū)(底層驅(qū)動構(gòu)件)。高層軟件構(gòu)件與硬件無關(guān),而底層驅(qū)動構(gòu)件與硬動構(gòu)件)。高層軟件構(gòu)件與硬件無關(guān),而底層驅(qū)動構(gòu)件與硬件密不可分,是硬件驅(qū)動程序的構(gòu)件化封裝。件密不可分,是硬件驅(qū)動程序的構(gòu)件化封裝。5.2 基于硬件構(gòu)件的嵌入式系統(tǒng)硬件電基于硬件構(gòu)件的嵌入式系統(tǒng)硬件電路設(shè)計路設(shè)計5.2.1 設(shè)計時需要考慮的基本問題設(shè)計時需要考慮的基本問題 1MCU的選擇的選擇 選擇選擇MCU時要考慮時要考慮MCU所能夠完成的功能、所能夠完成的功能、MCU的價的價格、功耗、供電電壓、格、功耗、供電電

7、壓、I/O口電平、管腳數(shù)目以及口電平、管腳數(shù)目以及MCU的封的封裝等因素。裝等因素。 2電源電源 (1)考慮系統(tǒng)對電源的需求,例如系統(tǒng)需要幾種電)考慮系統(tǒng)對電源的需求,例如系統(tǒng)需要幾種電估計各需要多少功率或最大電流(估計各需要多少功率或最大電流(mA)。)。 (2)考慮芯片與器件對電源波動性的需求。一般允許)考慮芯片與器件對電源波動性的需求。一般允許電源波動幅度在電源波動幅度在5%以內(nèi)。對于以內(nèi)。對于A/D轉(zhuǎn)換芯片的參考電壓一轉(zhuǎn)換芯片的參考電壓一般要求般要求1%以內(nèi)。以內(nèi)。 (3)考慮工作電源是使用電源模塊還是使用電源電路)考慮工作電源是使用電源模塊還是使用電源電路。 3普通普通I/O口口 (

8、1)上拉、下拉電阻:考慮用內(nèi)部或者外部上)上拉、下拉電阻:考慮用內(nèi)部或者外部上/下拉電下拉電阻。阻。 (2)開關(guān)量輸入:一定要保證高低電壓分明。)開關(guān)量輸入:一定要保證高低電壓分明。 (3)開關(guān)量輸出:基本原則是保證輸出高電平接近電)開關(guān)量輸出:基本原則是保證輸出高電平接近電源電壓,低電平接近地電平。源電壓,低電平接近地電平。 4A/D電路與電路與D/A電路電路 (1)A/D電路:要清楚前端采樣基本原理,對電阻型、電路:要清楚前端采樣基本原理,對電阻型、電流型和電壓型傳感器采用不同的采集電路。如果采集的電流型和電壓型傳感器采用不同的采集電路。如果采集的信號微弱,還要考慮如何進(jìn)行信號放大。信號微

9、弱,還要考慮如何進(jìn)行信號放大。 (2)D/A電路:考慮電路:考慮MCU的引腳通過何種輸出電路控的引腳通過何種輸出電路控制實際對象。制實際對象。 5控制電路控制電路 對外控制電路要注意設(shè)計的冗余與反測,要有合適的信對外控制電路要注意設(shè)計的冗余與反測,要有合適的信號隔離措施等。在評估設(shè)計的布板時,一定要在構(gòu)件的輸號隔離措施等。在評估設(shè)計的布板時,一定要在構(gòu)件的輸入輸出端引出檢測孔,以方便排查錯誤時測量。入輸出端引出檢測孔,以方便排查錯誤時測量。 6考慮低功耗考慮低功耗 低功耗設(shè)計并不僅僅是為了省電,更多的好處在于降低低功耗設(shè)計并不僅僅是為了省電,更多的好處在于降低了電源模塊及散熱系統(tǒng)的成本。要做到

10、低功耗一般需要注意了電源模塊及散熱系統(tǒng)的成本。要做到低功耗一般需要注意以下幾點:以下幾點: (1)并不是所有的總線信號都要上拉。)并不是所有的總線信號都要上拉。 (2)不用的)不用的I/O口不要懸空,如果懸空的話,受外界的口不要懸空,如果懸空的話,受外界的一點點干擾就可能成為反復(fù)振蕩的輸入信號,而一點點干擾就可能成為反復(fù)振蕩的輸入信號,而MOS器件的器件的功耗基本取決于門電路的翻轉(zhuǎn)次數(shù)。功耗基本取決于門電路的翻轉(zhuǎn)次數(shù)。 (3)對一些外圍小芯片的功耗也需要考慮。)對一些外圍小芯片的功耗也需要考慮。 7考慮低成本考慮低成本 (1)正確選擇電阻值與電容值。)正確選擇電阻值與電容值。 (2)指示燈的選

11、擇。)指示燈的選擇。 (3)不要什么都選最好的。)不要什么都選最好的。5.2.2 硬件構(gòu)件化電路原理圖繪制的簡明規(guī)則硬件構(gòu)件化電路原理圖繪制的簡明規(guī)則 1硬件構(gòu)件設(shè)計的通用規(guī)則硬件構(gòu)件設(shè)計的通用規(guī)則 (1)元器件命名格式:對于核心構(gòu)件,其元器件直接)元器件命名格式:對于核心構(gòu)件,其元器件直接編號命名,同種類型的元件命名時冠以相同的字母前綴。編號命名,同種類型的元件命名時冠以相同的字母前綴。對于中間構(gòu)件和終端構(gòu)件,其元器件命名格式采用對于中間構(gòu)件和終端構(gòu)件,其元器件命名格式采用“構(gòu)件名構(gòu)件名-標(biāo)志字符標(biāo)志字符?”。當(dāng)構(gòu)件原理圖應(yīng)用到具體系統(tǒng)中時,可借助。當(dāng)構(gòu)件原理圖應(yīng)用到具體系統(tǒng)中時,可借助原理

12、圖編輯軟件為其自動編號。原理圖編輯軟件為其自動編號。 (2)為硬件構(gòu)件添加詳細(xì)的文字描述,包括中文名稱)為硬件構(gòu)件添加詳細(xì)的文字描述,包括中文名稱、英文名稱、功能描述、接口描述、注意事項等,以增強原、英文名稱、功能描述、接口描述、注意事項等,以增強原理圖的可讀性。理圖的可讀性。 (3)將前兩步產(chǎn)生的內(nèi)容封裝在一個虛線框內(nèi),組成)將前兩步產(chǎn)生的內(nèi)容封裝在一個虛線框內(nèi),組成硬件構(gòu)件的內(nèi)部實體。硬件構(gòu)件的內(nèi)部實體。 (4)為該硬件構(gòu)件添加與其他構(gòu)件交互的輸入)為該硬件構(gòu)件添加與其他構(gòu)件交互的輸入/輸出接輸出接口標(biāo)識。接口標(biāo)識有兩種:接口注釋和接口網(wǎng)標(biāo)??跇?biāo)識。接口標(biāo)識有兩種:接口注釋和接口網(wǎng)標(biāo)。 2

13、核心構(gòu)件設(shè)計規(guī)則核心構(gòu)件設(shè)計規(guī)則 設(shè)計核心構(gòu)件時,需考慮的問題是:設(shè)計核心構(gòu)件時,需考慮的問題是:“核心構(gòu)件能為其核心構(gòu)件能為其他構(gòu)件提供哪些信號?他構(gòu)件提供哪些信號?”。 核心構(gòu)件其實就是某型號核心構(gòu)件其實就是某型號MCU的最小系統(tǒng)。的最小系統(tǒng)。 核心構(gòu)件設(shè)計的目標(biāo)是:凡是使用該核心構(gòu)件設(shè)計的目標(biāo)是:凡是使用該MCU進(jìn)行硬件系進(jìn)行硬件系統(tǒng)設(shè)計時,核心構(gòu)件可以直接統(tǒng)設(shè)計時,核心構(gòu)件可以直接“組裝組裝”到系統(tǒng)中,無須任何到系統(tǒng)中,無須任何改動。為了實現(xiàn)這一目標(biāo),在設(shè)計核心構(gòu)件的實體時必須考改動。為了實現(xiàn)這一目標(biāo),在設(shè)計核心構(gòu)件的實體時必須考慮細(xì)致、周全,包括穩(wěn)定性、擴展性等,封裝要完整。慮細(xì)致、

14、周全,包括穩(wěn)定性、擴展性等,封裝要完整。 在進(jìn)行接口設(shè)計時,需將所有可能使用到的引腳都標(biāo)注在進(jìn)行接口設(shè)計時,需將所有可能使用到的引腳都標(biāo)注上接口網(wǎng)標(biāo)(不要考慮:核心構(gòu)件將會用到怎樣的系統(tǒng)中上接口網(wǎng)標(biāo)(不要考慮:核心構(gòu)件將會用到怎樣的系統(tǒng)中去)。若同一引腳具有不同功能,則接口網(wǎng)標(biāo)依據(jù)第一功能去)。若同一引腳具有不同功能,則接口網(wǎng)標(biāo)依據(jù)第一功能選項命名。選項命名。 遵循上述規(guī)則設(shè)計核心構(gòu)件的好處是:當(dāng)使用核心構(gòu)件遵循上述規(guī)則設(shè)計核心構(gòu)件的好處是:當(dāng)使用核心構(gòu)件和其他構(gòu)件一起組裝系統(tǒng)時,只要考慮其他構(gòu)件將要連接到和其他構(gòu)件一起組裝系統(tǒng)時,只要考慮其他構(gòu)件將要連接到核心構(gòu)件的哪個接口(不是考慮:核心構(gòu)

15、件將要連接到其他核心構(gòu)件的哪個接口(不是考慮:核心構(gòu)件將要連接到其他構(gòu)件的哪個接口),這也符合設(shè)計人員的思維習(xí)慣。構(gòu)件的哪個接口),這也符合設(shè)計人員的思維習(xí)慣。 3中間構(gòu)件設(shè)計規(guī)則中間構(gòu)件設(shè)計規(guī)則 設(shè)計中間構(gòu)件時,需考慮的問題是:設(shè)計中間構(gòu)件時,需考慮的問題是:“中間構(gòu)件需要接中間構(gòu)件需要接受哪些信號,以及提供哪些信號?受哪些信號,以及提供哪些信號?”。 中間構(gòu)件是核心構(gòu)件與終端構(gòu)件之間通信的橋梁。中間構(gòu)件是核心構(gòu)件與終端構(gòu)件之間通信的橋梁。 一個中間構(gòu)件應(yīng)具有明確的且相對獨立的功能,它既要一個中間構(gòu)件應(yīng)具有明確的且相對獨立的功能,它既要有接受其他構(gòu)件提供的服務(wù)的接口,即需求接口,又要有為有接

16、受其他構(gòu)件提供的服務(wù)的接口,即需求接口,又要有為其他構(gòu)件提供服務(wù)的接口,即提供接口。描述需求接口采用其他構(gòu)件提供服務(wù)的接口,即提供接口。描述需求接口采用接口注釋,描述提供接口采用接口網(wǎng)標(biāo)。接口注釋,描述提供接口采用接口網(wǎng)標(biāo)。 為直觀起見,設(shè)計中間構(gòu)件時,將構(gòu)件的需求接口放置為直觀起見,設(shè)計中間構(gòu)件時,將構(gòu)件的需求接口放置在構(gòu)件實體的左側(cè),提供接口放置在右側(cè)。在構(gòu)件實體的左側(cè),提供接口放置在右側(cè)。 電源控制構(gòu)件、可變頻率產(chǎn)生構(gòu)件是常用的中間構(gòu)件。電源控制構(gòu)件、可變頻率產(chǎn)生構(gòu)件是常用的中間構(gòu)件。 4終端構(gòu)件設(shè)計規(guī)則終端構(gòu)件設(shè)計規(guī)則 設(shè)計終端構(gòu)件時,需考慮的問題是:設(shè)計終端構(gòu)件時,需考慮的問題是:“

17、終端構(gòu)件需要什終端構(gòu)件需要什么信號才能工作?么信號才能工作?”。 終端構(gòu)件是嵌入式系統(tǒng)中最常見的構(gòu)件。終端構(gòu)件是嵌入式系統(tǒng)中最常見的構(gòu)件。 終端構(gòu)件沒有提供接口,它僅有與上一級構(gòu)件交付的需終端構(gòu)件沒有提供接口,它僅有與上一級構(gòu)件交付的需求接口,因而接口標(biāo)識均為斜體標(biāo)注的接口注釋。求接口,因而接口標(biāo)識均為斜體標(biāo)注的接口注釋。LCD(YM1602C)構(gòu)件、)構(gòu)件、LED構(gòu)件、指示燈構(gòu)件以及鍵盤構(gòu)件構(gòu)件、指示燈構(gòu)件以及鍵盤構(gòu)件等都是典型的終端構(gòu)件。等都是典型的終端構(gòu)件。 5使用硬件構(gòu)件組裝系統(tǒng)的方法使用硬件構(gòu)件組裝系統(tǒng)的方法 對于核心構(gòu)件,在應(yīng)用到具體的系統(tǒng)中時,不必作任何對于核心構(gòu)件,在應(yīng)用到具體

18、的系統(tǒng)中時,不必作任何改動。具有相同改動。具有相同MCU的應(yīng)用系統(tǒng),其核心構(gòu)件完全相同。對的應(yīng)用系統(tǒng),其核心構(gòu)件完全相同。對于中間構(gòu)件和終端構(gòu)件,在應(yīng)用到具體的系統(tǒng)中時,僅需為于中間構(gòu)件和終端構(gòu)件,在應(yīng)用到具體的系統(tǒng)中時,僅需為需求接口添加接口網(wǎng)標(biāo),在不同的系統(tǒng)中,接口網(wǎng)標(biāo)名稱不需求接口添加接口網(wǎng)標(biāo),在不同的系統(tǒng)中,接口網(wǎng)標(biāo)名稱不同,但構(gòu)件實體內(nèi)部完全相同。同,但構(gòu)件實體內(nèi)部完全相同。使用硬件構(gòu)件化思想設(shè)計嵌入式硬件系統(tǒng)的過程與步驟是:使用硬件構(gòu)件化思想設(shè)計嵌入式硬件系統(tǒng)的過程與步驟是:(1)根據(jù)系統(tǒng)的功能劃分出若干個硬件構(gòu)件。)根據(jù)系統(tǒng)的功能劃分出若干個硬件構(gòu)件。(2)將所有硬件構(gòu)件原理圖)

19、將所有硬件構(gòu)件原理圖“組裝組裝”在一起。在一起。(3)為中間構(gòu)件和終端構(gòu)件添加接口網(wǎng)標(biāo)。)為中間構(gòu)件和終端構(gòu)件添加接口網(wǎng)標(biāo)。5.2.3 實驗實驗PCB板設(shè)計的簡明規(guī)則板設(shè)計的簡明規(guī)則 印刷電路板(印刷電路板(Printed-Circuit Board,PCB)是由環(huán)氧)是由環(huán)氧樹脂粘合而成的鍍了銅的玻璃纖維板。蝕刻掉部分鍍銅,只樹脂粘合而成的鍍了銅的玻璃纖維板。蝕刻掉部分鍍銅,只留下以構(gòu)成電路互連通路的銅層走線。留下以構(gòu)成電路互連通路的銅層走線。 PCB可以是單層、雙層或者四層、六層、八層、十二層可以是單層、雙層或者四層、六層、八層、十二層甚至更多。層數(shù)越多,連接的布線就越容易,但成本卻越高甚

20、至更多。層數(shù)越多,連接的布線就越容易,但成本卻越高,調(diào)試也越難。,調(diào)試也越難。 如果如果PCB有專用供電層和接地層,系統(tǒng)將會有更強的燥有專用供電層和接地層,系統(tǒng)將會有更強的燥聲抗擾度。聲抗擾度。 在使用電子設(shè)計自動化軟件(如在使用電子設(shè)計自動化軟件(如DXP)設(shè)計)設(shè)計PCB時需注時需注意以下幾個方面的問題。意以下幾個方面的問題。 1PCB板布局板布局 在正式走線之前要對在正式走線之前要對PCB的大體格局進(jìn)行規(guī)劃。布局的大體格局進(jìn)行規(guī)劃。布局規(guī)劃應(yīng)遵循下列基本原則。規(guī)劃應(yīng)遵循下列基本原則。(1)在)在PCB布板之前首先要打印出相應(yīng)的原理圖,然后根布板之前首先要打印出相應(yīng)的原理圖,然后根據(jù)原理圖

21、確定整個據(jù)原理圖確定整個PCB板的大體布局,即各個硬件構(gòu)件的位板的大體布局,即各個硬件構(gòu)件的位置安排。置安排。(2)PCB板的形狀如無其他要求,一般為矩形,長寬比為板的形狀如無其他要求,一般為矩形,長寬比為4:3或或3:2。(3)考慮面板上元件的放置要求。)考慮面板上元件的放置要求。(4)考慮邊緣接口。)考慮邊緣接口。 2元件放置元件放置 (1)元件放置要求整齊,盡可能正放,屬于同一硬件)元件放置要求整齊,盡可能正放,屬于同一硬件構(gòu)件內(nèi)的元件盡可能排放在一起。排列方位盡可能與原理圖構(gòu)件內(nèi)的元件盡可能排放在一起。排列方位盡可能與原理圖一致,布線方向最好與電路圖走線方向一致。元器件在一致,布線方向

22、最好與電路圖走線方向一致。元器件在PCB上的排列可采用不規(guī)則、規(guī)則和網(wǎng)格等三種排列方式中的一上的排列可采用不規(guī)則、規(guī)則和網(wǎng)格等三種排列方式中的一種,也可同時采用多種。種,也可同時采用多種。 布局的元器件應(yīng)有利于發(fā)熱元器件散熱,高頻時要考慮布局的元器件應(yīng)有利于發(fā)熱元器件散熱,高頻時要考慮元器件之間的分布參數(shù),高、低壓之間要隔離,隔離距離與元器件之間的分布參數(shù),高、低壓之間要隔離,隔離距離與承受的耐壓有關(guān)。承受的耐壓有關(guān)。 (2)電容的位置要特別注意,其中電源模塊的濾波電)電容的位置要特別注意,其中電源模塊的濾波電容要求靠近電源,而容要求靠近電源,而IC的濾波電容要靠近的濾波電容要靠近IC的引腳。

23、的引腳。 (3)考慮元件間的距離,防止元件之間出現(xiàn)重疊。)考慮元件間的距離,防止元件之間出現(xiàn)重疊。還要考慮元器件的引腳間距,因為它決定著焊盤放置間距。還要考慮元器件的引腳間距,因為它決定著焊盤放置間距。對于非標(biāo)準(zhǔn)器件的引腳間距的確定最直接的方法就是:使用對于非標(biāo)準(zhǔn)器件的引腳間距的確定最直接的方法就是:使用游標(biāo)卡尺進(jìn)行測量。游標(biāo)卡尺進(jìn)行測量。 (4)PCB四周留有四周留有5-10mm空隙不布器件??障恫徊计骷?(5)先放置占用面積較大的元器件,先集成后分立,)先放置占用面積較大的元器件,先集成后分立,先主后次,多塊集成電路時先放置主電路。先主后次,多塊集成電路時先放置主電路。 (6)可調(diào)元件應(yīng)

24、放置在便于調(diào)節(jié)的地方,質(zhì)量超過)可調(diào)元件應(yīng)放置在便于調(diào)節(jié)的地方,質(zhì)量超過15g的元器件應(yīng)當(dāng)用支架,熱敏元件應(yīng)遠(yuǎn)離發(fā)熱元件。晶的元器件應(yīng)當(dāng)用支架,熱敏元件應(yīng)遠(yuǎn)離發(fā)熱元件。晶振應(yīng)平放,而不要豎直放置。振應(yīng)平放,而不要豎直放置。 (7)PLL濾波電路應(yīng)盡量靠近濾波電路應(yīng)盡量靠近MCU。 3有關(guān)設(shè)定有關(guān)設(shè)定 (1)線寬。導(dǎo)線的最小寬度由導(dǎo)線與絕緣基板間的粘)線寬。導(dǎo)線的最小寬度由導(dǎo)線與絕緣基板間的粘附強度和流過它們的電流值決定。一般地線寬度附強度和流過它們的電流值決定。一般地線寬度電源線電源線寬度寬度信號線寬度。信號線寬度。 (2)間距。導(dǎo)線間的間距由它們之間的安全工作電壓)間距。導(dǎo)線間的間距由它們之

25、間的安全工作電壓決定,相鄰導(dǎo)線之間的峰值電壓、基板的質(zhì)量、表面涂層決定,相鄰導(dǎo)線之間的峰值電壓、基板的質(zhì)量、表面涂層、電容耦合參數(shù)等都影響導(dǎo)線的安全工作電壓、電容耦合參數(shù)等都影響導(dǎo)線的安全工作電壓 (3)過孔大小。過孔大小設(shè)定要適中。)過孔大小。過孔大小設(shè)定要適中。4布線布線 布線時,應(yīng)該首先對時鐘和高速信號進(jìn)行布線,以確保布線時,應(yīng)該首先對時鐘和高速信號進(jìn)行布線,以確保它們的走線盡可能直接。它們的走線盡可能直接。 石英晶振和對噪聲特別敏感的器件下面不要走線。石英晶振和對噪聲特別敏感的器件下面不要走線。 對總線進(jìn)行布線時,盡可能地保持信號線平行走線,而對總線進(jìn)行布線時,盡可能地保持信號線平行走

26、線,而時鐘信號線則要避免平行,且在這些導(dǎo)線之間最好加接地線。時鐘信號線則要避免平行,且在這些導(dǎo)線之間最好加接地線。 布板完成后一定要進(jìn)行自動與人工檢查。過孔數(shù)盡可能布板完成后一定要進(jìn)行自動與人工檢查。過孔數(shù)盡可能少。少。 最小系統(tǒng)中未使用的最小系統(tǒng)中未使用的I/O口,可通過電阻接地??冢赏ㄟ^電阻接地。 走線盡量少拐彎,線寬不要突變,導(dǎo)線拐角應(yīng)走線盡量少拐彎,線寬不要突變,導(dǎo)線拐角應(yīng)90,力求線條簡單明了。力求線條簡單明了。 信號線的拐角應(yīng)設(shè)計成鈍角走向,為圓形或圓弧形,切信號線的拐角應(yīng)設(shè)計成鈍角走向,為圓形或圓弧形,切忌畫成忌畫成90或更小角度形狀?;蚋〗嵌刃螤睢?5測量點測量點 考慮到硬

27、件測試的方便,在考慮到硬件測試的方便,在PCB布板時要留下一些測布板時要留下一些測量點,以便調(diào)試之用。以下幾處需要留測量點:量點,以便調(diào)試之用。以下幾處需要留測量點: (1)原理圖中模塊的輸入輸出引腳。)原理圖中模塊的輸入輸出引腳。 (2)最小系統(tǒng)模塊中)最小系統(tǒng)模塊中MCU的引腳。的引腳。 (3)各硬件功能模塊單元的輸入、輸出口;)各硬件功能模塊單元的輸入、輸出口; 畫測量點的步驟是:引出、打孔、標(biāo)字??椎拇笮∫匀f畫測量點的步驟是:引出、打孔、標(biāo)字??椎拇笮∫匀f用表頭方便測量為原則,一般不要在線上直接打孔。用表頭方便測量為原則,一般不要在線上直接打孔。 6模塊標(biāo)示模塊標(biāo)示 由于在整體布局時,

28、已經(jīng)將各個硬件構(gòu)件的組成元件放由于在整體布局時,已經(jīng)將各個硬件構(gòu)件的組成元件放在一起,因而可在在一起,因而可在PCB板上用矩形框?qū)⒏鱾€硬件構(gòu)件區(qū)分板上用矩形框?qū)⒏鱾€硬件構(gòu)件區(qū)分開,并用漢字標(biāo)出構(gòu)件名(與原理圖一致),并注意字體開,并用漢字標(biāo)出構(gòu)件名(與原理圖一致),并注意字體字號。字號。 7鋪地鋪地 在布板的最后都要鋪地,目的是減小干擾,提高在布板的最后都要鋪地,目的是減小干擾,提高PCB板的穩(wěn)定性。鋪地需注意:板的穩(wěn)定性。鋪地需注意: (1)在鋪地前,要設(shè)定地與導(dǎo)線、地與引腳之間的距)在鋪地前,要設(shè)定地與導(dǎo)線、地與引腳之間的距離,并要求該距離盡可能大。離,并要求該距離盡可能大。 (2)鋪地本

29、應(yīng)該雙面鋪,作為實驗用板,為了方便檢)鋪地本應(yīng)該雙面鋪,作為實驗用板,為了方便檢查,可只鋪反面地。查,可只鋪反面地。 (3)如果電路板中有數(shù)字地和模擬地,應(yīng)將它們隔離)如果電路板中有數(shù)字地和模擬地,應(yīng)將它們隔離開,兩者間使用磁珠相連。開,兩者間使用磁珠相連。 8空余位置的利用并標(biāo)注相關(guān)信息空余位置的利用并標(biāo)注相關(guān)信息 PCB板的空余位置可適度作如下用途:板的空余位置可適度作如下用途: (1)電源、地??瞻滋幎嗔魩着烹娫春偷?。)電源、地??瞻滋幎嗔魩着烹娫春偷?。 (2)雙排孔。留出幾排兩孔相連的排孔,以用來擴展)雙排孔。留出幾排兩孔相連的排孔,以用來擴展或試驗時焊接其他元件?;蛟囼灂r焊接其他元件

30、。 (3)固定孔。在)固定孔。在PCB上畫固定板的固定孔,一般在板上畫固定板的固定孔,一般在板的四個角落。的四個角落。 在完成在完成PCB板的鋪地之后,要在板的正面適當(dāng)位置標(biāo)板的鋪地之后,要在板的正面適當(dāng)位置標(biāo)出以下信息:單位、日期、責(zé)任人、出以下信息:單位、日期、責(zé)任人、PCB板的名稱、編號板的名稱、編號等。等。 9抗干擾問題的特別考慮抗干擾問題的特別考慮 1)熱干擾及抑制)熱干擾及抑制 元器件在工作中都有一定程度的發(fā)熱,發(fā)出的熱量會對元器件在工作中都有一定程度的發(fā)熱,發(fā)出的熱量會對周邊比較敏感的器件產(chǎn)生干擾,若熱干擾得不到很好的抑制,周邊比較敏感的器件產(chǎn)生干擾,若熱干擾得不到很好的抑制,整

31、個電路的電性就會發(fā)生變化,最后造成短路整個電路的電性就會發(fā)生變化,最后造成短路. 為了對熱干為了對熱干擾進(jìn)行抑制,可采取以下措施:擾進(jìn)行抑制,可采取以下措施: (1)發(fā)熱元件的放置)發(fā)熱元件的放置 不要貼板放置,也可以單獨設(shè)計為一個功能單元,放在不要貼板放置,也可以單獨設(shè)計為一個功能單元,放在靠近邊緣容易散熱的地方。另外,發(fā)熱量大的器件與小熱量靠近邊緣容易散熱的地方。另外,發(fā)熱量大的器件與小熱量的器件應(yīng)分開放置。的器件應(yīng)分開放置。 (2)大功率器件的放置)大功率器件的放置 應(yīng)盡量靠近邊緣布置,在垂直方向時應(yīng)盡量布置在板上應(yīng)盡量靠近邊緣布置,在垂直方向時應(yīng)盡量布置在板上方。方。 (3)溫度敏感器

32、件的放置)溫度敏感器件的放置 對溫度比較敏感的器件應(yīng)安置在溫度最低的區(qū)域,千萬對溫度比較敏感的器件應(yīng)安置在溫度最低的區(qū)域,千萬不要將它放在發(fā)熱器件的正上方。不要將它放在發(fā)熱器件的正上方。 (4)器件的排列與氣流)器件的排列與氣流非特定要求,一般設(shè)備內(nèi)部均以空氣自由對流進(jìn)行散熱,故非特定要求,一般設(shè)備內(nèi)部均以空氣自由對流進(jìn)行散熱,故元器件應(yīng)以縱式排列;若強制散熱,元器件可橫式排列。元器件應(yīng)以縱式排列;若強制散熱,元器件可橫式排列。另外,為了改善散熱效果,可添加與電路原理無關(guān)的零部另外,為了改善散熱效果,可添加與電路原理無關(guān)的零部件以引導(dǎo)熱量對流。件以引導(dǎo)熱量對流。 2)共阻抗及抑制)共阻抗及抑制

33、 共阻干擾是由共阻干擾是由PCB上大量的地線造成,當(dāng)兩個或兩個上大量的地線造成,當(dāng)兩個或兩個以上的回路共用一段地線時,不同的回路電流在共用地線以上的回路共用一段地線時,不同的回路電流在共用地線上產(chǎn)生一定壓降,此壓降經(jīng)放大就會影響電路性能,當(dāng)電上產(chǎn)生一定壓降,此壓降經(jīng)放大就會影響電路性能,當(dāng)電流頻率很高時,會產(chǎn)生很大的感抗而使電路受到干擾。為流頻率很高時,會產(chǎn)生很大的感抗而使電路受到干擾。為了抑制共阻抗,可采取以下措施:了抑制共阻抗,可采取以下措施: (1)一點接地)一點接地 (2)就近多點接地)就近多點接地 (3)大面積接地)大面積接地 (4)加粗接地線)加粗接地線 (5)DA(數(shù)模)電路的地

34、線分開(數(shù)模)電路的地線分開 3)電磁干擾及抑制)電磁干擾及抑制 電磁干擾是由電磁效應(yīng)而造成的干擾,針對由電源布線、電磁干擾是由電磁效應(yīng)而造成的干擾,針對由電源布線、信號布線產(chǎn)生的電磁干擾,可采取不同的措施。信號布線產(chǎn)生的電磁干擾,可采取不同的措施。 (1)電源布線可采用以下預(yù)防措施:)電源布線可采用以下預(yù)防措施:布線要寬布線要寬;加去加去耦電容耦電容(這種電容起到旁路濾波的作用,要在電源的輸入(這種電容起到旁路濾波的作用,要在電源的輸入端并聯(lián)較大的和較小的濾波電容);端并聯(lián)較大的和較小的濾波電容);地線環(huán)繞地線環(huán)繞(地線要靠(地線要靠近供電電源母線和信號線,因電流沿路徑傳輸會產(chǎn)生回路近供電電

35、源母線和信號線,因電流沿路徑傳輸會產(chǎn)生回路電感,地線靠近,回路面積減小,電感量減小,回路阻抗電感,地線靠近,回路面積減小,電感量減小,回路阻抗減小,從而減小電磁干擾耦合)。減小,從而減小電磁干擾耦合)。 (2)信號布線可采用以下預(yù)防措施:)信號布線可采用以下預(yù)防措施:不同功能的單元不同功能的單元電路電路(如數(shù)字電路與模擬電路,高頻與低頻)(如數(shù)字電路與模擬電路,高頻與低頻)分開設(shè)置分開設(shè)置,布線圖形應(yīng)易于信號流通且使信號流向盡可能保持一致;布線圖形應(yīng)易于信號流通且使信號流向盡可能保持一致;合理使用屏蔽和濾波技術(shù)合理使用屏蔽和濾波技術(shù),注意高低壓之間的隔離;,注意高低壓之間的隔離;盡量盡量不選用

36、比實際需要的速度更快的元件不選用比實際需要的速度更快的元件,在元件的位置安排,在元件的位置安排上,易受電磁干擾的元器件不能相距太近,應(yīng)大于信號波上,易受電磁干擾的元器件不能相距太近,應(yīng)大于信號波長的四分之一,輸入器件與輸出器件盡量遠(yuǎn)離;長的四分之一,輸入器件與輸出器件盡量遠(yuǎn)離;做到安全做到安全接地接地。5.3 基于硬件構(gòu)件的嵌入式底層軟件構(gòu)基于硬件構(gòu)件的嵌入式底層軟件構(gòu)件的編程方法件的編程方法5.3.1 嵌入式硬件構(gòu)件和軟件構(gòu)件的層次模型嵌入式硬件構(gòu)件和軟件構(gòu)件的層次模型 嵌入式軟件構(gòu)件(嵌入式軟件構(gòu)件(Embedded Software Component, ESC)是實現(xiàn)一定嵌入式系統(tǒng)功能

37、的一組封裝的、規(guī)范的、)是實現(xiàn)一定嵌入式系統(tǒng)功能的一組封裝的、規(guī)范的、可重用的、具有嵌入特性的軟件單元,是組織嵌入式系統(tǒng)的可重用的、具有嵌入特性的軟件單元,是組織嵌入式系統(tǒng)的功能單位。功能單位。 嵌入式軟件構(gòu)件分為高層軟件構(gòu)件和底層軟件構(gòu)件(以嵌入式軟件構(gòu)件分為高層軟件構(gòu)件和底層軟件構(gòu)件(以下簡稱高層構(gòu)件和底層構(gòu)件)。高層構(gòu)件與硬件無關(guān)。通常下簡稱高層構(gòu)件和底層構(gòu)件)。高層構(gòu)件與硬件無關(guān)。通常,MCU內(nèi)部包含有內(nèi)部包含有GPIO(即通用(即通用IO)口和一些內(nèi)置功能模塊)口和一些內(nèi)置功能模塊,而底層構(gòu)件與硬件密不可分,是硬件驅(qū)動程序的封裝??桑讓訕?gòu)件與硬件密不可分,是硬件驅(qū)動程序的封裝???/p>

38、將通用將通用I/O口的驅(qū)動程序封裝為口的驅(qū)動程序封裝為GPIO驅(qū)動構(gòu)件,各內(nèi)置功能模驅(qū)動構(gòu)件,各內(nèi)置功能模塊的驅(qū)動程序封裝為功能構(gòu)件,塊的驅(qū)動程序封裝為功能構(gòu)件, 在硬件構(gòu)件層中,相對于核心構(gòu)件而言,中間構(gòu)件和終在硬件構(gòu)件層中,相對于核心構(gòu)件而言,中間構(gòu)件和終端構(gòu)件是核心構(gòu)件的端構(gòu)件是核心構(gòu)件的“外設(shè)外設(shè)”。由這些。由這些“外設(shè)外設(shè)”的驅(qū)動程的驅(qū)動程序封裝而成的軟件構(gòu)件稱為底層外設(shè)構(gòu)件。注意,并不是序封裝而成的軟件構(gòu)件稱為底層外設(shè)構(gòu)件。注意,并不是所有的中間構(gòu)件和終端構(gòu)件都可以作為編程對象。所有的中間構(gòu)件和終端構(gòu)件都可以作為編程對象。 由圖可看出,底層外設(shè)構(gòu)件可以調(diào)用底層內(nèi)部構(gòu)件,而由圖可看出

39、,底層外設(shè)構(gòu)件可以調(diào)用底層內(nèi)部構(gòu)件,而高層構(gòu)件可以調(diào)用底層外設(shè)構(gòu)件和底層內(nèi)部構(gòu)件中的功能高層構(gòu)件可以調(diào)用底層外設(shè)構(gòu)件和底層內(nèi)部構(gòu)件中的功能構(gòu)件,而不能直接調(diào)用構(gòu)件,而不能直接調(diào)用GPIO驅(qū)動構(gòu)件。另外,考慮到幾驅(qū)動構(gòu)件。另外,考慮到幾乎所有的底層內(nèi)部構(gòu)件都涉及到乎所有的底層內(nèi)部構(gòu)件都涉及到MCU各種寄存器的使用,各種寄存器的使用,因此將因此將MCU的所有寄存器定義組織在一起,形成的所有寄存器定義組織在一起,形成MCU頭頭文件,以便其他構(gòu)件頭文件中包含該頭文件。文件,以便其他構(gòu)件頭文件中包含該頭文件。5.3.2 底層構(gòu)件的實現(xiàn)方法與編程思想底層構(gòu)件的實現(xiàn)方法與編程思想 底層構(gòu)件是與硬件直接打交道

40、的軟件,由頭文件和源程底層構(gòu)件是與硬件直接打交道的軟件,由頭文件和源程序文件兩部分組成。序文件兩部分組成。 頭文件中的內(nèi)容主要有:包含下層構(gòu)件頭文件的頭文件中的內(nèi)容主要有:包含下層構(gòu)件頭文件的#include語句、用以描述構(gòu)件屬性的宏定義語句以及對外接語句、用以描述構(gòu)件屬性的宏定義語句以及對外接口函數(shù)原型說明??诤瘮?shù)原型說明。 在頭文件中使用函數(shù)原型,對于建立代碼模塊和外部接在頭文件中使用函數(shù)原型,對于建立代碼模塊和外部接口的規(guī)范,便于他人使用,都是很有幫助的??诘囊?guī)范,便于他人使用,都是很有幫助的。 源程序文件中存放構(gòu)件的內(nèi)部函數(shù)和外部函數(shù)的定義,源程序文件中存放構(gòu)件的內(nèi)部函數(shù)和外部函數(shù)的定

41、義,即函數(shù)的實現(xiàn)代碼,以完成函數(shù)所要實現(xiàn)的功能。即函數(shù)的實現(xiàn)代碼,以完成函數(shù)所要實現(xiàn)的功能。 在對底層構(gòu)件進(jìn)行設(shè)計時,最關(guān)鍵的工作是要對構(gòu)件的在對底層構(gòu)件進(jìn)行設(shè)計時,最關(guān)鍵的工作是要對構(gòu)件的共性和個性進(jìn)行分析,抽取出構(gòu)件的屬性和對外接口函數(shù)。共性和個性進(jìn)行分析,抽取出構(gòu)件的屬性和對外接口函數(shù)。盡量做到:當(dāng)一個底層構(gòu)件應(yīng)用到不同系統(tǒng)中時,僅需修改盡量做到:當(dāng)一個底層構(gòu)件應(yīng)用到不同系統(tǒng)中時,僅需修改構(gòu)件的頭文件,對于構(gòu)件的源程序文件則不必修改或改動很構(gòu)件的頭文件,對于構(gòu)件的源程序文件則不必修改或改動很小。小。 在編寫構(gòu)件時,一般應(yīng)注意以下幾方面的內(nèi)容:在編寫構(gòu)件時,一般應(yīng)注意以下幾方面的內(nèi)容: (

42、1)構(gòu)件的頭文件名和源程序文件名一致,且為構(gòu)件)構(gòu)件的頭文件名和源程序文件名一致,且為構(gòu)件名。名。 (2)屬性和操作的命名統(tǒng)一以構(gòu)件名開頭。這樣做的)屬性和操作的命名統(tǒng)一以構(gòu)件名開頭。這樣做的好處是:當(dāng)使用底層構(gòu)件組裝軟件系統(tǒng)時,避免構(gòu)件之間好處是:當(dāng)使用底層構(gòu)件組裝軟件系統(tǒng)時,避免構(gòu)件之間出現(xiàn)同名現(xiàn)象。出現(xiàn)同名現(xiàn)象。 (3)對)對MCU內(nèi)的模塊寄存器名和端口名進(jìn)行重定義,內(nèi)的模塊寄存器名和端口名進(jìn)行重定義,在其他的代碼里面都將使用宏名對模塊寄存器和端口進(jìn)行在其他的代碼里面都將使用宏名對模塊寄存器和端口進(jìn)行操作。這樣,當(dāng)?shù)讓域?qū)動程序移植到其他操作。這樣,當(dāng)?shù)讓域?qū)動程序移植到其他MCU時,只要時

43、,只要修改重定義語句就可以了。修改重定義語句就可以了。 (4)內(nèi)部函數(shù)與外部函數(shù)要設(shè)計合理,函數(shù)參數(shù)個數(shù))內(nèi)部函數(shù)與外部函數(shù)要設(shè)計合理,函數(shù)參數(shù)個數(shù)及類型要考慮全面。及類型要考慮全面。 (5)應(yīng)用程序在使用底層構(gòu)件時,嚴(yán)格禁止通過全局)應(yīng)用程序在使用底層構(gòu)件時,嚴(yán)格禁止通過全局變量來傳遞參數(shù),所有的數(shù)據(jù)傳遞都要通過函數(shù)的形式參變量來傳遞參數(shù),所有的數(shù)據(jù)傳遞都要通過函數(shù)的形式參數(shù)來接收。這樣做不但使得接口簡潔,更加避免了全局變數(shù)來接收。這樣做不但使得接口簡潔,更加避免了全局變量可能引發(fā)的安全隱患。量可能引發(fā)的安全隱患。5.3.3 硬件構(gòu)件及底層軟件構(gòu)件的重用與移植方法硬件構(gòu)件及底層軟件構(gòu)件的重用

44、與移植方法 1硬件構(gòu)件的重用與移植硬件構(gòu)件的重用與移植 對于以單對于以單MCU為核心的嵌入式應(yīng)用系統(tǒng)而言,當(dāng)用硬件為核心的嵌入式應(yīng)用系統(tǒng)而言,當(dāng)用硬件構(gòu)件構(gòu)件“組裝組裝”硬件系統(tǒng)時,核心構(gòu)件(即最小系統(tǒng))有且只硬件系統(tǒng)時,核心構(gòu)件(即最小系統(tǒng))有且只有一個,而中間構(gòu)件和終端構(gòu)件可有多個,并且相同類型的有一個,而中間構(gòu)件和終端構(gòu)件可有多個,并且相同類型的構(gòu)件可出現(xiàn)多次。下面以終端構(gòu)件構(gòu)件可出現(xiàn)多次。下面以終端構(gòu)件LCD為例,介紹硬件構(gòu)件為例,介紹硬件構(gòu)件的移植方法。的移植方法。 2底層構(gòu)件的移植底層構(gòu)件的移植 當(dāng)一個已設(shè)計好的底層構(gòu)件當(dāng)一個已設(shè)計好的底層構(gòu)件移植到另外一個嵌入式系統(tǒng)中移植到另外一

45、個嵌入式系統(tǒng)中時,其頭文件和程序文件是否時,其頭文件和程序文件是否需要改動要視具體情況而定。需要改動要視具體情況而定。例如:系統(tǒng)的核心構(gòu)件發(fā)生改例如:系統(tǒng)的核心構(gòu)件發(fā)生改變(即變(即MCU型號改變)時,型號改變)時,底層內(nèi)部構(gòu)件頭文件和某些對底層內(nèi)部構(gòu)件頭文件和某些對外接口函數(shù)也要隨之改變,例外接口函數(shù)也要隨之改變,例如模塊初始化函數(shù)。而對于外如模塊初始化函數(shù)。而對于外接硬件構(gòu)件,希望不改動程序接硬件構(gòu)件,希望不改動程序文件,而只改動頭文件,那么,文件,而只改動頭文件,那么,頭文件就必須充分設(shè)計。以頭文件就必須充分設(shè)計。以LCD構(gòu)件為例,與前圖相對應(yīng)構(gòu)件為例,與前圖相對應(yīng)的底層構(gòu)件頭文件的底層

46、構(gòu)件頭文件lcd.h可如可如下編寫。下編寫。5.4 底層驅(qū)動構(gòu)件封裝規(guī)范底層驅(qū)動構(gòu)件封裝規(guī)范5.4.1 構(gòu)件設(shè)計的基本原則構(gòu)件設(shè)計的基本原則 良好的底層驅(qū)動構(gòu)件具備如下特性:良好的底層驅(qū)動構(gòu)件具備如下特性: (1)封裝性。)封裝性。 (2)描述性。)描述性。 (3)可移植性。)可移植性。 (4)可復(fù)用性。)可復(fù)用性。 構(gòu)件被組織成具有一定獨立性的功能模塊,由以構(gòu)件的構(gòu)件被組織成具有一定獨立性的功能模塊,由以構(gòu)件的名稱命名的頭文件(名稱命名的頭文件(.h)和源文件)和源文件(.c)文件兩部分組成。文件兩部分組成。 構(gòu)件的頭文件中,主要包含引用必要的文件、描述構(gòu)件構(gòu)件的頭文件中,主要包含引用必要的

47、文件、描述構(gòu)件功能特性的宏定義語句以及聲明對外提供服務(wù)的函數(shù)接口。功能特性的宏定義語句以及聲明對外提供服務(wù)的函數(shù)接口。 構(gòu)件的源文件中存放構(gòu)件的內(nèi)部函數(shù)和對外提供服務(wù)函數(shù)的構(gòu)件的源文件中存放構(gòu)件的內(nèi)部函數(shù)和對外提供服務(wù)函數(shù)的定義,即函數(shù)的實現(xiàn)代碼,完成構(gòu)件所要實現(xiàn)的功能。定義,即函數(shù)的實現(xiàn)代碼,完成構(gòu)件所要實現(xiàn)的功能。 調(diào)用者通過構(gòu)件接口獲取服務(wù),而不必關(guān)心服務(wù)函數(shù)的調(diào)用者通過構(gòu)件接口獲取服務(wù),而不必關(guān)心服務(wù)函數(shù)的具體實現(xiàn)細(xì)節(jié)。這就是構(gòu)件設(shè)計的基本內(nèi)容。具體實現(xiàn)細(xì)節(jié)。這就是構(gòu)件設(shè)計的基本內(nèi)容。 為了使構(gòu)件設(shè)計滿足封裝性、描述性、可移植性、可復(fù)為了使構(gòu)件設(shè)計滿足封裝性、描述性、可移植性、可復(fù)用性

48、的基本要求,嵌入式底層驅(qū)動構(gòu)件的開發(fā),應(yīng)遵循層用性的基本要求,嵌入式底層驅(qū)動構(gòu)件的開發(fā),應(yīng)遵循層次化、易用性、魯棒性及對內(nèi)存的可靠使用原則。次化、易用性、魯棒性及對內(nèi)存的可靠使用原則。 1層次化原則層次化原則 (1)針對應(yīng)用場景和服務(wù)對象,分層組織構(gòu)件。)針對應(yīng)用場景和服務(wù)對象,分層組織構(gòu)件。 (2)在構(gòu)件的層次模型中,上層構(gòu)件可以調(diào)用下層構(gòu))在構(gòu)件的層次模型中,上層構(gòu)件可以調(diào)用下層構(gòu)件提供的服務(wù),同一層次的構(gòu)件不存在相互依賴關(guān)系,不件提供的服務(wù),同一層次的構(gòu)件不存在相互依賴關(guān)系,不能相互調(diào)用。能相互調(diào)用。 2易用性原則易用性原則 易用性在于讓調(diào)用者能夠快速理解的構(gòu)件提供服務(wù)的功易用性在于讓調(diào)

49、用者能夠快速理解的構(gòu)件提供服務(wù)的功能并進(jìn)行使用。遵循易用性原則設(shè)計底層驅(qū)動構(gòu)件需要做能并進(jìn)行使用。遵循易用性原則設(shè)計底層驅(qū)動構(gòu)件需要做到:函數(shù)名簡潔且達(dá)意;接口參數(shù)清晰,范圍明確;使用到:函數(shù)名簡潔且達(dá)意;接口參數(shù)清晰,范圍明確;使用說明語言精煉規(guī)范,避免二義性。此外,在函數(shù)的實現(xiàn)方說明語言精煉規(guī)范,避免二義性。此外,在函數(shù)的實現(xiàn)方面,避免編寫代碼量過多。面,避免編寫代碼量過多。 3魯棒性原則魯棒性原則 魯棒性在于為調(diào)用者提供安全的服務(wù),避免在程序執(zhí)行魯棒性在于為調(diào)用者提供安全的服務(wù),避免在程序執(zhí)行過程中出現(xiàn)異常狀況。遵循魯棒性原則設(shè)計底層驅(qū)動構(gòu)件過程中出現(xiàn)異常狀況。遵循魯棒性原則設(shè)計底層驅(qū)動

50、構(gòu)件需要做到:在明確函數(shù)輸入輸出的取值范圍、提供清晰接需要做到:在明確函數(shù)輸入輸出的取值范圍、提供清晰接口描述的同時,在函數(shù)實現(xiàn)的內(nèi)部要有對輸入?yún)?shù)的檢測,口描述的同時,在函數(shù)實現(xiàn)的內(nèi)部要有對輸入?yún)?shù)的檢測,對超出合法范圍的輸入?yún)?shù)進(jìn)行必要的處理;使用分支判對超出合法范圍的輸入?yún)?shù)進(jìn)行必要的處理;使用分支判斷時,確保對分支條件判斷的完整性,對缺省分支進(jìn)行處斷時,確保對分支條件判斷的完整性,對缺省分支進(jìn)行處理。理。同時,不能忽視編譯警告錯誤。同時,不能忽視編譯警告錯誤。 4內(nèi)存可靠使用原則內(nèi)存可靠使用原則 遵循內(nèi)存可靠使用原則設(shè)計底層驅(qū)動構(gòu)件需要做到:遵循內(nèi)存可靠使用原則設(shè)計底層驅(qū)動構(gòu)件需要做到

51、: (1)優(yōu)先使用靜態(tài)分配內(nèi)存。)優(yōu)先使用靜態(tài)分配內(nèi)存。 (2)謹(jǐn)慎地使用變量。)謹(jǐn)慎地使用變量。 (3)檢測空指針。)檢測空指針。 (4)檢測緩沖區(qū)溢出,并為內(nèi)存中的緩沖區(qū)預(yù)留不?。z測緩沖區(qū)溢出,并為內(nèi)存中的緩沖區(qū)預(yù)留不小于于20%的冗余。的冗余。 (5)對內(nèi)存的使用情況進(jìn)行評估。)對內(nèi)存的使用情況進(jìn)行評估。5.4.2 編碼風(fēng)格基本規(guī)范編碼風(fēng)格基本規(guī)范 1文件、函數(shù)、變量、宏及結(jié)構(gòu)體類型的命名規(guī)范文件、函數(shù)、變量、宏及結(jié)構(gòu)體類型的命名規(guī)范 命名的基本原則是:命名的基本原則是: (1)命名清晰明了,有明確含義,使用完整單詞或約定俗)命名清晰明了,有明確含義,使用完整單詞或約定俗成的縮寫。命名

52、中若使用特殊約定或縮寫,要有注釋說明。成的縮寫。命名中若使用特殊約定或縮寫,要有注釋說明。 (2)命名風(fēng)格要自始至終保持一致。)命名風(fēng)格要自始至終保持一致。 (3)為了代碼復(fù)用,命名中應(yīng)避免使用與具體項目相關(guān)的)為了代碼復(fù)用,命名中應(yīng)避免使用與具體項目相關(guān)的前綴。前綴。 (4)為了便于管理,對程序?qū)嶓w的命名要體現(xiàn)出所屬構(gòu)件)為了便于管理,對程序?qū)嶓w的命名要體現(xiàn)出所屬構(gòu)件的名稱。的名稱。 (5)使用英語命名。)使用英語命名。 (6)除宏命名外,名稱字符串全部小寫,以下劃線)除宏命名外,名稱字符串全部小寫,以下劃線“_”作作為單詞的分隔符。首尾字母不用為單詞的分隔符。首尾字母不用“_”。 針對嵌入

53、式底層驅(qū)動構(gòu)件的設(shè)計需要,對文件、函數(shù)、針對嵌入式底層驅(qū)動構(gòu)件的設(shè)計需要,對文件、函數(shù)、 變量、宏及數(shù)據(jù)結(jié)構(gòu)類型的命令特別進(jìn)行說明。變量、宏及數(shù)據(jù)結(jié)構(gòu)類型的命令特別進(jìn)行說明。 1)文件的命名)文件的命名 底層驅(qū)動構(gòu)件在具體設(shè)計時分為兩個文件,其中頭文件底層驅(qū)動構(gòu)件在具體設(shè)計時分為兩個文件,其中頭文件命名為命名為“.h”,源文件命名為,源文件命名為“.c”,其中其中表示具體的硬件模塊的名稱。表示具體的硬件模塊的名稱。 2)函數(shù)的命名)函數(shù)的命名 底層驅(qū)動構(gòu)件的函數(shù)從屬于驅(qū)動構(gòu)件,驅(qū)動函數(shù)的命名底層驅(qū)動構(gòu)件的函數(shù)從屬于驅(qū)動構(gòu)件,驅(qū)動函數(shù)的命名除要體現(xiàn)函數(shù)功能外,還需要使用命名前綴和后綴標(biāo)識其除要體

54、現(xiàn)函數(shù)功能外,還需要使用命名前綴和后綴標(biāo)識其所屬的構(gòu)件及不同的實現(xiàn)方式。所屬的構(gòu)件及不同的實現(xiàn)方式。 函數(shù)名前綴:底層驅(qū)動構(gòu)件中定義的所有函數(shù)均使用函數(shù)名前綴:底層驅(qū)動構(gòu)件中定義的所有函數(shù)均使用“_”前綴表示其所屬的驅(qū)動構(gòu)件模塊。前綴表示其所屬的驅(qū)動構(gòu)件模塊。 函數(shù)名后綴:對同一服務(wù)的不同方式的實現(xiàn),使用后綴函數(shù)名后綴:對同一服務(wù)的不同方式的實現(xiàn),使用后綴加以區(qū)分。加以區(qū)分。 3)函數(shù)形參變量與函數(shù)內(nèi)局部變量的命名)函數(shù)形參變量與函數(shù)內(nèi)局部變量的命名 對嵌入式底層驅(qū)動構(gòu)件進(jìn)行編碼的過程中,需要考慮對對嵌入式底層驅(qū)動構(gòu)件進(jìn)行編碼的過程中,需要考慮對底層驅(qū)動函數(shù)形參變量及驅(qū)動函數(shù)內(nèi)部局部變量的命名

55、。底層驅(qū)動函數(shù)形參變量及驅(qū)動函數(shù)內(nèi)部局部變量的命名。 函數(shù)形參變量:函數(shù)形參變量名是使用函數(shù)時理解形參函數(shù)形參變量:函數(shù)形參變量名是使用函數(shù)時理解形參的最直觀印象,表示傳參的功能說明。的最直觀印象,表示傳參的功能說明。 局部變量:局部變量的命名與函數(shù)形參變量類似。局部變量:局部變量的命名與函數(shù)形參變量類似。 4)宏常量及宏函數(shù)的命名)宏常量及宏函數(shù)的命名 宏常量及宏函數(shù)的命名全部使用大寫字符,使用下劃線宏常量及宏函數(shù)的命名全部使用大寫字符,使用下劃線“_”為分隔符。例如,在構(gòu)件公共要素中定義的開關(guān)中斷為分隔符。例如,在構(gòu)件公共要素中定義的開關(guān)中斷的宏如下:的宏如下: 5)結(jié)構(gòu)體類型的命名、類型

56、定與變量聲明)結(jié)構(gòu)體類型的命名、類型定與變量聲明 (1)結(jié)構(gòu)體類型名稱使用小寫字母命名)結(jié)構(gòu)體類型名稱使用小寫字母命名 (),定義結(jié)構(gòu)體類型變量時,),定義結(jié)構(gòu)體類型變量時,全部使用大寫字母命名全部使用大寫字母命名()。)。 (2)對結(jié)構(gòu)體內(nèi)部字段全部使用大寫字母命名()對結(jié)構(gòu)體內(nèi)部字段全部使用大寫字母命名()。)。 (3)定義類型時,同時聲明一個結(jié)構(gòu)體變量和結(jié)構(gòu)體)定義類型時,同時聲明一個結(jié)構(gòu)體變量和結(jié)構(gòu)體指針變量。指針變量。 模板如下:模板如下:2排版排版 對程序進(jìn)行排版是指,通過插入空格與空行,使用縮進(jìn)對程序進(jìn)行排版是指,通過插入空格與空行,使用縮進(jìn)、斷行等手段,調(diào)整代碼的書面版式,使代

57、碼整體美觀、清晰、斷行等手段,調(diào)整代碼的書面版式,使代碼整體美觀、清晰,從而提高代碼的可讀性。,從而提高代碼的可讀性。 1)空行與空格)空行與空格 關(guān)于空行:相對獨立的程序塊之間須加空行。關(guān)于空行:相對獨立的程序塊之間須加空行。 關(guān)于空格:在兩個以上的關(guān)鍵字、變量、常量進(jìn)行對等關(guān)于空格:在兩個以上的關(guān)鍵字、變量、常量進(jìn)行對等操作時,它們之間的操作符之前、之后或者前后要加空格,必操作時,它們之間的操作符之前、之后或者前后要加空格,必要時加兩個空格;進(jìn)行非對等操作時,如果是關(guān)系密切的立即要時加兩個空格;進(jìn)行非對等操作時,如果是關(guān)系密切的立即操作符(如操作符(如),其后不應(yīng)加空格。),其后不應(yīng)加空格

58、。 2)縮進(jìn))縮進(jìn) 使用空格縮進(jìn),不使用使用空格縮進(jìn),不使用Tab鍵,這樣代碼復(fù)制打印是不會鍵,這樣代碼復(fù)制打印是不會造成錯亂。代碼的每一級均往右縮進(jìn)造成錯亂。代碼的每一級均往右縮進(jìn)4個空格的位置。個空格的位置。 3)斷行)斷行 (1)較長的語句()較長的語句(78字符)要分成多行書寫,長表達(dá)字符)要分成多行書寫,長表達(dá)式要在低優(yōu)先級操作符處劃分新行,操作符放在新行之首,劃式要在低優(yōu)先級操作符處劃分新行,操作符放在新行之首,劃分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn),使排版整齊,語句可讀。分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn),使排版整齊,語句可讀。 (2)循環(huán)、判斷等語句中若有較長的表達(dá)式或語句,則)循環(huán)、判斷等語句

59、中若有較長的表達(dá)式或語句,則要進(jìn)行適應(yīng)的劃分,長表達(dá)式要在低優(yōu)先級操作符處劃分新行要進(jìn)行適應(yīng)的劃分,長表達(dá)式要在低優(yōu)先級操作符處劃分新行,操作符放在新行之首。,操作符放在新行之首。 (3)若函數(shù)或過程中的參數(shù)較長,則要進(jìn)行適當(dāng)?shù)膭澐郑┤艉瘮?shù)或過程中的參數(shù)較長,則要進(jìn)行適當(dāng)?shù)膭澐帧?(4)不允許把多個短語句寫在一行中,即一行只寫一條)不允許把多個短語句寫在一行中,即一行只寫一條語句。特殊情況可用,例如語句。特殊情況可用,例如“if (x3) x=3;”可以在一行??梢栽谝恍小?(5)if、for、do、while、case、switch、default等語等語句后的程序塊分界符(如句后的程序塊分

60、界符(如C/C+語言的大括號語言的大括號和和)應(yīng))應(yīng)各獨占一行并且位于同一列,且與以上保留字左對齊。各獨占一行并且位于同一列,且與以上保留字左對齊。 3注釋注釋 在程序代碼中使用注釋,有助于對程序的閱讀理解,說在程序代碼中使用注釋,有助于對程序的閱讀理解,說明程序在明程序在“做什么做什么”,解釋代碼的目的、功能和采用的方,解釋代碼的目的、功能和采用的方法。法。 (1)一般情況源程序有效注釋量在)一般情況源程序有效注釋量在30左右。左右。 (2)注釋語言必須準(zhǔn)確、易懂、簡潔。)注釋語言必須準(zhǔn)確、易懂、簡潔。 (3)編寫和修改代碼的同時,處理好相應(yīng)的注釋。)編寫和修改代碼的同時,處理好相應(yīng)的注釋。 (4)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論