0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RT-Thread 開發(fā)的目錄名稱與文件名稱

lhl545545 ? 來源:RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 作者:RTThread物聯(lián)網(wǎng)操作 ? 2020-06-09 15:53 ? 次閱讀

這是一份 RT-Thread 開發(fā)人員的開發(fā)指引。RT-Thread 做為一份開源軟件,它需要由不同 的人采用合作的方式完成,這份文檔是開發(fā)人員的一個指引。RT-Thread 的開發(fā)人員請遵 守這樣的編程風(fēng)格。同時對于使用 RT-Thread 的用戶,也可通過這份文檔了解 RT-Thread 代碼內(nèi)部一些約定從而比較容易的把握到 RT-Thread 的實現(xiàn)方式。

1.目錄名稱

目錄名稱如果無特殊的需求,請使用全小寫的形式;目錄名稱應(yīng)能夠反應(yīng)部分的意思,例 如各芯片移植由其芯片名稱構(gòu)成或芯片類別構(gòu)成;components 目錄下能夠反映組件的意義。

2.文件名稱

文件名稱如果無特殊的需求(如果是引用其他地方,可以保留相應(yīng)的名稱),請使用全小寫 的形式。另外為了避免文件名重名的問題,一些地方請盡量不要使用通用化、使用頻率高 的名稱。

3.頭文件定義

C語言頭文件為了避免多次重復(fù)包含,需要定義一個符號。這個符號的定義形式請采用如下 的風(fēng)格:

1 #ifndef __FILE_H__

2 #define __FILE_H__

3 /* header file content */

4 #endif

即定義的符號兩側(cè)采用 “__” 以避免重名,另外也可以根據(jù)文件名中是否包含多個詞語而 采用 “_” 連接起來。

4.文件頭注釋

在每個源文件文件頭上,應(yīng)該包括相應(yīng)的版權(quán)信息,Change Log 記錄:

1 /*

2 * File : rtthread.h

3 * This file is part of RT-Thread RTOS

4 * COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team

5 *

6 * This program is free software; you can redistribute it and/or modify

7 * it under the terms of the GNU General Public License as published by

8 * the Free Software Foundation; either version 2 of the License, or

9 * (at your option) any later version.

10 *

11 * This program is distributed in the hope that it will be useful,

12 * but WITHOUT ANY WARRANTY; without even the implied warranty of

13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

14 * GNU General Public License for more details.

15 *

16 * You should have received a copy of the GNU General Public License along

17 * with this program; if not, write to the Free Software Foundation, Inc.,

18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

19 *

20 * Change Logs:

21 * Date Author Notes

22 * 2006-03-18 Bernard the first version

23 * 2006-04-26 Bernard add semaphore APIs

24 * 。..

25 */

例如采用如上的形式。

5.結(jié)構(gòu)體定義

結(jié)構(gòu)體名稱請使用小寫英文名的形式,單詞與單詞之間采用 “_” 連接,例如:

1 struct rt_list_node

2 {

3 struct rt_list_node *next;

4 struct rt_list_node *prev;

5 };

其中,“{”,“}” 獨立占用一行,后面的成員定義使用縮進(jìn)的方式定義。

結(jié)構(gòu)體等的類型定義請以結(jié)構(gòu)體名稱加上 “_t” 的形式作為名稱,例如:

1 typedef struct rt_list_node rt_list_t;

因為內(nèi)核中對象引用方便的緣故,采用了對象內(nèi)核指針作為類型定義的形式,例如:

1 typedef struct rt_timer* rt_timer_t;

6.宏定義

在RT-Thread中,請使用大寫英文名稱作為宏定義,單詞之間使用 “_” 連接,例如:

向滑動查看全部

1 #define RT_TRUE 1

7.函數(shù)名稱、聲明

函數(shù)名稱請使用小寫英文的形式,單詞之間使用 “_” 連接。提供給上層應(yīng)用使用的 API 接口,必須在相應(yīng)的頭文件中聲明;如果函數(shù)入口參數(shù)是空,必須使用 void 作為入口參 數(shù),例如:

1 rt_thread_t rt_thread_self(void);

8.注釋編寫

請使用英文做為注釋,使用中文注釋將意味著在編寫代碼時需要來回不停的切換中英文輸 入法從而打斷編寫代碼的思路。并且使用英文注釋也能夠比較好的與中國以外的技術(shù)者進(jìn) 行交流。

源代碼的注釋不應(yīng)該過多,更多的說明應(yīng)該是代碼做了什么,僅當(dāng)個別關(guān)鍵點才需要一些 相應(yīng)提示性的注釋以解釋一段復(fù)雜的算法它是如何工作的。對語句的注釋只能寫在它的上 方或右方,其他位置都是非法的。

9.縮進(jìn)及分行

縮進(jìn)請采用 4 個空格的方式。如果沒有什么特殊意義,請在 “{” 后進(jìn)行分行,并在下一 行都采用縮進(jìn)的方式,例如:

1 if (condition)

2 {

3 /* others */

4 }

唯一的例外是 switch 語句,switch-case 語句采用 case 語句與 switch 對齊的方式, 例如:

1 switch (value)

2 {

3 case value1:

4 break;

5 }

case 語句與前面的 switch 語句對齊,后續(xù)的語句則采用縮進(jìn)的方式。

分行上,如果沒有什么特殊考慮,請不要在代碼中連續(xù)使用兩個以上的空行。

10.大括號與空格

從代碼閱讀角度,建議每個大括號單獨占用一行,而不是跟在語句的后面,例如:

1 if (condition)

2 {

3 /* others */

4 }

匹配的大括號單獨占用一行,代碼閱讀起來就會有相應(yīng)的層次而不會容易出現(xiàn)混淆的情況。

空格建議在非函數(shù)方式的括號調(diào)用前留一個空格以和前面的進(jìn)行區(qū)分,例如:

1 if (x 《= y)

2 {

3 /* others */

4 }

5

6 for (index = 0; index 《 MAX_NUMBER; index ++)

7 {

8 /* others */

9 }

建議在括號前留出一個空格(涉及的包括 if、for、while、switch 語句),而運(yùn)算表達(dá)式 中,運(yùn)算符與字符串間留一個空格。另外,不要在括號的表達(dá)式兩側(cè)留空格,例如:

1 if ( x 《= y )

2 {

3 /* other */

4 } /* others */

5 }

這樣括號內(nèi)兩側(cè)的空格是不允許的。

11.trace、log信息

在 RT-Thread 中,普遍使用的 log 方式是 rt_kprintf。rt_kprintf 在 RT-Thread 被實 現(xiàn)成一個采用輪詢、非中斷方式的字串輸出,能夠適合于在中斷這類“即時”顯示日志的場 合。因為這種輪詢方式的存在,也必然會影響到日志輸出的時序關(guān)系。

建議在代碼中不要頻繁的使用 rt_kprintf 作為日志輸出,除非你真正的明白,你的代碼 運(yùn)行占用的時間多一些也沒什么關(guān)系。

日志輸出應(yīng)該被設(shè)計成正常情況下是關(guān)閉狀態(tài)(例如通過一個變量或宏就能夠開啟),并且 當(dāng)真正輸出日志時,日志是易懂易定位問題的方式?!疤鞎健钡娜罩鞠到y(tǒng)是糟糕的,不合 理的。

12.函數(shù)

在內(nèi)核編程中,函數(shù)應(yīng)該盡量精簡,僅完成相對獨立的簡單功能。函數(shù)的實現(xiàn)不應(yīng)該太長 ,函數(shù)實現(xiàn)太長,應(yīng)該反思能夠如何修改(或拆分)使得函數(shù)更為精簡、易懂。

13.對象

RT-Thread 內(nèi)核采用了 C 語言對象化技術(shù),命名表現(xiàn)形式是:對象名結(jié)構(gòu)體表示類定義、 對象名 + 動詞短語形式表示類方法,例如:

1 struct rt_timer

2 {

3 struct rt_object parent;

4 /* other fields */

5 };

6 typedef struct rt_timer* rt_timer_t;

結(jié)構(gòu)體定義 rt_timer 代表了 timer 對象的類定義;

1 rt_timer_t rt_timer_create(const char* name,

2 void (*timeout)(void* parameter), void* parameter,

3 rt_tick_t time, rt_uint8_t flag);

4 rt_err_t rt_timer_delete(rt_timer_t timer);

5 rt_err_t rt_timer_start(rt_timer_t timer);

6 rt_err_t rt_timer_stop(rt_timer_t timer);

rt_timer + 動詞短語的形式表示能夠應(yīng)用于 timer 對象的方法。

在創(chuàng)建一個新的對象時,應(yīng)該思考好,對象的內(nèi)存操作處理:是否允許一個靜態(tài)對象存在 ,或僅僅支持從堆中動態(tài)分配的對象。
責(zé)任編輯:pj

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 開源軟件
    +關(guān)注

    關(guān)注

    0

    文章

    207

    瀏覽量

    15782
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1239

    瀏覽量

    39442
收藏 人收藏

    評論

    相關(guān)推薦

    2024 RT-Thread全球巡回 線下培訓(xùn)火熱來襲!

    親愛的RT-Thread社區(qū)成員們:我們非常高興地宣布,2024年RT-Thread全球開發(fā)者線下培訓(xùn)即將拉開帷幕!24年全球巡回培訓(xùn)將覆蓋超10座城市及國家,為開發(fā)者提供一個深入學(xué)習(xí)
    的頭像 發(fā)表于 08-07 08:35 ?363次閱讀
    2024 <b class='flag-5'>RT-Thread</b>全球巡回 線下培訓(xùn)火熱來襲!

    【好書推薦】RT-Thread設(shè)備驅(qū)動開發(fā)指南

    近年來國內(nèi)芯片產(chǎn)業(yè)和物聯(lián)網(wǎng)產(chǎn)業(yè)的快速崛起,行業(yè)發(fā)展迫切需要更多人才,尤其需要掌握嵌入式操作系統(tǒng)等底層技術(shù)的人才。隨著RT-Thread被更廣泛地應(yīng)用于行業(yè)中,開發(fā)者對嵌入式驅(qū)動開發(fā)的需求越來越
    的頭像 發(fā)表于 08-01 08:35 ?294次閱讀
    【好書推薦】<b class='flag-5'>RT-Thread</b>設(shè)備驅(qū)動<b class='flag-5'>開發(fā)</b>指南

    開發(fā)者分享 | 基于先楫RT-Thread BSP,使用CLion開發(fā)應(yīng)用

    本期開發(fā)者:朱彥祖RT-Thread資深工程師,HPM6700/6400元老級開發(fā)者及骨灰級用戶,先輯生態(tài)社區(qū)常駐優(yōu)秀開發(fā)者,江湖人稱杭州吳彥祖。背景最近在使用先輯HPM6750
    的頭像 發(fā)表于 06-07 08:17 ?2143次閱讀
    <b class='flag-5'>開發(fā)</b>者分享 | 基于先楫<b class='flag-5'>RT-Thread</b> BSP,使用CLion<b class='flag-5'>開發(fā)</b>應(yīng)用

    使用FATFS中fopen函數(shù)創(chuàng)建新文件名稱時,有什么方法可以增加字符長度嗎?

    在使用FATFS中fopen函數(shù)創(chuàng)建新文件名稱時,發(fā)現(xiàn)txt文件名長度不能超過8個英文字符,請問有什么方法可以增加字符長度嗎?在文件系統(tǒng)中的哪個位置去更改參數(shù)呢?
    發(fā)表于 03-28 08:39

    RT-Thread設(shè)備驅(qū)動開發(fā)指南基礎(chǔ)篇—以先楫bsp的hwtimer設(shè)備為例

    RT-Thread設(shè)備驅(qū)動開發(fā)指南》書籍是RT-thread官方出品撰寫,系統(tǒng)講解RT-thread IO設(shè)備驅(qū)動開發(fā)方法,從三方面進(jìn)行講解
    的頭像 發(fā)表于 02-20 16:01 ?1410次閱讀
    <b class='flag-5'>RT-Thread</b>設(shè)備驅(qū)動<b class='flag-5'>開發(fā)</b>指南基礎(chǔ)篇—以先楫bsp的hwtimer設(shè)備為例

    【PSoC?62 for RT-ThreadRT-Thread攜手英飛凌舉辦嵌入式網(wǎng)絡(luò)應(yīng)用開發(fā)沙龍,圓滿落幕!

    2023年12月09日,深圳,全球半導(dǎo)體解決方案的領(lǐng)導(dǎo)者英飛凌科技(中國)有限公司(以下簡稱:英飛凌)與上海睿賽德電子科技有限公司(RT-Thread)在深圳塘朗聯(lián)合舉辦了“嵌入式網(wǎng)絡(luò)應(yīng)用開發(fā)”為主
    的頭像 發(fā)表于 12-14 16:25 ?465次閱讀
    【PSoC?62 for <b class='flag-5'>RT-Thread</b>】<b class='flag-5'>RT-Thread</b>攜手英飛凌舉辦嵌入式網(wǎng)絡(luò)應(yīng)用<b class='flag-5'>開發(fā)</b>沙龍,圓滿落幕!

    RT-thread源碼移植到STM32F10x和STM32F4xx

    v2.1.0的穩(wěn)定版本。 ? 解壓后的源碼目錄結(jié)構(gòu): ? 基本內(nèi)核的移植只需要關(guān)心目錄-bsp、include、libcpu、src。 ? 二、開始移植 1、文件拷貝 -- F:RT-Thre
    的頭像 發(fā)表于 11-15 09:38 ?2064次閱讀
    <b class='flag-5'>RT-thread</b>源碼移植到STM32F10x和STM32F4xx

    上海線下培訓(xùn):RT-Thread×先楫 HPM5300 for RT-Thread ,高性能 RISC-V 平臺開發(fā)快速上手

    RT-Thread的代表性產(chǎn)品和服務(wù)。 同時,我們也邀請到先楫的資深工程師楊帆,他將為開發(fā)者們帶來期待已久的熱門技術(shù)主題培訓(xùn),RT-Thread×先楫 HPM5300 for RT-Thre
    的頭像 發(fā)表于 11-03 19:10 ?633次閱讀
    上海線下培訓(xùn):<b class='flag-5'>RT-Thread</b>×先楫  HPM5300 for <b class='flag-5'>RT-Thread</b> ,高性能 RISC-V 平臺<b class='flag-5'>開發(fā)</b>快速上手

    rt-studio潘多拉開發(fā)板最新rt-thread不能運(yùn)行解決辦法

    rt-studio 上 選擇基于開發(fā)板的項目,選擇潘多拉,rt-thread選擇lasted ,如下圖
    的頭像 發(fā)表于 10-16 14:50 ?1089次閱讀
    <b class='flag-5'>rt</b>-studio潘多拉<b class='flag-5'>開發(fā)</b>板最新<b class='flag-5'>rt-thread</b>不能運(yùn)行解決辦法

    基于rt-thread的socket通信設(shè)計

    最近再研究 rt-thread 的通信 ,想設(shè)計出 eps8266(多個) rt-thread(作為中控) 服務(wù)器的通信框架,使用的開發(fā)板是 潘多拉
    的頭像 發(fā)表于 10-13 15:02 ?1071次閱讀
    基于<b class='flag-5'>rt-thread</b>的socket通信設(shè)計

    RT-Thread使用Soft RTC(軟件模擬RTC)

    開發(fā)環(huán)境:野火的stm32f407,rt-thread studio版本是版本: 2.2.6,rt-thread 使用版本為4.0.3,stm32f4的資源包為0.2.2。
    的頭像 發(fā)表于 10-12 17:39 ?581次閱讀
    <b class='flag-5'>RT-Thread</b>使用Soft RTC(軟件模擬RTC)

    RT-Thread移植使用webserver (lwip+httpd)

    開發(fā)環(huán)境:野火的stm32f407,rt-thread studio版本是版本: 2.2.6,stm32f4的資源包為0.2.2,rt-thread版本為4.0.3。
    的頭像 發(fā)表于 10-12 12:49 ?1074次閱讀
    <b class='flag-5'>RT-Thread</b>移植使用webserver (lwip+httpd)

    試用RT-Thread Studio(VSCode)

    想嘗試RT-Thread studio (VSCode),先下載安裝VSCode,再搜索RT-Thread
    的頭像 發(fā)表于 10-12 10:58 ?883次閱讀
    試用<b class='flag-5'>RT-Thread</b> Studio(VSCode)

    RT-Thread v5.0.2 發(fā)布

    RT-Thread 代碼倉庫地址: ●? https://github.com/RT-Thread/rt-thread RT-Thread 5.0.2 版本發(fā)布日志詳情: ●? htt
    的頭像 發(fā)表于 10-10 18:45 ?1202次閱讀
    <b class='flag-5'>RT-Thread</b> v5.0.2 發(fā)布

    使用RT-Thread Master+QEMU模擬器進(jìn)行RT-Thread原型快速開發(fā)

    前段時間分別在Win和Mac M1/M2 Silicon硬件環(huán)境下折騰了VS Code + RT-Thread的編譯問題。
    的頭像 發(fā)表于 09-27 14:50 ?2545次閱讀
    使用<b class='flag-5'>RT-Thread</b> Master+QEMU模擬器進(jìn)行<b class='flag-5'>RT-Thread</b>原型快速<b class='flag-5'>開發(fā)</b>