青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Welcome to ErranLi's Blog!

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  106 Posts :: 1 Stories :: 97 Comments :: 0 Trackbacks

常用鏈接

留言簿(12)

搜索

  •  

積分與排名

  • 積分 - 178126
  • 排名 - 152

最新評論

閱讀排行榜

單片機匯編程序編碼規范

http://www.blogcn.com/u2/94/42/cbz6000/blog/43716860.html


引言
????
軟件設計更多地是一種工程,而不是一種個人藝術。如果不統一編程規范,最終寫出的程序,其可讀性將較差,這不僅給代碼的理解帶來障礙,增加維護階段的工作量,同時不規范的代碼隱含錯誤的可能性也比較大。

分析表明,編碼階段產生的錯誤當中,語法錯誤大概占 20% 左右,而由于未嚴格檢查軟件邏輯導致的錯誤、函數(模塊)之間接口錯誤及由于代碼可理解度低導致優化維護階段對代碼的錯誤修改引起的錯誤則占了一半以上。

可見,提高軟件質量必須降低編碼階段的錯誤率。如何有效降低編碼階段的錯誤呢?這需要制定詳細的軟件編程規范,并培訓每一位程序員,最終的結果可以把編碼階段的錯誤降至 10% 左右,同時也降低了程序的測試費用,效果相當顯著。

本文從代碼的可維護性(可讀性、可理解性、可修改性)、代碼邏輯與效率、函數(模塊)接口、可測試性四個方面闡述了軟件編程規范,規范分成規則和建議兩種,其中規則部分為強制執行項目,而建議部分則不作強制,可根據習慣取舍。

1
.排版
規則 1
程序塊使用縮進方式,函數和標號使用空格縮進,程序段混合使用 TAB 和空格縮進。縮進的目的是使程序結構清晰,便于閱讀和理解。
<TAB>
默認寬度應為 8 個空格,由于 Word <TAB> 4 個空格,為示范清晰,此處用 2 <TAB> 代替 ( 下同 )
例如:
????????MOV????????R1,?#00H
????????MOV????????R2,?#00H
????????MOV????????PMR,?#PMRNORMAL
????????MOV????????DPS,?#FLAGDPTR
????????MOV????????DPTR,?#ADDREEPROM
read1kloop:
??read1kpage:
????????INC????????R1
????????MOVX????A,?@DPTR
????????MOV????????SBUF,?A
?????????JNB????TI,?

?????????CLR????TI?
????????INC????????DPTR
????????CJNE????R1,?#20H,?read1kpage
????????INC????????R2
????????MOV????????R1,?#00H
?????????CPL????WDI
????????CJNE????R2,?#20H,?read1kloop????????;END?OF?EEPROM

規則 2?
在指令的操作數之間的,使用空格進行間隔,采用這種松散方式編寫代碼的目的是使代碼更加清晰。
例如:
????????CJNE????R2,?#20H,?read1kloop????????;END?OF?EEPROM

規則 3?
一行最多寫一條語句。

規則 4?
變量定義時,保持對齊。便于閱讀和檢查內存的使用情況。
例如:
RegLEDLOSS????????EQU????????30H????????;?VARIABLE????????;?TESTLED==RegLEDLOSS.0
RegLEDRA????????EQU????????31H????????;?VARIABLE
RUNLED_Flag????????EQU????????32H????????;?VARIABLE?????????;?256ms
改變一次 RUNLED 狀態
RUNLED_Def????????EQU????????10H????????;?STATIC????????;?16*32ms=500ms
改變一次 LED 狀態


2
.注釋
注釋的原則是有助于對程序的閱讀理解,注釋不宜太多也不能太少,太少不利于代碼理解,太多則會對閱讀產生干擾,因此只在必要的地方才加注釋,而且注釋要準確、易懂、盡可能簡潔。注釋量一般控制在 30% 50% 之間。

規則 1
程序在必要的地方必須有注釋,注釋要準確、易懂、簡潔。
例如如下注釋意義不大:
????????MOV????????DXCE1COUNTER,?#00H????????;?
DXCE1COUNTER 賦值為 0
而如下的注釋則給出了額外有用的信息:
????????JNZ????????PcComm_Err????????????????;?
假如校驗出錯

規則 2?
注釋應與其描述的代碼相近,對代碼的注釋應放在其上方或右方(對單條語句的注釋)相鄰位置,不可放在下面,如放于上方則需與其上面的代碼用空行隔開。

規則 3
頭文件、源文件的頭部,應進行注釋。注釋必須列出:文件名、作者、目的、功能、修改日志等。

規則 4
函數頭部應進行注釋,列出:函數的目的、功能、輸入參數、輸出參數、涉及到的通用變量和寄存器、調用的其他函數和模塊、修改日志等。對一些復雜的函數,在注釋中最好提供典型用法。

規則 5
對重要代碼段的功能、意圖進行注釋,提供有用的、額外的信息。并在該代碼段的結束處加一行注釋表示該段代碼結束。

規則 6
對于所有的常量,變量,數據結構聲明 ( 包括數組、結構、類、枚舉等 ) ,如果其命名不是充分自注釋的,在聲明時都必須加以注釋,說明其含義。

規則 ?7
維護代碼時,要更新相應的注釋,刪除不再有用的注釋。保持代碼、注釋的一致性,避免產生誤解。


3
.命名
規則 ?1
標識符縮寫
形成縮寫的幾種技術:
1)????
去掉所有的不在詞頭的元音字母。如 screen 寫成 scrn,?primtive 寫成 prmv
2)????
使用每個單詞的頭一個或幾個字母。如 Channel?Activation 寫成 ChanActiv Release?Indication 寫成 RelInd
3)????
使用變量名中每個有典型意義的單詞。如 Count?of?Failure 寫成 FailCnt
4)????
去掉無用的單詞后綴 ?ing,?ed 等。如 Paging?Request 寫成 PagReq
5)????
使用標準的或慣用的縮寫形式(包括協議文件中出現的縮寫形式)。如 BSIC(Base?Station?Identification?Code) MAP(Mobile?Application?Part)
關于縮寫的準則:
1)????
縮寫應該保持一致性。如 Channel 不要有時縮寫成 Chan ,有時縮寫成 Ch Length 有時縮寫成 Len ,有時縮寫成 len
2)????
在源代碼頭部加入注解來說明協議相關的、非通用縮寫。
3)????
標識符的長度不超過 12 個字符。

規則 2
變量命名約定: < 前綴 >?+? 主體 ????????;? 注釋
變量命名要考慮簡單、直觀、不易混淆。
前綴是可選項,表示變量類型,由于匯編中變量多是單字節變量,所以單字節變量可以不加前綴,對于 bit 和雙字節型變量,使用小寫的 b d 作為前綴表示。
主體是必選項,可多個單詞 ( 或縮寫 ) 合在一起,每個單詞首字母大寫,其余部分小寫。

規則 3
常量的命名
常量的命名規則:單詞的字母全部大寫,各單詞之間用下劃線隔開。

規則 4
函數的命名
單詞首字母為大寫,其余均為小寫。函數名應以一個動詞開頭,即函數名應類似一個動詞斷語或祈使句。
例如: Test_Protect ?Check_EEPROM ?Init_Para


4
.可維護性
規則 1
函數和過程中關系較為緊密的代碼盡可能相鄰。

規則 2
每個函數的源程序行數原則上應該少于 200 行。
對于消息分流處理函數,完成的功能統一,但由于消息的種類多,可能超過 200 行的限制,不屬于違反規定。

規則 3
語句嵌套層次不得超過 5 層。
嵌套層次太多,增加了代碼的復雜度及測試的難度,容易出錯,增加代碼維護的難度。

規則 4
避免相同的代碼段在多個地方出現。
當某段代碼需在不同的地方重復使用時,應根據代碼段的規模大小使用函數調用或宏調用的方式代替。這樣,對該代碼段的修改就可在一處完成,增強代碼的可維護性。

規則 5
每個函數完成單一的功能,不設計多用途面面俱到的函數。
多功能集于一身的函數,很可能使函數的理解、測試、維護等變得困難。使函數功能明確化,增加程序可讀性,亦可方便維護、測試。

規則 6
在函數的項目維護文檔中,應該指出軟件適用的硬件平臺及版本。


建議 1
使用專門的初始化函數對所有的公共變量進行初始化。


5
.程序正確性、效率
規則 1
嚴禁使用未經初始化的變量。
引用未經初始化的變量可能會產生不可預知的后果,特別是引用未經初始化的指針經常會導致系統崩潰,需特別注意。

規則 2
防止內存操作越界。
說明:內存操作越界是軟件系統主要錯誤之一,后果往往非常嚴重。

規則 3
注意變量的有效取值范圍,防止表達式出現上溢或下溢。

規則 4
防止易混淆的指令和操作數拼寫錯誤。

規則 5
避免函數中不必要語句,防止程序中的垃圾代碼,預留代碼應以注釋的方式出現。
程序中的垃圾代碼不僅占用額外的空間,而且還常常影響程序的功能與性能,很可能給程序的測試、維護等造成不必要的麻煩。

規則 6
通過對系統數據結構的劃分與組織的改進,以及對程序算法的優化來提高空間效率。
這種方式是解決軟件空間效率的根本辦法。

規則 7
循環體內工作量最小化。
應仔細考慮循環體內的語句是否可以放在循環體之外,使循環體內工作量最小,從而提高程序的時間效率。

規則 8
在多重循環中,應將最忙的循環放在最內層。

規則 9
避免循環體內含判斷語句,將與循環變量無關的判斷語句移到循環體外。
目的是減少判斷次數。循環體中的判斷語句是否可以移到循環體外,要視程序的具體情況而言,一般情況,與循環變量無關的判斷語句可以移到循環體外,而有關的則不可以。

規則 10
中斷和恢復
中斷程序應該盡量短,應該在中斷中進行標記,在主程序中處理。但實時性很高的程序段例外。
中斷時應該保存所有涉及到的通用變量和寄存器,如 A,?PSW,?DPTR 等。

規則 11?
堆棧設置
堆棧對于程序非常重要,對于堆棧的設置要合理。堆棧太小,在嵌套調用和很容易溢出,造成系統故障;堆棧太大,浪費 RAM 資源。
為了節約堆棧資源,中斷時要求不要保存太多資源,中斷嵌套和程序嵌套層數不要太多,盡量不要超過 5 層。這就要求合理的劃分功能模塊。

規則 12
看門狗
看門狗電路用于在單片機死機時自動復位。單片機需要定時向看門狗發送脈沖,俗稱”喂狗”。喂狗不可太勤,這樣看門狗沒有起到作用;也不可太慢,這樣容易造成單片機復位。正確的喂狗應該在主循環中進行,最好是建立一個獨立的系統監控進程。不可以在定時中斷中喂狗,應為單片機有時可能會在主循環中死掉。


6
.接口
規則 1
去掉沒有必要的公共變量,編程時應盡量少用公共變量。
公共變量是增大模塊間耦合的原因之一,故應減少沒必要的公共變量以降低模塊間的耦合度。應該構造僅有一個模塊或函數可以修改、創建,而其余有關模塊或函數只訪問的公共變量,防止多個不同模塊或函數都可以修改、創建同一公共變量的現象。

規則 2
當向公共變量傳遞數據時,要防止越界現象發生。
對公共變量賦值時,若有必要應進行合法性檢查,以提高代碼的可靠性、穩定性。

規則 3
盡量不設計多參數函數,將不使用的參數從接口中去掉,降低接口復雜度,減少函數間接口的復雜度。

規則 4
對所調用函數的返回碼要仔細、全面地處理。
防止把錯誤傳遞到后面的處理流程。如有意不檢查其返回碼,應明確指明。

規則 5
檢查接口函數所有輸入參數的有效性。

規則 6
檢查函數的所有非參數輸入,如外部數據、公共變量等。


7
.代碼可測性
規則 1
模塊編寫應該有完善的測試方面的考慮。

規則 2
源代碼中應該設計了代碼測試的內容。
在編寫代碼之前,應預先設計好程序調試與測試的方法和手段,并設計好各種調測開關及相應測試代碼。
程序的調試與測試是軟件生存周期中很重要的一個階段,如何對軟件進行較全面、高率的測試并盡可能地找出軟件中的錯誤就成為很關鍵的問題。因此在編寫源代碼之前,除了要有一套比較完善的測試計劃外,還應設計出一系列代碼測試手段,為單元測試、集成測試及系統聯調提供方便。

規則 3
在同一項目組或產品組內,要有一套統一的為集成測試與系統聯調準備的調測開關及相應函數,并且要有詳細的說明。本規則是針對項目組或產品組的。

規則 4
在同一項目組或產品組內,調測打印出的信息串的格式要有統一的形式。信息串中至少要有所在模塊名(或源文件名)及行號。
統一的調測信息格式便于集成測試。

規則 5
正式軟件產品中應把調測代碼去掉(即把有關的調測開關關掉)。

規則 6
用調測開關來切換軟件的 DEBUG 版和正式版,而不要同時存在正式版本和 DEBUG 版本的不同源文件,以減少維護的難度。

規則 7
在軟件系統中設置與取消有關測試手段,不能對軟件實現的功能等產生影響。
即有測試代碼的軟件和關掉測試代碼的軟件,在功能行為上應一致。

規則 8
發現錯誤應該立即修改,并且若有必要記錄下來。

規則 9
開發人員應堅持對代碼進行徹底的測試(單元測試),而不依靠他人或測試組來發現問題。

規則 10
清理、整理或優化后的代碼要經過審查及測試。

規則 11
代碼版本升級要經過嚴格測試。


8
.代碼編譯
規則 1
打開編譯器的所有告警開關對程序進行編譯。
防止隱藏可能是錯誤的告警。

規則 2
某些語句經編譯后產生告警,但如果你認為它是正確的,那么應通過某種手段去掉告警信息。


ps
:從網上收集了一些相關內容,結合我自己的經驗,歡迎拍磚,謝絕辱罵;
ps2
:有些可能不常用,因為大家寫不到那么長的代碼,就我自己寫的最長的匯編代碼也不超過 10K 行; ?

?

posted on 2007-10-14 00:43 erran 閱讀(733) 評論(0)  編輯 收藏 引用 所屬分類: DSP & SCM
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美不卡一卡二卡免费版| 欧美高清在线观看| 免费观看不卡av| 欧美亚州一区二区三区| 亚洲高清在线观看| 久久久亚洲人| 亚洲一区二区视频在线| 欧美日韩国产成人在线免费| 亚洲国产成人一区| 欧美成人xxx| 久久成人精品一区二区三区| 国产精品在线看| 亚洲午夜影视影院在线观看| 一本久道综合久久精品| 一本久久综合亚洲鲁鲁| 欧美国产精品一区| 一本色道88久久加勒比精品| 久久av一区二区三区亚洲| 欧美1区2区| 亚洲视频一区二区在线观看| 久久国产精彩视频| 亚洲精品免费看| 亚洲精品自在久久| 欧美日韩1234| 亚洲视频久久| 午夜国产精品视频免费体验区| 国产精品网曝门| 久久亚洲一区二区三区四区| 欧美一区二区视频在线| 亚洲高清自拍| 日韩视频中午一区| 国产精品乱码一区二区三区| 久久福利资源站| 可以免费看不卡的av网站| 99re热这里只有精品视频| 在线亚洲自拍| 国外成人在线| 91久久精品国产91性色| 欧美日本精品在线| 亚洲欧美怡红院| 久久影音先锋| 一区二区三区高清在线| 性伦欧美刺激片在线观看| 亚洲第一二三四五区| 欧美 日韩 国产 一区| 亚洲网站视频| 欧美三级乱人伦电影| 亚洲一区在线播放| 久久国产成人| 日韩一二三在线视频播| 在线视频亚洲欧美| 极品av少妇一区二区| 亚洲国产另类久久久精品极度| 亚洲少妇中出一区| 亚洲欧美日韩综合| 国产精品成人一区二区艾草| 一区二区三区高清视频在线观看| 亚洲激情视频网| 欧美成人xxx| 日韩视频中文| 妖精成人www高清在线观看| 欧美国产日韩一区二区在线观看 | 午夜久久久久久| 亚洲免费观看高清在线观看 | 国产亚洲视频在线| 午夜一区不卡| 亚洲欧美日韩精品久久久久| 国产日韩欧美二区| 久久久免费精品| 久久亚洲精品一区| 亚洲欧洲综合另类| 亚洲黑丝在线| 欧美午夜女人视频在线| 欧美一区二区三区视频在线| 欧美一区二区免费视频| 在线观看亚洲精品视频| 亚洲欧洲日产国产综合网| 欧美性感一类影片在线播放| 精品粉嫩aⅴ一区二区三区四区| 99国产精品久久久久久久久久 | 亚洲欧美激情诱惑| 欧美日韩国产精品一区| 亚洲国产精品一区二区久 | 亚洲免费观看| 9色精品在线| 免费成人av在线| 女人香蕉久久**毛片精品| 激情av一区| 久久成人综合视频| 久久精品中文| 国产综合婷婷| 久久国产视频网| 美女精品网站| 激情久久影院| 亚洲精品一区久久久久久| 亚洲最新合集| 中日韩高清电影网| 欧美四级在线| 亚洲午夜激情| 欧美中文字幕视频在线观看| 国产日韩欧美自拍| 久久国产精品99国产| 老鸭窝91久久精品色噜噜导演| 国内精品久久久久久久影视蜜臀| 久久成人18免费观看| 欧美xxxx在线观看| 日韩天天综合| 欧美日韩直播| 亚洲一区二区三区成人在线视频精品 | 黑人极品videos精品欧美裸| 久久九九精品| 亚洲第一在线综合网站| 日韩视频在线你懂得| 国产精品黄页免费高清在线观看| 亚洲免费在线电影| 免费亚洲一区二区| 亚洲美女网站| 国产日韩精品电影| 久久综合中文| 一本久久综合亚洲鲁鲁| 久久久久青草大香线综合精品| 亚洲精品亚洲人成人网| 国产精品久久久久久久久免费樱桃 | 日韩午夜剧场| 久久福利视频导航| 亚洲精品国产精品久久清纯直播 | 久久九九全国免费精品观看| 亚洲国产美女精品久久久久∴| 亚洲综合欧美日韩| 在线成人av网站| 欧美日韩系列| 久久久久久久久综合| 99精品国产一区二区青青牛奶| 久久精品国产综合精品| 日韩天堂在线视频| 国产综合激情| 欧美日韩一区三区| 久久久久在线| 亚洲一区二区伦理| 91久久久在线| 久久午夜视频| 亚洲欧美日韩在线播放| 亚洲第一在线综合在线| 国产欧美91| 欧美日韩不卡| 久久久夜色精品亚洲| 亚洲一区二区视频在线| 亚洲精品久久久久久久久| 另类欧美日韩国产在线| 午夜影视日本亚洲欧洲精品| 99视频在线精品国自产拍免费观看| 国模叶桐国产精品一区| 欧美视频在线观看| 欧美激情精品久久久久久大尺度| 久久国产婷婷国产香蕉| 亚洲一区二区三| 日韩视频在线观看免费| 亚洲国产精选| 欧美成人激情视频| 国产一区二区三区久久| 亚洲欧美日本国产有色| 亚洲精品国产精品国自产在线 | 久久国产精品久久国产精品| 亚洲精品一区二区三区福利| 欧美极品影院| 美女精品国产| 在线观看一区二区精品视频| 国产精品综合不卡av| 欧美性大战久久久久久久蜜臀| 欧美成人黑人xx视频免费观看| 欧美一区二区日韩| 亚洲欧美影音先锋| 亚洲一区二区三区777| 一区二区三区黄色| 日韩一级片网址| 亚洲精品日韩一| 亚洲久色影视| 一个人看的www久久| 99精品国产福利在线观看免费| 亚洲精一区二区三区| 亚洲精品女人| 亚洲高清在线观看一区| 欧美国产免费| 亚洲国产成人91精品| 亚洲国产一区二区三区青草影视| 亚洲第一免费播放区| 欧美激情免费在线| 亚洲国产婷婷香蕉久久久久久| 亚洲国产日韩欧美在线图片| 最新高清无码专区| 日韩视频―中文字幕| 亚洲一区影院| 久久精品国产精品亚洲| 久久三级福利| 欧美精品日韩一本| 国产精品久久婷婷六月丁香| 国产伦精品一区二区三区免费 | 国产精品女人久久久久久| 国产嫩草影院久久久久| 在线成人激情视频|