




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、.單片機(jī)C51編程規(guī)范 1單片機(jī)C51編程規(guī)范 前言 為了提高源程序的質(zhì)量和可維護(hù)性,從而最終提高軟件產(chǎn)品生產(chǎn)力,特編寫此規(guī)范。 2 單片機(jī)C51編程規(guī)范范圍 本標(biāo)準(zhǔn)規(guī)定了程序設(shè)計人員進(jìn)行程序設(shè)計時必須遵循的規(guī)范。本規(guī)范主要針對C51編程語言和keil編譯器而言,包括排版、注釋、命名、變量使用、代碼可測性、程序效率、質(zhì)量保證等內(nèi)容。 3 單片機(jī)C51編程規(guī)范總則 l 格式清晰 l 注釋簡明扼要 l 命名規(guī)范易懂 l 函數(shù)模塊化 l 程序易讀易維護(hù) l 功能準(zhǔn)確實現(xiàn) l 代碼空間效率和時間效率高 l 適度的可擴(kuò)展性 4 單片機(jī)C51編程規(guī)范數(shù)據(jù)類型定義 編程時統(tǒng)一采用下述新類型名的方式定義數(shù)據(jù)類
2、型。 建立一個datatype.h文件,在該文件中進(jìn)行如下定義: typedef bit BOOL; / 位變量 / typedef unsigned char INT8U; / 無符號8位整型變量 / typedef signed char INT8S; / 有符號8位整型變量 / typedef unsigned int INT16U; / 無符號16位整型變量 / typedef signed int INT16S; / 有符號16位整型變量 / typedef unsigned long INT32U; / 無符號32位整型變量 / typedef signed long INT32S
3、; / 有符號32位整型變量 / typedef float FP32; / 單精度浮點(diǎn)數(shù)(32位長度) / typedef double FP64; / 雙精度浮點(diǎn)數(shù)(64位長度) / 5 單片機(jī)C51編程規(guī)范標(biāo)識符命名 5.1 命名基本原則 l 命名要清晰明了,有明確含義,使用完整單詞或約定俗成的縮寫。通常,較短的單詞可通過去掉元音字母形成縮寫;較長的單詞可取單詞的頭幾個字母形成縮寫。即"見名知意"。 l 命名風(fēng)格要自始至終保持一致。 l 命名中若使用特殊約定或縮寫,要有注釋說明。 l 除了編譯開關(guān)/頭文件等特殊應(yīng)用,應(yīng)避免使用以下劃線開始和或結(jié)尾的定義。 l 同一軟件
4、產(chǎn)品內(nèi)模塊之間接口部分的標(biāo)識符名稱之前加上模塊標(biāo)識。 5.2 宏和常量命名 宏和常量用全部大寫字母來命名,詞與詞之間用下劃線分隔。對程序中用到的數(shù)字均應(yīng)用有意義的枚舉或宏來代替。 5.3 變量命名 變量名用小寫字母命名,每個詞的第一個字母大寫。類型前綴(u8s8 etc.)全局變量另加前綴g_。 局部變量應(yīng)簡明扼要。局部循環(huán)體控制變量優(yōu)先使用i、j、k等;局部長度變量優(yōu)先使用len、num等;臨時中間變量優(yōu)先使用temp、tmp等。 5.4 函數(shù)命名 函數(shù)名用小寫字母命名,每個詞的第一個字母大寫,并將模塊標(biāo)識加在最前面。 5.5 文件命名 一個文件包含一類功能或一個模塊的所有函數(shù),文件名稱應(yīng)清
5、楚表明其功能或性質(zhì)。 每個.c文件應(yīng)該有一個同名的.h文件作為頭文件。 6 單片機(jī)C51編程規(guī)范注釋 6.1 注釋基本原則 l 有助于對程序的閱讀理解,說明程序在"做什么",解釋代碼的目的、功能和采用的方法。 l 一般情況源程序有效注釋量在30左右。 l 注釋語言必須準(zhǔn)確、易懂、簡潔。 l 邊寫代碼邊注釋,修改代碼同時修改相應(yīng)的注釋,不再有用的注釋要刪除。 6.2 文件注釋 文件注釋必須說明文件名、函數(shù)功能、創(chuàng)建人、創(chuàng)建日期、版本信息等相關(guān)信息。 修改文件代碼時,應(yīng)在文件注釋中記錄修改日期、修改人員,并簡要說明此次修改的目的。所有修改記錄必須保持完整。 文件注釋放在文件頂端
6、,用"/*/"格式包含。 注釋文本每行縮進(jìn)4個空格;每個注釋文本分項名稱應(yīng)對齊。 /* 文件名稱: 作 者: 版 本: 說 明: 修改記錄: */ 6.3 函數(shù)注釋 6.3.1 函數(shù)頭部注釋 函數(shù)頭部注釋應(yīng)包括函數(shù)名稱、函數(shù)功能、入口參數(shù)、出口參數(shù)等內(nèi)容。如有必要還可增加作者、創(chuàng)建日期、修改記錄(備注)等相關(guān)項目。 函數(shù)頭部注釋放在每個函數(shù)的頂端,用"/*/"的格式包含。其中函數(shù)名稱應(yīng)簡寫為FunctionName(),不加入、出口參數(shù)等信息。 /* 函數(shù)名稱: 函數(shù)功能: 入口參數(shù): 出口參數(shù): 備 注: */ 6.3.2 代碼注釋 代碼注釋應(yīng)與被注釋
7、的代碼緊鄰,放在其上方或右方,不可放在下面。如放于上方則需與其上面的代碼用空行隔開。一般少量注釋應(yīng)該添加在被注釋語句的行尾,一個函數(shù)內(nèi)的多個注釋左對齊;較多注釋則應(yīng)加在上方且注釋行與被注釋的語句左對齊。 函數(shù)代碼注釋用"/"的格式。 通常,分支語句(條件分支、循環(huán)語句等)必須編寫注釋。其程序塊結(jié)束行""的右方應(yīng)加表明該程序塊結(jié)束的標(biāo)記"end of ", 尤其在多重嵌套時。 6.4 變量、常量、宏的注釋 同一類型的標(biāo)識符應(yīng)集中定義,并在定義之前一行對其共性加以統(tǒng)一注釋。對單個標(biāo)識符的注釋加在定義語句的行尾。 全局變量一定要有詳細(xì)的注釋
8、,包括其功能、取值范圍、哪些函數(shù)或過程存取它以及存取時的注意事項等。 注釋用"/"的格式。 7 單片機(jī)C51編程規(guī)范函數(shù) 7.1 設(shè)計原則 函數(shù)的基本要求: l 正確性:程序要實現(xiàn)設(shè)計要求的功能。 l 穩(wěn)定性和安全性:程序運(yùn)行穩(wěn)定、可靠、安全。 l 可測試性:程序便于測試和評價。 l 規(guī)范可讀性:程序書寫風(fēng)格、命名規(guī)則等符合規(guī)范。 l 擴(kuò)展性:代碼為下一次升級擴(kuò)展留有空間和接口。 l 全局效率:軟件系統(tǒng)的整體效率高。 l 局部效率:某個模塊子模塊/函數(shù)的本身效率高。 編制函數(shù)的基本原則: l 單個函數(shù)的規(guī)模盡量限制在200行以內(nèi)(不包括注釋和空行)。一個函數(shù)只完成一個功能。
9、 l 函數(shù)局部變量的數(shù)目一般不超過510個。 l 函數(shù)內(nèi)部局部變量定義區(qū)和功能實現(xiàn)區(qū)(包含變量初始化)之間空一行。 l 函數(shù)名應(yīng)準(zhǔn)確描述函數(shù)的功能。通常使用動賓詞組為執(zhí)行某操作的函數(shù)命名。 l 函數(shù)的返回值要清楚明了,尤其是出錯返回值的意義要準(zhǔn)確無誤。 l 不要把與函數(shù)返回值類型不同的變量,以編譯系統(tǒng)默認(rèn)的轉(zhuǎn)換方式或強(qiáng)制的轉(zhuǎn)換方式作為返回值返回。 l 減少函數(shù)本身或函數(shù)間的遞歸調(diào)用。 l 盡量不要將函數(shù)的參數(shù)作為工作變量。 7.2 函數(shù)定義 l 函數(shù)若沒有入口參數(shù)或者出口參數(shù),應(yīng)用void明確申明。 l 函數(shù)名稱與出口參數(shù)類型定義間應(yīng)該空一格且只空一格。 l 函數(shù)名稱與括號()之間無空格。 l
10、 函數(shù)形參必須給出明確的類型定義。 l 多個形參的函數(shù),后一個形參與前一個形參的逗號分割符之間添加一個空格。 l 函數(shù)體的前后花括號"" 各獨(dú)占一行。 7.3 局部變量定義 l 同一行內(nèi)不要定義過多變量。 l 同一類的變量在同一行內(nèi)定義,或者在相鄰行定義。 l 先定義data型變量,再定義idtata型變量,再定義xdata型變量. l 數(shù)組、指針等復(fù)雜類型的定義放在定義區(qū)的最后。 l 變量定義區(qū)不做較復(fù)雜的變量賦值。 7.4 功能實現(xiàn)區(qū)規(guī)范 l 一行只寫一條語句。 l 注意運(yùn)算符的優(yōu)先級,并用括號明確表達(dá)式的操作順序,避免使用默認(rèn)優(yōu)先級。 l 各程序段之間使用一個空行分隔
11、,加以必要的注釋。程序段指能完一個較具體的功能的一行或多行代碼。程序段內(nèi)的各行代碼之間相互依賴性較強(qiáng)。 l 不要使用難懂的技巧性很高的語句。 l 源程序中關(guān)系較為緊密的代碼應(yīng)盡可能相鄰。 l 完成簡單功能、關(guān)系非常密切的一條或幾條語句可編寫為函數(shù)或定義為宏。 8 單片機(jī)C51編程規(guī)范排版 8.1 縮進(jìn) 代碼的每一級均往右縮進(jìn)4個空格的位置。 8.2 分行 過長的語句(超過80個字符)要分成多行書寫;長表達(dá)式要在低優(yōu)先級操作符處劃分新行,操作符放在新行之首,劃分出的新行要進(jìn)適當(dāng)?shù)目s進(jìn),使排版整齊,語句可讀。避免把注釋插入分行中。 8.3 空行 l 文件注釋區(qū)、頭文件引用區(qū)、函數(shù)間應(yīng)該有且只有一行
12、空行。 l 相鄰函數(shù)之間應(yīng)該有且只有一行空行。 l 函數(shù)體內(nèi)相對獨(dú)立的程序塊之間可以用一行空行或注釋來分隔。 l 函數(shù)注釋和對應(yīng)的函數(shù)體之間不應(yīng)該有空行。 l 文件末尾有且只有一行空行。 8.4 空格 l 函數(shù)語句尾部或者注釋之后不能有空格。 l 括號內(nèi)側(cè)(即左括號后面和右括號前面)不加空格,多重括號間不加空格。 l 函數(shù)形參之間應(yīng)該有且只有一個空格(形參逗號后面加空格)。 l 同一行中定義的多個變量間應(yīng)該有且只有一個空格(變量逗號后面加空格)。 l 表達(dá)式中,若有多個操作符連寫的情況,應(yīng)使用空格對它們分隔: 在兩個以上的關(guān)鍵字、變量、常量進(jìn)行對等操作時,它們之間的操作符前后均加一個空格;在兩
13、個以上的關(guān)鍵字、變量、常量進(jìn)行非對等操作時,其前后均不應(yīng)加空格; 逗號只在后面加空格; 雙目操作符,如比較操作符, 賦值操作符"="、"+=",算術(shù)操作符"+"、"%",邏輯操作符"&&"、"&",位操作符"<<"、""等,前后均加一個空格; 單目操作符,如"!"、""、"+"、"-"、"&"(
14、地址運(yùn)算符)等,前后不加空格; "->"、"."前后不加空格; if、for、while、switch等關(guān)鍵字與后面的括號間加一個空格; 8.5 花括號 l if、else if、else、for、while語句無論其執(zhí)行體是一條語句還是多條語句都必須加花括號,且左右花括號各獨(dú)占一行。 l dowhile()結(jié)構(gòu)中,"do"和""均各占一行,""和"while();"共同占用一行。 if ( ) do while( ); else 8.6 switch語句 l 每個ca
15、se和其判據(jù)條件獨(dú)占一行。 l 每個case程序塊需用break結(jié)束。特殊情況下需要從一個case塊順序執(zhí)行到下一個case塊的時候除外,但需要在交界處明確注釋如此操作的原因,以防止出錯。 l case程序塊之間空一行,且只空一行。 l 每個case程序塊的執(zhí)行語句保持4個空格的縮進(jìn)。 l 一般情況下都應(yīng)該包含default分支。 Switch ( ) case x: break; case x: break; default: break; 9 單片機(jī)C51編程規(guī)范程序結(jié)構(gòu) 9.1 基本要求 l 有main()函數(shù)的.c文件應(yīng)將main()放在最前面,并明確用void聲明參數(shù)和返回值。 l 對由多個.c文件組成的模塊程序或完整監(jiān)控程序,建立公共引用頭文件,將需要引用的庫頭文件、標(biāo)準(zhǔn)寄存器定義頭文件、自定義的頭文件、全局變量等均包含在內(nèi),供每個文件引用。通常,標(biāo)準(zhǔn)函數(shù)庫頭文件采用尖角號< >標(biāo)志文件名,自定義頭文件采用雙撇號標(biāo)志文件名。 l 每個.c文件有一個對應(yīng)的.h文件,.c文件的注釋之后首先定義一個唯一的文件標(biāo)志宏,并在對應(yīng)的.h文件中解析該標(biāo)志。 在.c文件中: #define FILE_FLAG 在.h文件中: #ifdef FILE_FLAG #
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 西南交通大學(xué)希望學(xué)院《全科醫(yī)療中的醫(yī)患關(guān)系與溝通技巧》2023-2024學(xué)年第二學(xué)期期末試卷
- 蓬溪縣2025年數(shù)學(xué)四下期末監(jiān)測模擬試題含解析
- 天津濱海汽車工程職業(yè)學(xué)院《復(fù)變函數(shù)與常微分方程》2023-2024學(xué)年第一學(xué)期期末試卷
- 山東省東營市勝利第二中學(xué)2024-2025學(xué)年高三下學(xué)期第一次階段測試語文試題含解析
- 江蘇百校大聯(lián)考2025年高三下學(xué)期起點(diǎn)調(diào)研測試英語試題含解析
- 內(nèi)蒙古自治區(qū)鄂爾多斯市2024-2025學(xué)年初三下學(xué)期1月月考試題化學(xué)試題試卷含解析
- 山東省德州市武城縣2024-2025學(xué)年三年級數(shù)學(xué)第二學(xué)期期末檢測試題含解析
- 嵊州市2024-2025學(xué)年數(shù)學(xué)三下期末質(zhì)量跟蹤監(jiān)視試題含解析
- 遼寧省大連經(jīng)濟(jì)技術(shù)開發(fā)區(qū)得勝高級中學(xué)2025屆高三“零診”考試生物試題含解析
- 山東交通學(xué)院《現(xiàn)代食品微生物學(xué)1》2023-2024學(xué)年第二學(xué)期期末試卷
- 創(chuàng)傷性休克患者的護(hù)理
- 初中學(xué)業(yè)水平考試的“一核二融三層四維”命題理論探析
- 心理咨詢記錄表10篇
- 數(shù)字經(jīng)濟(jì)學(xué)試題答案
- 創(chuàng)傷急救知識課件
- 專題13 統(tǒng)計與概率-【好題匯編】五年(2020-2024)高考數(shù)學(xué)真題分類匯編(含答案解析)
- 國家開放大學(xué)本科(非英語專業(yè))學(xué)士學(xué)位英語統(tǒng)一考試樣題
- GB/T 44273-2024水力發(fā)電工程運(yùn)行管理規(guī)范
- DB65-T 4765-2024 農(nóng)牧區(qū)標(biāo)準(zhǔn)化羊場建設(shè)規(guī)范
- 城軌行車課程設(shè)計
- 2024年南京市中考?xì)v史試題及答案
評論
0/150
提交評論