C語言設(shè)計規(guī)范課件_第1頁
C語言設(shè)計規(guī)范課件_第2頁
C語言設(shè)計規(guī)范課件_第3頁
C語言設(shè)計規(guī)范課件_第4頁
C語言設(shè)計規(guī)范課件_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、培訓(xùn)內(nèi)容:單片機程序設(shè)計規(guī)范培訓(xùn)目的:讓員工培養(yǎng)好的編程習(xí)慣,了解、掌握編程規(guī)范;統(tǒng)一部門編程風(fēng)格,保證程序編寫質(zhì)量,提高程序的可移植性和維護性第1頁,共18頁。單片機程序設(shè)計規(guī)范一、程序質(zhì)量的評估 程序的優(yōu)劣可以從兩個方面進行評估,定量指標和定性指標。 (1)定量指標包括: 1) 程序代碼執(zhí)行效率; 2) 程序占用資源多少。 2022/8/17第2頁,共18頁。單片機程序設(shè)計規(guī)范(2)定性指標包括: 1) 可調(diào)試性,即是否方便排除程序語法錯誤; 2) 可測試性,即是否方便驗證程序功能的正確性; 3) 可維護性,即是否方便程序的修改和升級; 4) 可移植性; 5) 可讀性。 2022/8/17

2、第3頁,共18頁。二、程序架構(gòu) 應(yīng)用層、 界面層和底層驅(qū)動層1) 底層驅(qū)動層主要包含直接和硬件相關(guān)的驅(qū)動程序,如數(shù)碼管顯示、按鍵、峰鳴器、繼電器和電機控制等。底層的各個模塊間要保持各自的獨立性,不產(chǎn)生直接的數(shù)據(jù)交互,底層也不直接訪問應(yīng)用層,如果有需要,都要通過界面層進行數(shù)據(jù)交互2) 界面層主要提供數(shù)據(jù)交互,為應(yīng)用層和底層驅(qū)動之間以及底層驅(qū)動層各模塊之間提供數(shù)據(jù)的交互。 3) 應(yīng)用層主要完成具體功能的實現(xiàn),它要通過界面層控制底層驅(qū)動層各模塊來完成所需功能,而不能越過界面層直接訪問底層驅(qū)動層。所有的用戶接口要在應(yīng)用層來實現(xiàn). 2022/8/17第4頁,共18頁。三、設(shè)計基本原則 1) 盡量減少各個

3、子程序功能模塊間的耦合度(耦合度是指一個程序的執(zhí)行對另一個程序的影響力),保證各自的獨立性。一般情況下,建議子程序模塊功能的劃分要盡可能細化,功能盡量單一,減少子程序模塊間的數(shù)據(jù)交互。 2) 在滿足功能需求的情況下,可適當(dāng)犧牲代碼的執(zhí)行速度,以保證程序的透明度。 3) 主要子程序模塊間的交互,要通過特定的界面跟應(yīng)用層進行溝通,可使用 FIFO(Firstin,F(xiàn)irstout)或是Buffer兩種方式。每種子程序模塊都可以有自己的FIFO。例如:就按鍵來說,一般有Key buffer、Key FIFO或直接進入AP FIFO 三種設(shè)計方式2022/8/17第5頁,共18頁。4) 每個子程序模塊

4、只能有唯一一個程序入口地址在程序的首部,只能有唯一一個程序出口地址在程序的尾部。 5) 上電復(fù)位時要對所有的RAM 空間進行初始化(建議用戶寄存器清零,系統(tǒng)寄存器進行必要設(shè)定),不要使用未經(jīng)初始化的變量。RAM 未經(jīng)過完整的初始化,容易導(dǎo)致程序執(zhí)行的不確定性,這一不良現(xiàn)象往往在批量生產(chǎn)中有所體現(xiàn)。( 這點是工程師經(jīng)常犯錯的地方,須特別注意) 6) 系統(tǒng)中如果需要等待一些未知的應(yīng)答信號,如通信或等待輸入信號時,必須進行超時或異常處理,以防止程序進入“死等”狀態(tài)。2022/8/17第6頁,共18頁。7) 通過對系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的劃分與組織的改進,以及對程序算法的優(yōu)化來提高空間效率。這種方式是解決軟件空

5、間效率的根本辦法。8) 保證循環(huán)體內(nèi)的工作量最小化。應(yīng)仔細考慮循環(huán)體內(nèi)的語句是否可以放在循環(huán)體之外,使循環(huán)體內(nèi)工作量最小,從而提高程序的執(zhí)行效率。9) 在多重循環(huán)中,應(yīng)將最忙的循環(huán)放在最內(nèi)層。2022/8/17第7頁,共18頁。10) 中斷處理程序應(yīng)盡量短。有效的作法為:在中斷中進行標記,在主程序中進行處理。但一些實時性要求較高的程序例外。此外,進入中斷時應(yīng)該保存涉及到的變量和寄存器。 11) 看門狗的正確使用??撮T狗主要用于微控制器死機時的時間溢出復(fù)位,需要程序適時清除。正確的處理方式為:整個系統(tǒng)程序中盡量保證只有一處清看門狗位置,而且應(yīng)處在主循環(huán)的主干位置。切記不可在定時中斷中清狗,因為微

6、控制器有時只是在主循環(huán)中死掉。2022/8/17第8頁,共18頁。四、排版風(fēng)格1、 程序采用縮進風(fēng)格編寫,縮進為1個Tab鍵,1個Tab鍵定義為8個空格位。 2、 程序中的標號要從第一列開始書寫。以“.”開頭的預(yù)編譯命令也要從第一列開始書寫,其他預(yù)編譯命令采用縮進風(fēng)格編寫。 3、定義變量或常量時,變量名或常量名與命令符之間使用2個Tab鍵(相當(dāng)于16個空格位)分開,命令符與后面的操作數(shù)用1個Tab鍵(相當(dāng)于8個空格位)分開。4、程序語句后面若有注釋,所有的注釋要遵守上下對齊的原則。 2022/8/17第9頁,共18頁。五、注釋1. 程序應(yīng)該包括兩個部分注釋,說明部分和語句注釋。一般情況下,源程

7、序有效注釋量必須在30以上。 2. 說明部分: 1) 源文件說明部分位于每個源文件的最前面,主要描述:文件名、作者、生成日期、聯(lián)絡(luò)方式、功能描述、版本號、軟硬件平臺、版權(quán)說明、修改記錄等的簡要說明,以英文書寫。2) 子程序說明部分位于每個子程序的最前面,主要描述:子程序名稱、功能、設(shè)計原理、所用變量、入口條件、出口信息、調(diào)用模塊、堆棧層數(shù)、影響資源、算法簡述、使用說明和修改記錄等。2022/8/17第10頁,共18頁。3. 邊寫代碼邊注釋,修改代碼的同時修改相應(yīng)注釋,以保證注釋與代碼的一致性。不再有用的注釋要刪除。 4. 要避免在注釋中使用縮寫,特別是非常用縮寫。 5. 程序在必要的地方必須有

8、注釋,注釋要準確、易懂、簡潔。注釋要有意義,如果有需要,還要詳細描述相關(guān)含義。6. 注釋格式盡量統(tǒng)一,對多行注釋建議使用 “/* */”,對單行的注釋建議使用 “;” 7. 對有含義的變量、常量,如果其命名不是充分自注釋的,在聲明時都必須加以注釋,說明其含義。2022/8/17第11頁,共18頁。六、命名規(guī)則1. 變量的名稱要采用有意義的英文單詞或縮寫,如key、buffer2. 局部無特殊含義變量i,j,k等3. 臨時變量tem、tmp等開頭,長度、計數(shù)采用len、num、count等4. 在定義部分要加入注釋來說明變量的含義。5. 函數(shù)名用小寫字母命名,每個詞的第一個字母大寫,并將模塊標識

9、加在最前面。 2022/8/17第12頁,共18頁。七、函數(shù)設(shè)計規(guī)范(1)函數(shù)的基本要求: 正確性:程序要實現(xiàn)設(shè)計要求的功能。 穩(wěn)定性和安全性:程序運行穩(wěn)定、可靠、安全。 可測試性:程序便于測試和評價。 規(guī)范可讀性:程序書寫風(fēng)格、命名規(guī)則等符合規(guī)范。 擴展性:代碼為下一次升級擴展留有空間和接口。 全局效率:軟件系統(tǒng)的整體效率高。 局部效率:某個模塊子模塊/函數(shù)的本身效率高。 2022/8/17第13頁,共18頁。(2)編制函數(shù)的基本原則: 單個函數(shù)的規(guī)模盡量限制在200 行以內(nèi)(不包括注釋和空行)。一個 函數(shù)只完成一個功能。 函數(shù)局部變量的數(shù)目一般不超過510 個。 函數(shù)內(nèi)部局部變量定義區(qū)和功

10、能實現(xiàn)區(qū) (包含變量初始化)之間空一行。 函數(shù)名應(yīng)準確描述函數(shù)的功能。通常使用動賓詞組為執(zhí)行某操作的函數(shù)命名。 函數(shù)的返回值要清楚明了,尤其是出錯返回值的意義要準確無誤。 不要把與函數(shù)返回值類型不同的變量,以編譯系統(tǒng)默認的轉(zhuǎn)換方式或強制的轉(zhuǎn)換方式作為返回值返回。 減少函數(shù)本身或函數(shù)間的遞歸調(diào)用。 2022/8/17第14頁,共18頁。八、模塊化編程規(guī)范簡介模塊化編程主要實現(xiàn)方法:宏定義、函數(shù)、文件1)宏定義是C語音的一種預(yù)處理的方法,可以通過宏定義實現(xiàn)簡單的模塊預(yù)處理2)利用函數(shù)形式實現(xiàn)某個基礎(chǔ)功能。通過形參、實參、返回值等實現(xiàn)調(diào)用3)文件即是一個.c 文件和一個.h 文件的結(jié)合,頭文件(.h

11、)中是對于該模塊接口的聲明;這一條概括了模塊化的實現(xiàn)方法和實質(zhì):將一個功能模塊的代碼單獨編寫成一個.c 文件,然后把該模塊的接口函數(shù)放在.h 文件中.2022/8/17第15頁,共18頁。(1)模塊化編程設(shè)計步驟 1) 、創(chuàng)建頭文件 在模塊化編程中,往往會有多個C 文件,而且每個C 文件的作用不盡相同。在我們的C 文件中,由于需要對外提供接口,因此還必須有一些函數(shù)或者是變量提供給外部其它文件進行調(diào)用。對于每一個模塊都有相應(yīng)的.c 文件和.h 文件,為了閱讀調(diào)試方便,原則上.c 文件和.h 文件同名,如delay.c 和delay.h頭文件的作用可以稱其為一份接口描述文件。2022/8/17第16頁,共18頁。2)代碼封裝 將需要模塊化的進行代碼封裝,如:串口通信模塊,將串口初始化、數(shù)據(jù)接收、數(shù)據(jù)發(fā)送函數(shù)進行封裝3)編譯、調(diào)試、測試4)使用源文件(將文件加到工程之中) 將.c 文件添加到工程之中,同時在需要調(diào)用.h 文件中的宏或函數(shù)的.c 文件中將.h 文件包含進去(.h 文

溫馨提示

  • 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論