久久精品99久久_亚洲一区二区综合_狠狠色伊人亚洲综合成人_亚洲综合爱爱久久网

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當前位置:首頁 >> 技術中心 >> 單片機入門 >> 單片機匯編程序編碼規范

單片機匯編程序編碼規范

關鍵字:單片機 編碼 匯編程序 作者:admin 來源:不詳 發布時間:2018-05-19  瀏覽:45

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

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

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

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

1.排版

規則1

程序塊使用縮進方式,函數和標號使用空格縮進,程序段混合使用TAB和空格縮進。縮進的目的是使程序結構清晰,便于閱讀和理解。

默認寬度應為8個空格,由于Word中為4個空格,為示范清晰,此處用2個代替(下同)。

例如:

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行;

擴展閱讀:手把手教您編寫第一個單片機程序

編輯:admin  最后修改時間:2018-05-19

聯系方式

0755-82591179

郵箱:ivy@yingtexin.net

地址:深圳市南山區桃源街道平山社區平山一路2號南山云谷創業園二期11棟410-411

Copyright © 2014-2026 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號-4

久久精品99久久_亚洲一区二区综合_狠狠色伊人亚洲综合成人_亚洲综合爱爱久久网
一女被多男玩喷潮视频| 婷婷中文字幕在线观看| 伊人久久在线观看| 中文国产在线观看| 久久婷婷中文字幕| 伊人影院综合在线| 免费精品99久久国产综合精品应用| 国产激情在线观看视频| 亚洲国产精品毛片av不卡在线| 国产精品亚洲αv天堂无码| 777777av| 五月婷婷狠狠操| 欧美特黄aaa| 黑人巨茎大战欧美白妇| 黄色a级片免费看| 男女激情无遮挡| 成人在线观看a| 日本高清久久久| 国产a级黄色大片| 大j8黑人w巨大888a片| 日日碰狠狠丁香久燥| 嫩草视频免费在线观看| 四虎4hu永久免费入口| 国产极品在线视频| 中文字幕 91| 成人黄色片免费| 国产精品亚洲αv天堂无码| 国产精品区在线| 久久人人爽人人爽人人av| 欧美激情国产精品日韩| 91视频福利网| 午夜精品久久久内射近拍高清| 女同激情久久av久久| 男人添女人荫蒂免费视频| 天天爽天天爽夜夜爽| 成人短视频在线看| 黄色高清无遮挡| 成年在线观看视频| 91传媒久久久| 免费在线观看污污视频| 欧美成人一区二区在线观看| 一级做a爱视频| 国产无套内射久久久国产| 五月天av影院| 91制片厂毛片| 日韩久久一级片| 国产内射老熟女aaaa| 成人午夜视频免费在线观看| 992tv快乐视频| jizz18女人| 国产免费999| 国产l精品国产亚洲区久久| 欧美大片免费播放| 日韩精品aaa| 粉色视频免费看| 美女黄色片视频| 国产成人精品无码播放| 日本丰满少妇xxxx| 欧美中日韩在线| 中文字幕色呦呦| 超碰10000| 国产专区在线视频| 91精品国产三级| 国产探花在线观看视频| 在线观看av免费观看| 亚洲黄色av片| 91看片破解版| 亚洲国产精品影视| 亚洲成人手机在线观看| 特级西西444www| 午夜久久久久久久久久久| 久久久国产精华液999999 | wwwwww欧美| 国产精品一色哟哟| 少妇高潮喷水在线观看| 色欲色香天天天综合网www| 日本中文字幕一级片| 97在线免费视频观看| 日韩人妻无码精品久久久不卡| 草草草视频在线观看| 精品丰满人妻无套内射| 午夜免费福利小电影| 自拍日韩亚洲一区在线| 情侣黄网站免费看| 污视频免费在线观看网站| 911福利视频| 免费人成在线观看视频播放| 免费拍拍拍网站| 男人天堂999| 色乱码一区二区三区在线| 亚洲精品成人在线播放| 中国女人做爰视频| 69堂免费视频| 日本国产一级片| 国产免费内射又粗又爽密桃视频| 天天夜碰日日摸日日澡性色av| 国产成人久久777777| 一本一道久久a久久综合蜜桃| 粉嫩av一区二区三区天美传媒| 欧美精品久久久久久久免费| 三上悠亚在线一区二区| 国产91视频一区| 亚洲久久中文字幕| 九色自拍视频在线观看| 九九热免费在线观看| 成人性生活视频免费看| 亚洲视频第二页| 久艹在线免费观看| 三年中文在线观看免费大全中国| 国产情侣第一页| 欧美丝袜在线观看| 国产视频一区二区视频| 丁香色欲久久久久久综合网| 黄大色黄女片18第一次| 国产精品333| 蜜桃视频一区二区在线观看| 最新中文字幕免费视频| 少妇人妻在线视频| 六月婷婷激情综合| 1314成人网| 老司机午夜av| 人妻精品无码一区二区三区 | 精品999在线| 欧美三级午夜理伦三级| 日本手机在线视频| japanese在线播放| 国产精品中文久久久久久| 男人女人黄一级| 男人揉女人奶房视频60分 | 日韩小视频在线播放| 女人床在线观看| 欧洲xxxxx| 天天操天天干天天玩| 国产5g成人5g天天爽| 国产欧美激情视频| 亚洲国产午夜精品| 亚洲免费视频播放| 日本天堂免费a| av在线播放亚洲| 精品少妇人妻av免费久久洗澡| 国产乱淫av片杨贵妃| 国产 欧美 日本| 日本网站免费在线观看| 国模无码视频一区二区三区| www黄色日本| 天堂av在线网站| 欧美aaa在线观看| 国产玉足脚交久久欧美| 凹凸国产熟女精品视频| 亚洲国产精品毛片av不卡在线| 粗暴91大变态调教| 波多野结衣在线免费观看| 蜜臀在线免费观看| 日韩精品一区二区三区久久| 欧美精品成人网| 亚洲第一精品区| 1024av视频| 亚洲精品国产一区二区三区| 视色,视色影院,视色影库,视色网 日韩精品福利片午夜免费观看 | 国产大尺度在线观看| 欧美一级爱爱视频| 久久精品网站视频| 黄色三级视频在线播放| 国产xxxx振车| 亚洲人辣妹窥探嘘嘘| 91xxx视频| 久久久国产欧美| 欧美少妇在线观看| 黄色动漫在线免费看| 国产乱码一区二区三区四区| 欧美a级免费视频| 色噜噜狠狠永久免费| 影音先锋男人的网站| 国产美女三级视频| 麻豆视频传媒入口| 美女少妇一区二区| 日日摸日日碰夜夜爽无码| 天天操,天天操| 国产男女无遮挡| 久久最新免费视频| 久热精品在线播放| 日本精品免费在线观看| 亚洲自拍偷拍一区二区三区| 久久婷婷国产91天堂综合精品| 日本一本中文字幕| 男人j进女人j| 午夜免费一级片| 亚洲欧美视频二区| 色片在线免费观看| 日韩欧美精品在线观看视频| 91精品国产毛片武则天| 992tv人人草| 亚洲日本黄色片| 自拍偷拍一区二区三区四区| 日日摸天天爽天天爽视频| 亚洲欧洲日产国码无码久久99| 黄页网站在线观看视频| 成人精品视频在线播放| 国产精品自拍合集| 人人妻人人做人人爽|