不定期有讀者在問:
怎么才能寫出漂亮的代碼?
哪里有優(yōu)秀的代碼可以參考?
怎樣才能提高自己編碼水平?
其實(shí),我們身邊到處都有優(yōu)秀的代碼可以借鑒,只是你沒有認(rèn)真去發(fā)現(xiàn)而已。裸機(jī)、RTOS、Linux等各類優(yōu)秀的開源代碼相信你一定見到過,還有一些優(yōu)秀的開源庫(kù)你也肯定接觸過。
想要寫出漂亮、優(yōu)秀的代碼,首先,你的代碼必須要有一套規(guī)范。
今天就給大家分享一下我們身邊熟知的RTOS的編碼規(guī)范,以目前(2023-01-10)最新版本的uC/OS-III V3.08.02和 FreeRTOS V10.5.1為例:
編碼標(biāo)準(zhǔn)
uC/OS 和FreeRTOS 都是遵循 MISRA C 編碼標(biāo)準(zhǔn),均支持 PC-Lint 靜態(tài)檢查,兩者官方文檔都有說明。
提示:
MISRA C 標(biāo)準(zhǔn),指的是汽車 C 語(yǔ)言開發(fā)標(biāo)準(zhǔn),可以參看之前分享的文章:MISRA C:2012 標(biāo)準(zhǔn)是什么?
1.uC/OS
uC/OS文章明確指出遵循MISRA C:2012標(biāo)準(zhǔn),也支持PC-Lint 的靜態(tài)檢查。
2.FreeRTOS
FreeRTOS也明確指出采用 MISRA C編碼標(biāo)準(zhǔn),但是不支持 C99 之后的標(biāo)準(zhǔn),也支持 PC-Lint 靜態(tài)檢查。
FreeRTOS在源代碼中有大量說明(注釋)對(duì)PC-Lint靜態(tài)檢查可能會(huì)引起異常的代碼,這一點(diǎn)在 uC/OS 源代碼中是沒有的。
比如:
配置文件
兩種RTOS配置文件(也就是所謂的“裁剪”文件)的“內(nèi)容”有點(diǎn)類似,也是進(jìn)行了分類。
不過,uC/OS的分類和注釋更人性化,更適合初學(xué)者理解。
1.uC/OS
uC/OS的配置文件通常是:os_cfg.h
2.FreeRTOS
FreeRTOS的配置文件通常是:FreeRTOSConfig.h
標(biāo)頭
兩種RTOS標(biāo)頭的“內(nèi)容”有點(diǎn)類似,只是一個(gè)居中,一個(gè)靠左。
1.uC/OS
包含RTOS版本、版權(quán)說明、開源協(xié)議說明等:
2.FreeRTOS
包含RTOS版本、版權(quán)說明、開源協(xié)議說明、網(wǎng)址等,和uC/OS類似。
命名
兩種RTOS命名規(guī)則差別有點(diǎn)大,但都符合常規(guī)代碼命名規(guī)則。
1.文件名
uC/OS以【os_系統(tǒng)文件】方式,顯得更規(guī)范(體現(xiàn)了模塊化)。
FreeRTOS就比較直接,這個(gè)可能是剛才是命名的時(shí)候沒有長(zhǎng)期規(guī)劃,然后為了兼容,一直沿用至今。(這種更容易引起文件重名)
2.宏
兩者有共同之處:下劃線隔開大寫字母,但是開頭(前綴)有一定區(qū)別。
以“配置文件”為例:uC/OS以【OS_CFG_】開頭,F(xiàn)reeRTOS以【config】開頭。
3.數(shù)據(jù)類型
uC/OS定義的數(shù)據(jù)類型,相對(duì)更常見,也更適合新手。
FreeRTOS定義的數(shù)據(jù)類型,更“系統(tǒng)”一點(diǎn),適合老司機(jī),對(duì)新手相對(duì)沒那么友好。
4.函數(shù)名
兩者有點(diǎn)類似,前綴不一樣,后面都是以【大寫字母開頭】進(jìn)行區(qū)分。
比如:創(chuàng)建任務(wù)的函數(shù)名:
FreeRTOS的前綴官方有這樣的描述:
靜態(tài)(static)函數(shù)以 prv 為前綴。比如:prvIdleTask 函數(shù)。
API 函數(shù)以其返回類型為前綴,void 類型以v為綴。比如:vTaskDelete 函數(shù)。
注釋
// /* */ 是兩種最常見注釋的方法,但這兩種 RTOS 基本以【/* */】注釋居多。
注釋的位置也是有講究,通常在代碼所在行上一行,或者在代碼所在行(代碼后面)。
這里主要說明一下,F(xiàn)reeRTOS在代碼中沒有相信注釋函數(shù)的功能、參數(shù)、返回值等信息。
還是以“創(chuàng)建任務(wù)”函數(shù)為例:
當(dāng)然,F(xiàn)reeRTOS的函數(shù)注釋信息,在手冊(cè)中有相信描述。
縮進(jìn)
這兩種RTOS縮進(jìn)方式一樣,都是采用 4 空格:
這里要提醒一下,切記不要 Tab 和空格兩者混用,不然代碼就是一片亂。(在不少新手,或者初級(jí)工程中就經(jīng)常出現(xiàn)這種,代碼簡(jiǎn)直不敢看)
單詞縮寫
不同的領(lǐng)域,有不同的縮寫方式。在RTOS中也有一些常見的縮寫單詞,比如:
縮寫 | 原意 |
Addr | Address |
Blk | Block |
Chk | Check |
Clr | Clear |
Cnt | Count |
Ctr | Counter |
Ctx | Context |
Cur | Current |
Del | Delete |
Dly | Delay |
Err | Error |
OS | Operating System?? |
CPU | Center Processing Unit |
好了,本文就分享到這里。以上只是列舉了部分典型的編碼風(fēng)格,更多細(xì)節(jié),大家可以抽時(shí)間自行研究。
-
Linux
+關(guān)注
關(guān)注
87文章
11345瀏覽量
210409 -
編碼
+關(guān)注
關(guān)注
6文章
957瀏覽量
54954 -
RTOS
+關(guān)注
關(guān)注
22文章
819瀏覽量
119890 -
代碼
+關(guān)注
關(guān)注
30文章
4828瀏覽量
69059 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
484瀏覽量
62399
原文標(biāo)題:編碼風(fēng)格:μCOS vs FreeRTOS
文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
FreeRTOS編碼標(biāo)準(zhǔn)如何命名
Linux內(nèi)核編碼風(fēng)格(編程代碼風(fēng)格推薦)
梳理一下FreeRTOS內(nèi)核代碼規(guī)范
Gowin HDL編碼風(fēng)格要求及編碼實(shí)現(xiàn)
如何使用VS Code和PlatformIO更好的Arduino編碼
FreeRTOS編碼規(guī)則及風(fēng)格指南
關(guān)于Linux的內(nèi)核代碼風(fēng)格
一文帶你快速理解FreeRTOS代碼規(guī)范
![一文帶你快速理解<b class='flag-5'>FreeRTOS</b>代碼規(guī)范](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
Sin/Cos編碼器與Sitara AM437x的連接參考設(shè)計(jì)
![Sin/<b class='flag-5'>Cos</b><b class='flag-5'>編碼</b>器與Sitara AM437x的連接參考設(shè)計(jì)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
Gowin HDL編碼風(fēng)格用戶指南
![Gowin HDL<b class='flag-5'>編碼</b><b class='flag-5'>風(fēng)格</b>用戶指南](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
Verilog編碼風(fēng)格的建議
![Verilog<b class='flag-5'>編碼</b><b class='flag-5'>風(fēng)格</b>的建議](https://file1.elecfans.com/web2/M00/89/14/wKgaomR4VkKALaDNAAAR8m6f1lI485.jpg)
評(píng)論