作者:架构师李肯
前言
RT-Thread 编程风格
1.目录名称
2.文件名称
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};1typedefstructrt_list_nodert_list_t;1typedefstructrt_timer*rt_timer_t;
6.宏定义
1#defineRT_TRUE17.函数名称、声明
1rt_thread_trt_thread_self(void);
1/*IPCobjectinit*/
2staticrt_err_t_ipc_object_init()
3
4/*UARTdriverops*/
5staticrt_err_t_uart_configure()
6staticrt_err_t_uart_control()1intrt_hw_uart_init(void)
2intrt_hw_spi_init(void)8.注释编写
1/*你的英文注释*/注释模版请参见: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.缩进及分行
1if(condition)
2{
3/*others*/
4}1switch(value)
2{
3casevalue1:
4break;
5}10.大括号与空格
1if(condition)
2{
3/*others*/
4}1if(x<= y)
2{
3/*others*/
4}
5
6for(index=0;index< MAX_NUMBER; index ++)
7{
8/*others*/
9}1if(x<= y )
2{
3/*other*/
4}
11.trace、log信息
12.函数
13.对象
1structrt_timer
2{
3structrt_objectparent;
4/*otherfields*/
5};
6typedefstructrt_timer*rt_timer_t;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);14.格式化代码
使用 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 格式化
将源文件编码统一为 UTF-8
将 TAB 键替换为 4 空格
将每行末尾多余的空格删除,并统一换行符为 ‘ ’
RT-Thread开发者大会
我们将联合重量级合作伙伴,围绕AIoT的发展、产业技术趋势,聚焦控制、连接、行业应用开发,通过主题演讲、技术分享、应用演示等环节,助力开发者探索万物智能的世界,期待与大家一起相聚线上直播间!

本次将在大会当天在直播间宣布中奖名单
更多奖品即将来袭...
你可以添加微信17775982065为好友,注明:公司+姓名,拉进RT-Thread官方微信交流群!

爱我就给我点在看
点击阅读原文进入报名
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
RT-Thread
+关注
关注
32文章
1644浏览量
45248
原文标题:RT-Thread 编程风格
文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
让 RT-Thread 用上 HyperRAM——e2studio 工程配置详解 | 技术集结
的帖子中介绍如何在e2sutido中结合RT-Thread的代码仓库(使用的是最新的RT-Thread版本),在e2stduio中调试和下载RT-Thread工程。配
恩智浦亮相RT-Thread 20周年开发者大会
日前,“开源向实·生产力进化启示录”全球峰会暨RT-Thread 20周年开发者大会在上海成功举办,恩智浦作为RT-Thread的紧密合作伙伴,在活动中重磅亮相,展示双方在共建RT-Thread OS开发生态方面的新成果、新方案
首搭RT-Thread程翧车控平台| RT-Thread程翧 S32K344 快速原型开发平台正式上市!| 产品动态
在智能汽车迈向高集成与高安全的时代,VCU/ECU开发正面临效率与可靠性的双重考验。依赖单一硬件或拼凑软件方案的传统模式,已成为制约创新的瓶颈。为此,RT-Thread带来里程碑式的解决方案
rt-thread studio 导入BSP 失败怎么解决?
rt-thread studio 手动导入bsp 失败。
版本: 2.2.8
构建ID: 202405200930
导入的bsp 是直接从rt-thread 代码仓库下载的
.log
发表于 10-11 11:07
2025年RT-Thread开发者巡回培训报名正式启动!
亲爱的RT-Thread社区成员们:新程再启,共赴热爱!2025年RT-Thread开发者巡回培训正式启动报名!今年,我们选择了西安、武汉、北京、杭州、深圳、上海、成都这7座城市,为大家带来
rt-thread studio 2.2.9如何使用最新的RT-Thread v5.2.0 released?
rt-thread studio2.2.9如何使用最新的RT-Thread v5.2.0 released?
原先以为修改index_all.json,发现联网的时候,会自动覆盖
另lastet版本
发表于 09-16 06:06
在Ubuntu上开发基于先楫MCU的RT-Thread应用指南
1、前言RT-ThreadEnv是RT-Thread推出的开发辅助工具,针对基于RT-Thread操作系统的项目工程,提供编译构建环境、图形化系统配置及软件包管理功能。其内置的menuconfig
【好书推荐】RT-Thread第20本相关书籍!《嵌入式实时操作系统RT-Thread原理与应用》| 技术集结
01内容简介ContentSummary本书为读者提供了一个全面、系统的RT-Thread学习指南,旨在帮助初学者及有经验的开发者掌握RT-Thread实时操作系统和STM32嵌入式微控制器的核心
RT-Thread 遇上 Rust:安全内核 RusT-Thread 的诞生
大家好,我们是中国科学技术大学操作系统原理与设计(H)课oooooS小组。这个项目是我们的课程大作业:参考RT-Thread架构,使用Rust搭建一个原生的嵌入式操作系统内核。初识Rust是因为xk
RT-Thread荣获2025优秀开源项目 | 新闻速递
6月底,RT-Thread睿赛德受邀参与由上海开源信息技术协会主办的2025上海开源创新精英荟。上海市商委副主任张杰出席会议并致辞。RT-Thread嵌入式操作系统项目凭借其卓越的技术创新与开源生态
深度剖析 RT-Thread 线程调度流程
RT-Thread调度第一个线程的主要流程分如下:rtthread_startup:RTT的启动函数,主要负责板级驱动,调度器,系统线程初始化,启动调度的工作
揭秘RT-Thread上的AUTOSAR CP系统
本文探讨了RT-Thread与AUTOSARCP的融合,解决车载ECU开发中实时性、安全性与灵活性的平衡问题。通过分层安全内核(rt-safetyos/autoos)和工具链整合,兼容AUTOSAR
2025 RT-Thread全球技术大会议程正式发布!
RT-ThreadGlobalTechConference(RT-ThreadGTC,RT-Thread全球技术大会)是聚焦基础软件技术创新与实践的嵌入式技术盛会,持续推动技术价值转化
【直播预告】《实时操作系统应用技术—基于RT-Thread与ARM的编程实践》教学脉络及资源简介
直播预告直播主题:《实时操作系统应用技术—基于RT-Thread与ARM的编程实践》教学脉络及资源简介开放时间:2025年5月29日(周四)20:00主讲老师:王宜怀课程类型:视频直播观看平台
RT-Thread审核团招募: 深度参与开源RTOS社区治理与演进
全球开发者招募:RT-Thread审核团(ReviewTeam)正式开放申请!在开源的世界里,代码审查(CodeReview)是保证软件质量、促进技术交流的关键环节。RT-Thread作为全球领先
RT-Thread 编程风格
评论