在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

RT-Thread 編程風格

RTThread物聯網操作系統 ? 來源:未知 ? 2022-12-06 19:55 ? 次閱讀

作者:架構師李肯


前言

最近博主在學習 RT-Thread 這個開源項目,開始慢慢學習和理解它的開源代碼,慢慢開始接觸了它的代碼規范。
我個人認為,參與一個開源項目的第一步,就是要好好理解它的規范,其中代碼編寫規范就是很重要的一環。

RT-Thread 編程風格

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

1.目錄名稱

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

2.文件名稱

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

設備驅動源碼文件:drv_class.c的命名方式,如:

  • drv_spi.c

  • drv_gpio.c

3.頭文件定義

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

1#ifndef__FILE_H__
2#define__FILE_H__
3/*headerfilecontent*/
4#endif

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

4.文件頭注釋

在每個源文件文件頭上,應該包括相應的版權信息,Change Log 記錄:

 1/*
2*Copyright(c)2006-2020,RT-ThreadDevelopmentTeam
3*
4*SPDX-License-Identifier:Apache-2.0
5*
6*ChangeLogs:
7*DateAuthorNotes
8*2006-03-18Bernardthefirstversion
9*2006-04-26BernardaddsemaphoreAPIs
10*/

例如采用如上的形式。

5.結構體定義

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

1structrt_list_node
2{

3structrt_list_node*next;
4structrt_list_node*prev;
5};

其中,"{","}" 獨立占用一行,后面的成員定義使用縮進的方式定義。

結構體等的類型定義請以結構體名稱加上 “_t” 的形式作為名稱,例如:

1typedefstructrt_list_nodert_list_t;

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

1typedefstructrt_timer*rt_timer_t;

6.宏定義

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

1#defineRT_TRUE1


7.函數名稱、聲明

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

1rt_thread_trt_thread_self(void);

內部靜態函數命名:以下劃線開頭,使用_class_method格式,不攜帶_rt_開頭,如內核或驅動文件中的函數命名:

1/*IPCobjectinit*/
2staticrt_err_t_ipc_object_init()
3
4/*UARTdriverops*/
5staticrt_err_t_uart_configure()
6staticrt_err_t_uart_control()

調用注冊設備接口的函數命名:使用rt_hw_class_init()格式,舉例:

1intrt_hw_uart_init(void)
2intrt_hw_spi_init(void)


8.注釋編寫

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

語句注釋

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

1/*你的英文注釋*/

函數注釋

注釋以/**開頭,以*/結尾,中間寫入函數注釋,組成元素如下,每個元素描述之間空一行,且首列對齊:

  • @brief + 簡述函數作用。在描述中,著重說明該函數的作用,每句話首字母大寫,句尾加英文句號。

  • @note + 函數說明。在上述簡述中未能體現到的函數功能或作用的一些點,可以做解釋說明,每句話首字母大寫,句尾加英文句號。

  • @see + 相關 API 羅列。若有與當前函數相關度較高的 API,可以進行列舉。

  • @param + 以參數為主語 + be 動詞 + 描述,說明參數的意義或來源。

  • @return + 枚舉返回值 + 返回值的意思,若返回值為數據,則直接介紹數據的功能。

  • @warning + 函數使用注意要點。在函數使用時,描述需要注意的事項,如使用環境、使用方式等。每句話首字母大寫,句尾加英文句號。

注釋模版請參見:rt-thread/src/ipc.c 源碼文件,英文注釋請參考使用 grammarly 以及谷歌翻譯。

 1/**
2*@briefThefunctionwillinitializeastaticeventobject.
3*
4*@noteForthestaticeventobject,itsmemoryspaceisallocatedbythecompilerduringcompiling,
5*andshallplacedontheread-writedatasegmentorontheuninitializeddatasegment.
6*Bycontrast,thert_event_create()functionwillallocatememoryspaceautomatically
7*andinitializetheevent.
8*
9*@seert_event_create()
10*
11*@parameventisapointertotheeventtoinitialize.Itisassumedthatstoragefortheevent
12*willbeallocatedinyourapplication.
13*
14*@paramnameisapointertothenamethatgiventotheevent.
15*
16*@paramvalueistheinitialvaluefortheevent.
17*Ifwanttoshareresources,youshouldinitializethevalueasthenumberofavailableresources.
18*Ifwanttosignaltheoccurrenceofanevent,youshouldinitializethevalueas0.
19*
20*@paramflagistheeventflag,whichdeterminesthequeuingwayofhowmultiplethreadswait
21*whentheeventisnotavailable.
22*TheeventflagcanbeONEofthefollowingvalues:
23*
24*RT_IPC_FLAG_PRIOThependingthreadswillqueueinorderofpriority.
25*
26*RT_IPC_FLAG_FIFOThependingthreadswillqueueinthefirst-in-first-outmethod
27*(alsoknownasfirst-come-first-served(FCFS)schedulingstrategy).
28*
29*NOTE:RT_IPC_FLAG_FIFOisanon-real-timeschedulingmode.Itisstronglyrecommendedto
30*useRT_IPC_FLAG_PRIOtoensurethethreadisreal-timeUNLESSyourapplicationsconcernabout
31*thefirst-in-first-outprinciple,andyouclearlyunderstandthatallthreadsinvolvedin
32*thiseventwillbecomenon-real-timethreads.
33*
34*@returnReturntheoperationstatus.WhenthereturnvalueisRT_EOK,theinitializationissuccessful.
35*Ifthereturnvalueisanyothervalues,itrepresentstheinitializationfailed.
36*
37*@warningThisfunctioncanONLYbecalledfromthreads.
38*/

39rt_err_trt_event_init(rt_event_tevent,constchar*name,rt_uint8_tflag)
40{
41...
42}

9.縮進及分行

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

1if(condition)
2{
3/*others*/
4}

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

1switch(value)
2{
3casevalue1:
4break;
5}

case 語句與前面的 switch 語句對齊,后續的語句則采用縮進的方式。分行上,如果沒有什么特殊考慮,請不要在代碼中連續使用兩個以上的空行


10.大括號與空格

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

1if(condition)
2{
3/*others*/
4}

匹配的大括號單獨占用一行,代碼閱讀起來就會有相應的層次而不會容易出現混淆的情況。空格建議在非函數方式的括號調用前留一個空格以和前面的進行區分,例如:

1if(x<=?y)
2{
3/*others*/
4}
5
6for(index=0;index7{
8/*others*/
9}

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

1if(x<=?y?)
2{
3/*other*/
4}

這樣括號內兩側的空格是不允許的。

11.trace、log信息

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

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

日志輸出應該被設計成正常情況下是關閉狀態(例如通過一個變量或宏就能夠開啟),并且當真正輸出日志時,日志是易懂易定位問題的方式。"天書式"的日志系統是糟糕的,不合理的。

12.函數

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

13.對象

RT-Thread 內核采用了 C 語言對象化技術,命名表現形式是:對象名結構體表示類定義、對象名 + 動詞短語形式表示類方法,例如:

1structrt_timer
2{

3structrt_objectparent;
4/*otherfields*/
5};
6typedefstructrt_timer*rt_timer_t;

結構體定義 rt_timer 代表了 timer 對象的類定義;

1rt_timer_trt_timer_create(constchar*name,
2void(*timeout)(void*parameter),
3void*parameter,
4rt_tick_ttime,rt_uint8_tflag);
5rt_err_trt_timer_delete(rt_timer_ttimer);
6rt_err_trt_timer_start(rt_timer_ttimer);
7rt_err_trt_timer_stop(rt_timer_ttimer);

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

在創建一個新的對象時,應該思考好,對象的內存操作處理:是否允許一個靜態對象存在,或僅僅支持從堆中動態分配的對象。

14.格式化代碼

格式化代碼是指通過腳本自動整理你的代碼,并使其符合 RT-Thread 的編碼規范。本文提供以下兩種自動格式化代碼方法,可以自行選擇或配合使用。

使用 astyle 格式化

用 astyle 自動格式化代碼,參數如下:

 1--style=allman
2--indent=spaces=4
3--indent-preproc-block
4--pad-oper
5--pad-header
6--unpad-paren
7--suffix=none
8--align-pointer=name
9--lineend=linux
10--convert-tabs
11--verbose

能滿足函數空格、縮進、函數語句等的規范。

使用 formatting 格式化

使用 formatting 掃描文件來格式化代碼:formatting 可以滿足編碼規則的基本要求,如:

  • 將源文件編碼統一為 UTF-8

  • 將 TAB 鍵替換為 4 空格

  • 將每行末尾多余的空格刪除,并統一換行符為 ‘ ’




RT-Thread開發者大會

我們將聯合重量級合作伙伴,圍繞AIoT的發展、產業技術趨勢,聚焦控制、連接、行業應用開發,通過主題演講、技術分享、應用演示等環節,助力開發者探索萬物智能的世界,期待與大家一起相聚線上直播間!


現在掃碼報名

我們將在報名者中抽取“幸運參會者100名”

贈送RT-Thread新款開發板(即將揭秘)


本次將在大會當天在直播間宣布中獎名單

更多獎品即將來襲...


你可以添加微信17775982065為好友,注明:公司+姓名,拉進RT-Thread官方微信交流群!



愛我就給我點在看

點擊閱讀原文進入報名


原文標題:RT-Thread 編程風格

文章出處:【微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RT-Thread
    +關注

    關注

    32

    文章

    1376

    瀏覽量

    41609

原文標題:RT-Thread 編程風格

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    2025 RT-Thread全球技術大會議程正式發布!

    RT-ThreadGlobalTechConference(RT-ThreadGTC,RT-Thread全球技術大會)是聚焦基礎軟件技術創新與實踐的嵌入式技術盛會,持續推動技術價值轉化
    的頭像 發表于 05-27 19:28 ?504次閱讀
    2025 <b class='flag-5'>RT-Thread</b>全球技術大會議程正式發布!

    【直播預告】《實時操作系統應用技術—基于RT-Thread與ARM的編程實踐》教學脈絡及資源簡介

    直播預告直播主題:《實時操作系統應用技術—基于RT-Thread與ARM的編程實踐》教學脈絡及資源簡介開放時間:2025年5月29日(周四)20:00主講老師:王宜懷課程類型:視頻直播觀看平臺
    的頭像 發表于 05-26 17:50 ?256次閱讀
    【直播預告】《實時操作系統應用技術—基于<b class='flag-5'>RT-Thread</b>與ARM的<b class='flag-5'>編程</b>實踐》教學脈絡及資源簡介

    RT-Thread審核團招募: 深度參與開源RTOS社區治理與演進

    全球開發者招募:RT-Thread審核團(ReviewTeam)正式開放申請!在開源的世界里,代碼審查(CodeReview)是保證軟件質量、促進技術交流的關鍵環節。RT-Thread作為全球領先
    的頭像 發表于 05-21 18:02 ?534次閱讀
    <b class='flag-5'>RT-Thread</b>審核團招募: 深度參與開源RTOS社區治理與演進

    如何將RT-Thread移植到NXP MCUXPressoIDE上

    RT-Thread默認支持的IDE只有IAR 和 Keil, 那如何將RT-Thread移植到NXP MCUXPressoIDE上呢?本文內容比較簡單但稍有瑣碎,希望對有需要的小伙伴有所幫助。
    的頭像 發表于 02-13 10:37 ?1795次閱讀
    如何將<b class='flag-5'>RT-Thread</b>移植到NXP MCUXPressoIDE上

    從開源中來到開源中去-RT-Thread北京社區篇

    RT-Thread今年全域推行不同區域社區網,通過建立區域社區網,構建更加緊密聯系的開源社區,實現更廣泛的開源資源共享,讓更多的RT-Thread開發者受益。今年8月份RT-Thread正式啟動北京
    的頭像 發表于 11-29 01:05 ?434次閱讀
    從開源中來到開源中去-<b class='flag-5'>RT-Thread</b>北京社區篇

    【S32K146 RT-Thread】之 使用SFUD組件驅動spi flash

    【S32K146 RT-Thread】之 使用SFUD組件驅動spi flash
    的頭像 發表于 11-21 01:05 ?1032次閱讀
    【S32K146 <b class='flag-5'>RT-Thread</b>】之 使用SFUD組件驅動spi flash

    RT-Thread上CAN實踐

    開箱測試RT-Thread官方已完成了對英飛凌XMC7200EVK的移植,通過shell可以看到做好了uart3的console。本文將介紹如何進行RT-ThreadCan移植。接下來我們要完成CAN_FD的驅動移植,并正常啟動RT-T
    的頭像 發表于 11-13 01:03 ?1953次閱讀
    <b class='flag-5'>RT-Thread</b>上CAN實踐

    開源共生 商業共贏 | RT-Thread 2024開發者大會報名啟動!

    親愛的RT-Thread開發者我們很高興地宣布,一年一度的RDC(RT-ThreadDeveloperConference,RT-Thread開發者大會)正式啟動報名!2024RT-Threa
    的頭像 發表于 10-29 08:06 ?903次閱讀
    開源共生 商業共贏 | <b class='flag-5'>RT-Thread</b> 2024開發者大會報名啟動!

    【成都】9月21日RT-Thread巡回線下培訓-OpenMV機器視覺

    親愛的RT-Thread社區成員們:RT-Thread24年全球巡回培訓將覆蓋超10座城市及國家,為開發者提供一個深入學習RT-Thread嵌入式開發,以及和工程師們線下交流的絕佳機會。2024年
    的頭像 發表于 09-13 08:09 ?1494次閱讀
    【成都】9月21日<b class='flag-5'>RT-Thread</b>巡回線下培訓-OpenMV機器視覺

    【大連】9月7日RT-Thread巡回線下培訓-OpenMV機器視覺

    親愛的RT-Thread社區成員們:2024年RT-Thread全球開發者線下培訓拉開帷幕啦!24年全球巡回培訓將覆蓋超10座城市及國家,為開發者提供一個深入學習RT-Thread嵌入式開發的絕佳
    的頭像 發表于 09-01 08:02 ?3271次閱讀
    【大連】9月7日<b class='flag-5'>RT-Thread</b>巡回線下培訓-OpenMV機器視覺

    瑞薩電子全球VP蒞臨RT-Thread指導交流

    近日,瑞薩電子高級副總裁関俊彥(ToshihikoSeki)先生及瑞薩電子嵌入式處理器事業部市場總監沈清女士一行拜訪了上海睿賽德電子科技有限公司。RT-Thread創始人兼首席執行官熊譜翔先生及其
    的頭像 發表于 08-30 13:11 ?826次閱讀
    瑞薩電子全球VP蒞臨<b class='flag-5'>RT-Thread</b>指導交流

    【QEMU系列】不用開發板運行RT-Thread指南-ARM架構

    簡介在物聯網和嵌入式系統的開發中,RT-Thread操作系統憑借其小巧、高效和靈活的特點,受到了越來越多開發者的青睞。然而,對于很多剛剛接觸RT-Thread的開發者來說,購買和使用開發板可能會
    的頭像 發表于 08-09 08:35 ?1487次閱讀
    【QEMU系列】不用開發板運行<b class='flag-5'>RT-Thread</b>指南-ARM架構

    2024 RT-Thread全球巡回 線下培訓火熱來襲!

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

    【好書推薦】RT-Thread設備驅動開發指南

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

    RT-Thread 新里程碑達成——GitHub Star 破萬!

    RT-Thread實時操作系統開源項目在GitHub上的star數量突破一萬!截止發文,RT-Thread作為實時操作系統在業界Star數量排名第一!倉庫地址:https://github.com
    的頭像 發表于 07-04 08:35 ?726次閱讀
    <b class='flag-5'>RT-Thread</b> 新里程碑達成——GitHub Star 破萬!
    主站蜘蛛池模板: 99精品久久99久久久久久 | 欧美人与动性行为网站免费 | 亚洲成a人一区二区三区 | 亚洲第一页视频 | 黄色美女网站在线观看 | 午夜天堂影院 | 国产成人mv在线观看入口视频 | 欧美一区二区三区视频在线观看 | 亚洲一卡2卡4卡5卡6卡在线99 | 亚州黄色网址 | 视频在线观看网站免费 | 777午夜精品免费播放 | 久久久久久久国产 | 张柏芝三级无删减在线观看 | 日本一道高清不卡免费 | 中文字幕在线一区二区在线 | 婷婷激情狠狠综合五月 | 亚洲乱码一二三四区 | 色婷婷成人网 | 日本免费性 | 人人澡人人射 | 久久精品人人做人人看 | 色婷婷成人网 | 亚洲色图吧| 成人在线视频网 | 久久久噜噜噜久久中文字幕色伊伊 | www.五月天婷婷 | 国产 麻豆 欧美亚洲综合久久 | 91夜夜人人揉人人捏人人添 | 激情五月婷婷综合 | 欧美色吧视频在线观看 | 一区二区中文字幕 | 午夜小视频免费观看 | 男女互插小说 | 三级三级三级网站网址 | 国产精品国产三级国产普通话对白 | 在线免费成人 | 美女被免费网站视频九色 | 亚洲成片在线观看12345ba | 日韩毛片网站 | 2021天天操|