嵌入式語(yǔ)言工程簡(jiǎn)明v1_第1頁(yè)
嵌入式語(yǔ)言工程簡(jiǎn)明v1_第2頁(yè)
嵌入式語(yǔ)言工程簡(jiǎn)明v1_第3頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余5頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1、C 語(yǔ)言工程簡(jiǎn)明規(guī)范1. 使用編程規(guī)范的目的編程規(guī)范約定應(yīng)建立于一項(xiàng)工程之初,且該約定應(yīng)貫穿整個(gè)工程之始終。采用一些規(guī)約有助于提高勞動(dòng)生產(chǎn)率,并使工程便于。用 C 語(yǔ)言或其他語(yǔ)言編寫程序的方式有很多種,慣用的,好的書寫風(fēng)格以及他人用的一些好的方法,無(wú)非是想力圖達(dá)到以下的目的:可移植性好;兼容性好;干凈整齊;易性好;易看懂;簡(jiǎn)明扼要;無(wú)論采用哪種編程風(fēng)格,必須在整個(gè)工程中采用始終如一的格式。2. 工程組織說(shuō)明范例工程結(jié)構(gòu)如下圖:上圖結(jié)構(gòu)詳細(xì)說(shuō)明:Component_C, Component_H 兩個(gè)文件夾用于放置MCU 各模塊代碼和頭文件。Project Settings 為工程文件夾,其下的文

2、件都由 CodeWarrior 自動(dòng)生成,不建議修改,除非特別需要。Libs 文件夾,主要用于引入庫(kù)文件。Frame_C, Frame_H 兩個(gè)文件夾用于放置通用代碼文件。比如 type.h 用于類型定義。GeneralFun.c 用于放置一些常用函數(shù)等。Isr.h ,isr.c 文件用于處理中斷程序。而main.c 為主函數(shù)。Include.h為總的頭文件。最后一個(gè)為工程說(shuō)明文件。建議在做工程的時(shí)候充分利用好這樣的一個(gè)文件,進(jìn)行工程開發(fā)過(guò)程的以及版本升級(jí)的。關(guān)于構(gòu)件模塊代碼的詳細(xì)說(shuō)明在范例代碼中,每個(gè)構(gòu)件都由一個(gè).c 程序和.h 的頭文件。3.頭文件包含所有的該構(gòu)件對(duì)外開放的函數(shù)接口的及其調(diào)

3、用說(shuō)明。用戶只需要查看該頭文件就能知道如何調(diào)用該模塊,那么這個(gè)構(gòu)件就是成功的,用戶不需要看具體的函數(shù)實(shí)現(xiàn)過(guò)程。同時(shí),頭文件中還可以放置一些與寄存器有關(guān)的一些宏定義,這樣在主程序中就可以通過(guò)宏進(jìn)行對(duì)構(gòu)件的地址?;蛘卟僮?,而不需要用戶一些繁瑣的.c 文件主要是完成對(duì)頭文件中。的函數(shù)的實(shí)現(xiàn)。以及一些調(diào)用函數(shù)的下面給出部分范例代碼,加深用戶理解:.h 頭文件結(jié)構(gòu)如下/* 頭部說(shuō)明,實(shí)現(xiàn)功能,構(gòu)件的一些情況說(shuō)明 */-*/ 文件名: GPIO.h/ 說(shuō) 明: GPIO 構(gòu)件頭文件,包含了GeneralFun.h 文件*/-*#ifndef GPIO_H#define GPIO_H/防止重復(fù)定義/1 頭文

4、件#include MC9S08AW60.h #include Type.h/MC9S08AW60 MCU 映像寄存器名定義/類型別名定義/* 與寄存器有關(guān)的部分宏定義 */2.1 AW60 端口 #define PORT_A #define PORT_B #define PORT_C #define PORT_D #define PORT_E #define PORT_F#define PORT_G名與偏移地址的對(duì)應(yīng)關(guān)系 024681012 /部分代碼已經(jīng)省略/* 函數(shù)接口及其調(diào)用說(shuō)明 */-*/函數(shù)名: GPIO_Init*/功/參/返/說(shuō)能: 初始化GPIO數(shù): port:端口名pin:

5、指定端口引腳direction:引腳方向,0=輸入,1=輸出s回: 無(wú)明: 無(wú)e:初始狀態(tài),0=低電平,1=高電平/-*void GPIO_Init(u8 port,u8 pin,u8 direction,u8 se); /部分代碼已經(jīng)省略#endif.c 文件結(jié)構(gòu)如下/* 頭部說(shuō)明,實(shí)現(xiàn)功能,構(gòu)件的一些情況說(shuō)明 */-*/ 文件名: GPIO.c/ 說(shuō) 明: GPIO 驅(qū)動(dòng)程序文件*/-*#include GPIO.h/包含GPIO 頭文件/*調(diào)用函數(shù)*/ /省略,自己根據(jù)需要擴(kuò)充/* 外部調(diào)用函數(shù)(即頭文件中過(guò)的函數(shù))具體實(shí)現(xiàn) */-*/函數(shù)名: GPIO_Init/功 能: 初始化GPI

6、O*/參/返/說(shuō)數(shù): port:端口名 pin:指定端口引腳direction:引腳方向,0=輸入,1=輸出*s回: 無(wú)明: 無(wú)e:初始狀態(tài),0=低電平,1=高電平/-*void GPIO_Init(u8 port,u8 pin,u8 direction,u8 se)/1.設(shè)置引腳方向 if(direction = 1)BSET(PIO_DDR(port);/定義引腳為輸出(相應(yīng)位為 1)elseBCLR(PIO_DDR(port);/定義引腳為輸入(相應(yīng)位為 0)/2.設(shè)置引腳狀態(tài)if(se = 1)BSET(PIO_PORT(port);/輸出高電平(1)elseBCLR(PIO_PORT

7、(port);/輸出低電平(0) /部分代碼省略/*調(diào)用函數(shù)實(shí)現(xiàn) */ /省略4. C 語(yǔ)言編程規(guī)范4.1概述為了提高源程序的質(zhì)量和可性,從而最終提高產(chǎn)品生產(chǎn)力,特編寫此規(guī)范。本標(biāo)準(zhǔn)規(guī)定了程序設(shè)計(jì)進(jìn)行程序設(shè)計(jì)時(shí)必須遵循的規(guī)范主要針對(duì)單片機(jī)編程語(yǔ)言和 08 編譯器而言,包括排版、注釋、命名、變量使用、代碼可測(cè)性、程序效率、質(zhì)量保證等內(nèi)容。建議在一個(gè)工程或者一個(gè)項(xiàng)目中盡量遵循相同的代碼規(guī)范,而不是說(shuō)你只能擁有一個(gè)代碼規(guī)范。4.2命名規(guī)則1)命名基本原則命名清晰明了,有明確含義,使用完整單詞或約定俗成的縮寫。通常,較短的單詞可通過(guò)去掉元音字母形成縮寫;較長(zhǎng)的單詞可取單詞的頭幾個(gè)字母形成縮寫。即見(jiàn)名知

8、意。命名風(fēng)格要自始至終保持一致。命名中若使用特殊約定或縮寫,要有注釋說(shuō)明。為了代碼復(fù)用,命名中應(yīng)避免適用與具體項(xiàng)目相關(guān)的前綴。應(yīng)使用英語(yǔ)命名。2)預(yù)定義(#define)只使用大寫字母,下劃線和數(shù)字。例如: #defineMAX_LENGTH1宏和常量命名只使用大寫字母,下劃線和數(shù)字。宏和常量用全部大寫字母來(lái)命名,詞與詞之間用下劃線分隔。對(duì)程序中用到的數(shù)字均應(yīng)用有意義的枚舉或宏來(lái)代替。變量命名變量命名規(guī)則: _類型名稱。例如:/全局變量g_nMaxCount;/函數(shù)體內(nèi)局部變量MyEnumTypeeParsingMode;局部循環(huán)體控制變量?jī)?yōu)先使用 i、j、k 等;局部長(zhǎng)度變量?jī)?yōu)先使用 len

9、、num 等;臨時(shí)中間變量?jī)?yōu)先使用 temp、tmp 等。類型前綴指針( Poer)p枚舉( Enumeration)e布爾()b浮點(diǎn)( Float)f雙精度( Double)d字符( Char)c結(jié)構(gòu)( Structure)st其他數(shù)字類型, e.g.byte, (unsigned), (unsigned)long, (unsigned)short, (unsigned) short,(unsigned) long longn范圍前最結(jié)構(gòu)體的成員變量m_靜態(tài)變量s_全局變量g_局部變量無(wú)前綴結(jié)構(gòu)和類型定義(typedef)按 Camel-Style 方式命名,如ThisIsAnEx枚舉leS

10、tructOrEnumOrTyedef 。避免使用下劃線。按 CamelStyle 方式命名,如 ThisIsAnExleStructOrEnumOrTyedef 。避免使用下劃線。Enum DataSetSeValidModified = 1,InvalidModified = 2,AllDataLoaded = 3函數(shù)命名按 CamelStyle 方式命名, ThisIsAnEx文件命名leMethod。一個(gè)文件包含一類功能或一個(gè)模塊的所有函數(shù),文件名稱應(yīng)清楚表明其功能或性質(zhì)。每個(gè).c 文件應(yīng)該有一個(gè)同名的.h 文件作為頭文件。4.3注釋注釋基本原則有助于對(duì)程序的閱讀理解,說(shuō)明程序在做什么

11、,解釋代碼的目的、功能和采用的方法。一般情況源程序有效注釋量在 30左右。 注釋語(yǔ)言必須準(zhǔn)確、易懂、簡(jiǎn)潔。邊寫代碼邊注釋,修改代碼同時(shí)修改相應(yīng)的注釋,不再有用的注釋要?jiǎng)h除。 匯編和 C 中都用/,取消;不使用段注釋 /* */ (調(diào)試時(shí)可用)。文件注釋文件注釋必須說(shuō)明文件名、項(xiàng)目名稱、函數(shù)功能、創(chuàng)建人、創(chuàng)建日期、版本信息等相關(guān)信息。修改文件代碼時(shí),應(yīng)在文件注釋中修改日期、修改,并簡(jiǎn)明此次修改的目的。所有修改必須保持完整。 文件注在文件頂端,用/*/格式包含。 注釋文本每行縮進(jìn) 4 個(gè)空格;每個(gè)注釋文本分項(xiàng)名稱應(yīng)對(duì)齊。/*文件名稱:項(xiàng)目名稱:作版說(shuō)者:本:明:修改:*/3)函數(shù)注釋函數(shù)頭部注釋應(yīng)

12、包括函數(shù)名稱、函數(shù)功能、參數(shù)、出口參數(shù)等內(nèi)容。必要還可增加作者、創(chuàng)建日期、修改(備注)等相關(guān)項(xiàng)目。 函數(shù)頭部注在每個(gè)函數(shù)的頂端,用/*/的格式包含。其中函數(shù)名稱應(yīng)簡(jiǎn)寫為 FunctionName(),不加入、出口參數(shù)等信息。/*函數(shù)名稱:函數(shù)功能:參數(shù):出口參數(shù):備 注:*/4)代碼注釋代碼注釋應(yīng)與被注釋的代碼緊鄰,放在其上方或右方,不可放在下面。如放于上方則需與其上面的代碼用空行隔開。一般少量注釋應(yīng)該添加在被注釋語(yǔ)句的行尾,一個(gè)函數(shù)內(nèi)的多個(gè)注釋左對(duì)齊;較多注釋則應(yīng)加在上方且注釋行與被注釋的語(yǔ)句左對(duì)齊。通常,分支語(yǔ)句(條件分支、循環(huán)語(yǔ)句等)必須編寫注釋。其程序塊結(jié)束行的右方應(yīng)加表明該程序塊結(jié)束

13、的標(biāo)記end of , 尤其在多重嵌套時(shí)。例如:/注釋 。nNum = 7;/ 注釋。for(i = 0 ; I nNum; i+)If( i = = 0)/ codeelse/code /end of if(i = 0) / end of for (i)5)變量、常量、宏的注釋同一類型的標(biāo)識(shí)符應(yīng)集中定義,并在定義之前一行對(duì)其共性加以注釋。對(duì)單個(gè)標(biāo)識(shí)符的注釋加在定義語(yǔ)句的行尾。 全局變量一定要有詳細(xì)的注釋,包括其功能、取值范圍、哪些函數(shù)或過(guò)程存取它以及存取時(shí)的注意事項(xiàng)等。 注釋用/的格式。4.4類型別名定義/8 位無(wú)符號(hào)數(shù)/ 16 位無(wú)符號(hào)數(shù)/ 32 位無(wú)符號(hào)數(shù)/8 位有符號(hào)數(shù)/ 16 位有符

14、號(hào)數(shù)/ 32 位有符號(hào)數(shù)typedef unsigned chartypedef unsigned short typedef unsigned long typedef chartypedef short typedef/不優(yōu)化變量類型uu u8;16;32;8;16;32;/8 位無(wú)符號(hào)數(shù)/ 16 位無(wú)符號(hào)數(shù)/ 32 位無(wú)符號(hào)數(shù)/8 位有符號(hào)數(shù)/ 16 位有符號(hào)數(shù)/ 32 位有符號(hào)數(shù)typedef volatile utypedef volatile u typedef volatile u typedef volatile typedef volatile typedef volatil

15、e81632vuvu vu v v v8;16;32;8;16;32;816324.5編碼代碼的每一級(jí)均往右縮進(jìn) 4 個(gè)空格的位置不使用 Tab 鍵,建議使用空格代替 tab 鍵,這樣代碼打印不回造成錯(cuò)亂。相對(duì)獨(dú)立的程序塊之間要加空行括號(hào)內(nèi)側(cè)(即左括號(hào)后面和右括號(hào)前面)不加空格,多重括號(hào)間不加空格。如:SetName(GetFunc()函數(shù)形參之間應(yīng)該有且只有一個(gè)空格(形參逗號(hào)后面加空格),如:CallFunction(para1, para2, para3),而CallFunction(para1,para2,para3) 不符合要求。操作符前后均加一個(gè)空格,如: nSum = nNunm1 + nNum2 。而 nSum=nNunm1

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論