作者:架构师李肯
前言
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_TRUE1
7.函数名称、声明
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
+关注
关注
31文章
1272浏览量
39908
原文标题:RT-Thread 编程风格
文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论