日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【连载】【FPGA黑金开发板】NIOS II那些事儿--编程风格(三)

發(fā)布時間:2025/5/22 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【连载】【FPGA黑金开发板】NIOS II那些事儿--编程风格(三) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

聲明:本文為XiaomaGee編寫,版權由XiaomaCee和本博文作者所有,如需轉(zhuǎn)載請標明出處http://www.cnblogs.com/kingst

一、 規(guī)范參照標準

良好的代碼風格及編程規(guī)范,是書寫優(yōu)良代碼的基礎,也是工程師必備的技能。本規(guī)范遵循C語言的創(chuàng)始人B.W.Kernighan和D.M.Ritchit (簡稱 K & R)所著的《The C Programming Language》一書的示例,并參照 Linux 內(nèi)核代碼風格。

本規(guī)范適用于有一定c語言基礎的讀者,對于需要入門的,建議熟讀幾遍《The C Programming Language》。另外本規(guī)范部分內(nèi)容僅適用于基于單片機、arm等嵌入式處理器的固件開發(fā)。

二、 格式

1. 縮進

函數(shù)體、if、for、while、switch case、do while等都需要使用縮進。不管你用任何編輯器或者是集成開發(fā)環(huán)境,縮進均是基于“Tab”鍵的,而不是基于“空格”鍵。一般來說,我采用 8 個字符的縮進長度。例如:

2. 空格及空行

空格和空行的出現(xiàn),是以增強程序的可讀性為目的。但是不要插入過多(兩個以上)的空格和空行。函數(shù)開始局部變量聲明后需加一個空行,函數(shù)內(nèi)邏輯相對獨立的部分,需加一個空行。文件結(jié)尾需加一個空行。

代碼中加入空格是以程序邏輯清晰為目的。c關鍵字后需加空格,例如:

3. 大括號

函數(shù)的大括號位于函數(shù)體的第二行與末行,if、while、switch、do的大括號位于關鍵字所在行的行尾和邏輯末行,末行的大括號與關鍵字上下對齊。例如:

三、 元素及命名規(guī)則

1. 文件

C語言源文件主要包括 .c文件和 .h 文件。文件命名要以體現(xiàn)其意義的名詞為主,例如芯片 max525的驅(qū)動程序,我們可以命名為 max525.c;實現(xiàn)fat32協(xié)議的驅(qū)動,我們可以命名為 fat32.c;忌出現(xiàn) a.c、newfile.c、my.c、wang.c等無意義文件名。

文件名用小寫字母、下劃線、數(shù)字的組合命名,不可出現(xiàn)空格等其他字符,更不允許出現(xiàn)漢字、日語、俄語等非 ascii碼的字符。

每個 .c文件都要對應有一個 .h 文件來配合其對外資源聲明。 .h 文件內(nèi)可包含宏定義、類型定義、對外資源(全局變量、全局函數(shù))聲明。 .c 文件可以包含變量聲明、函數(shù)原型、函數(shù)體。為了防止重復調(diào)用,.h文件的邏輯開頭需要加入開關控制,例如:

2. 宏、枚舉體

宏、枚舉體均需用大寫字母、數(shù)字及下劃線的組合,宏與常量之間用“tab”隔離,同一類含義的宏定義在一起,并放于相關的頭文件中。宏定義以能表達清楚含義為標準,除專業(yè)術語外,推薦用完整單詞表示宏含義。不同含義的宏定義需用空行分割,部分需加注釋。例如:

3. 自定義類型

我們可以用c關鍵字 typedef 進行自定義c語言中的數(shù)據(jù)類型。類型定義一般包括結(jié)構體、聯(lián)合體類型定義及函數(shù)類型定義。ANSI C包含的數(shù)據(jù)類型(如unsigned char、unsigned short int、double 等),不建議重定義。

結(jié)構體、聯(lián)合體類型定義推薦大寫字母加 _T 的形式出現(xiàn),例如:

4. 函數(shù)聲明及實體

函數(shù)命名采用謂賓結(jié)構,中間用下劃線隔開,函數(shù)必須使用小寫、數(shù)字及下劃線的組合。不管函數(shù)原型聲明還是函數(shù)體,必須包含完整的函數(shù)類型及參數(shù)類型(包括 void型亦不能省略)。文件的內(nèi)部函數(shù)(不需要外部調(diào)用),需要在函數(shù)類型前加static 關鍵字。

函數(shù)原型聲明時,需用注釋的方式,添加函數(shù)調(diào)用參數(shù)的意義,例如:

大部分函數(shù)需返回函數(shù)執(zhí)行狀態(tài),定義 0 為正常執(zhí)行, -1為一般錯誤,-1 ~ -999為自定義錯誤。自定義錯誤可以通過宏或者變量實現(xiàn)。例如:

從邏輯功能劃分的角度來講,函數(shù)需要簡、短、精,函數(shù)實現(xiàn)的邏輯內(nèi)容要跟函數(shù)名要一一對應,不要超過函數(shù)名表達的范圍,也不要只實現(xiàn)函數(shù)名所表達的部分功能。一般情況,盡量調(diào)用系統(tǒng)庫來實現(xiàn)功能而不是自己去實現(xiàn)。

5. 變量及初始化

變量一律用小寫字母、數(shù)字及下劃線實現(xiàn),全局變量要體現(xiàn)變量的意義,需用單詞的全寫; 由于局部變量作用的范圍,一般都在視野范圍你,所以可以用簡寫及單個字母,如 i、a等。

全局變量盡量越少越好,并且需根據(jù)屬性劃分,以結(jié)構體形式體現(xiàn)為主。整個工程的全局變量需在頭文件中用 extern 關鍵字對外聲明,隸屬于文件的全局變量(不屬于整個工程的全局變量),需加 static 關鍵字修飾。

變量使用前必須初始化,初始化可以采用靜態(tài)初始化和函數(shù)執(zhí)行時初始化。結(jié)構體的初始化建議采用 c99 規(guī)范里的指定初始化。例如:

數(shù)組維數(shù)最好用宏定義,數(shù)組用時必須初始化(賦值或者清零),對數(shù)組維數(shù)判斷時,需用sizeof 關鍵字,切忌直接用數(shù)字。

使用指針時,切忌指針越界及野指針的出現(xiàn);指針也是個變量,用它之前也必須初始化。對CPU外設進行直接映射或者是中斷內(nèi)變量使用時,變量前需加 volatile 以防系統(tǒng)優(yōu)化。

6. 注釋

注釋不宜過少,但也不宜過多。以表達清楚程序員的意圖為最終目的,注釋盡量不要用中文。函數(shù)體內(nèi)注釋,推薦采用 “//” 的注釋方式。

每個文件頭,均需加一個說明性的注釋。例如:

每個函數(shù)體的開始,均需加一個說明性的注釋。例如:

四、 項目管理

1. 項目文件夾

每個C工程中,可以以功能為依據(jù)對源文件進行文件夾分類。文件夾不可以出現(xiàn)空格、除英文字母、數(shù)字、下劃線外的字符;更不允許出現(xiàn)漢字、俄語等非 ASCII碼字符。例如某個工程可以劃分為如下文件夾:

2. 功能劃分

功能劃分應以邏輯清晰、層次關系明顯為目的。一旦劃分好后,不可越級調(diào)用系統(tǒng)資源(例如只有driver內(nèi)文件內(nèi)直接操作硬件資源,其他文件夾代碼均不可調(diào)用最底層硬件資源)。也不要互相調(diào)用而使系統(tǒng)資源很快耗盡。

3. 文件管理

文件一旦建立,就需在文件頭說明文件目的、版權及歷史記錄,每次修改后必須記錄。工程完工或者是間歇性擱置時,需要對所有工程文件夾、文件進行只讀屬性設置及當前狀態(tài)記錄(進行到什么狀態(tài)、存在什么bug等)。對源代碼最好做到每天一備份,以防意外篡改及丟失,以備恢復之用。

五、 一些建議

1. 代碼編輯器

有很多優(yōu)秀的代碼編輯器可供大家選擇,例如 Vim、Emacs、Souce-Insight、Edit-Plus等。每個人可以根據(jù)自己的喜好,選擇一種編輯器,切忌濫用。

2. PC 端編譯器及集成開發(fā)環(huán)境

GCC (GNU Compiler Collection) 是一個非常優(yōu)秀的編譯器套裝。他幾乎在所有的操作系統(tǒng)下均有移植,并且有很多CPU的交叉編譯器可供我們使用,例如 SDCC、arm-elf-gcc等。MS-Windows下推薦使用 Mingw32移植版,相應的集成開發(fā)環(huán)境推薦 Dev-cpp 和 Code::block。

3. 參考資源及網(wǎng)站

《The C Programming Language》 c語言圣經(jīng);

《Advanced Programming in the UNIX Environment》 UNIX C 程序員圣經(jīng);

http://www.gnu.org GNU Operating System

http://www.sf.net Source Forge

http://www.kernel.net The Linux Kernel Archives

六、 示例代碼

1. c文件

2. 頭文件

總結(jié)

以上是生活随笔為你收集整理的【连载】【FPGA黑金开发板】NIOS II那些事儿--编程风格(三)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。