面向硬件對象底層驅(qū)動設(shè)計_第1頁
面向硬件對象底層驅(qū)動設(shè)計_第2頁
面向硬件對象底層驅(qū)動設(shè)計_第3頁
面向硬件對象底層驅(qū)動設(shè)計_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

1、 面向硬件對象底層驅(qū)動程序設(shè)計要求1. 硬件對象獨立編程的實體就是硬件對象,硬件對象分為內(nèi)部對象和外部對象,內(nèi)部對象比如系統(tǒng)初始化、定時器、Flash、串口等,外部對象比如LED、開關(guān)、按鈕、電機等。每個對象有獨立模塊。2.程序設(shè)計基本原則2.1 對每個硬件對象編寫?yīng)毩⒌尿?qū)動程序每個對象對應(yīng)一個頭文件和源文件,如果對象是外部對象,則要在頭文件用宏定義對象接在哪個腳上,頭文件只聲明供外部調(diào)用的功能函數(shù),也就是說,其他人只要看頭文件函數(shù)聲明就知道如何使用此對象而無需去看源文件去閱讀代碼。一般函數(shù)的命名規(guī)則是:對象_功能,比如初始化LED,函數(shù)名可以為LED_Ini t。如果一個函數(shù)只供對象功能函數(shù)

2、內(nèi)部調(diào)用,則此函數(shù)在源文件里面聲明和實現(xiàn),不出現(xiàn)在頭文件里,并聲明為static 函數(shù),因為聲明為static的函數(shù)只能供定義此函數(shù)的源文件使用,其他源文件看不到此函數(shù)。如果一個全局變量只供某模塊使用,則可以把此全局變量定義為static,這樣此變量只能在定義它的源文件中使用,其他源文件看不到此變量,所以不會產(chǎn)生命名沖突。2.2封裝要完整、封裝之間不能交叉模塊函數(shù)就實現(xiàn)此模塊要實現(xiàn)的功能,模塊內(nèi)部之間不能相互調(diào)用,如果要調(diào)用則交給高端來處理,比如在Flash子程序里面不能調(diào)用串口,當然測試Flash子程序的時候例外,當測試完畢時,必須把調(diào)用串口子程序代碼刪除,此時Flash子程序可以通過返回值

3、告訴高端,讓高端根據(jù)返回值來決定是否調(diào)用串口子程序。2.3 返回值問題如果只返回一個基本類型的返回值,則用返回值返回此值也可,如果返回一個復(fù)雜類型的返回值,比如一個struct結(jié)構(gòu)體,則用返回值返回的話要進行復(fù)制,開銷很大,此時用傳址方式返回,如果返回的值很多,可以把這些值定義在一個struct里面,通過指針形式返回。2.4 函數(shù)編寫函數(shù)第一要命名合理,一看函數(shù)名就知道此函數(shù)的功能、操作的對象。函數(shù)的層次最好不要多于5級,一個是效率降低,再一個閱讀性也變差,對每個函數(shù)注釋清楚,所有的函數(shù)代碼編寫方式有一個統(tǒng)一的風(fēng)格,注意對齊。函數(shù)中的堆棧變量使用前一定要負初值,在一個嵌入式的RAM一般比較少,

4、注意不要堆棧溢出。盡量用效率高的方式編碼,比如乘除可以用移位來實現(xiàn)。如果編寫的程序在16位控制器上運行,函數(shù)整型參數(shù)和局部整型變量要用16位,因為如果用8位的整型變量,系統(tǒng)要做多余的工作來防止8位溢出之類的事情,不僅不節(jié)省空間,還會降低效率,通過反匯編對比可以看出此現(xiàn)象。3. 測試測試是當模塊編寫完成后對其功能性的測試,先進行白盒測試,然后進行黑盒測試,測試要測試模塊所有可能的輸入,對非法的輸入進行檢測,一定測試全面。4. 調(diào)用驅(qū)動程序一般會在兩個地方調(diào)用驅(qū)動程序,一個是main函數(shù),一個是中斷處理函數(shù),可能有多個源文件包含相同的頭文件。設(shè)計頭文件的時候要避免重復(fù)定義問題,方法是:以定義LED

5、模塊為例,頭文件如下編寫:#ifndef _LED_H#define _LED_H/*函數(shù)聲明*/#endif5. 變量變量分為全局變量、堆棧變量、函數(shù)內(nèi)靜態(tài)變量、文件內(nèi)靜態(tài)變量、寄存器變量。寄存器變量是當某個變量頻繁使用很多次的時候為了避免每次從內(nèi)存中讀它,而把它放在寄存器中來改變性能。如果一個變量只在函數(shù)中使用,并且要一直存在,則命名為函數(shù)內(nèi)靜態(tài)變量,如果一個函數(shù)只在某個源文件中使用,此源文件各個函數(shù)通過此變量來通信,則此變量命名為文件內(nèi)靜態(tài)變量。所有的變量要有一定的命名規(guī)范,全局變量前面加前綴g_,靜態(tài)變量前面加前綴s_,寄存器變量前面加前綴r_,如果一個變量名由多個單詞組成,單詞之間可以用下劃線分開,也可以是第一個單詞字母大寫,不管使用何種命名寫法,全局要統(tǒng)一一致,不能兩種混合使用。6. 總體設(shè)計每個系統(tǒng)編碼之前一定要先設(shè)計,思路要弄清晰,之后才編碼。大任務(wù)調(diào)用小任務(wù),小任務(wù)如果全部正確,則大任務(wù)一定正確,知道某個小任務(wù)一定正確,但是大任務(wù)不正確,調(diào)試的時候就可以把此小任務(wù)

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論