0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RT-Thread 开发的目录名称与文件名称

lhl545545 来源:RTThread物联网操作系统 作者:RTThread物联网操作 2020-06-09 15:53 次阅读

这是一份 RT-Thread 开发人员的开发指引。RT-Thread 做为一份开源软件,它需要由不同 的人采用合作的方式完成,这份文档是开发人员的一个指引。RT-Thread 的开发人员请遵 守这样的编程风格。同时对于使用 RT-Thread 的用户,也可通过这份文档了解 RT-Thread 代码内部一些约定从而比较容易的把握到 RT-Thread 的实现方式。

1.目录名称

目录名称如果无特殊的需求,请使用全小写的形式;目录名称应能够反应部分的意思,例 如各芯片移植由其芯片名称构成或芯片类别构成;components 目录下能够反映组件的意义。

2.文件名称

文件名称如果无特殊的需求(如果是引用其他地方,可以保留相应的名称),请使用全小写 的形式。另外为了避免文件名重名的问题,一些地方请尽量不要使用通用化、使用频率高 的名称。

3.头文件定义

C语言头文件为了避免多次重复包含,需要定义一个符号。这个符号的定义形式请采用如下 的风格:

1 #ifndef __FILE_H__

2 #define __FILE_H__

3 /* header file content */

4 #endif

即定义的符号两侧采用 “__” 以避免重名,另外也可以根据文件名中是否包含多个词语而 采用 “_” 连接起来。

4.文件头注释

在每个源文件文件头上,应该包括相应的版权信息,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.结构体定义

结构体名称请使用小写英文名的形式,单词与单词之间采用 “_” 连接,例如:

1 struct rt_list_node

2 {

3 struct rt_list_node *next;

4 struct rt_list_node *prev;

5 };

其中,“{”,“}” 独立占用一行,后面的成员定义使用缩进的方式定义。

结构体等的类型定义请以结构体名称加上 “_t” 的形式作为名称,例如:

1 typedef struct rt_list_node rt_list_t;

因为内核中对象引用方便的缘故,采用了对象内核指针作为类型定义的形式,例如:

1 typedef struct rt_timer* rt_timer_t;

6.宏定义

在RT-Thread中,请使用大写英文名称作为宏定义,单词之间使用 “_” 连接,例如:

向滑动查看全部

1 #define RT_TRUE 1

7.函数名称、声明

函数名称请使用小写英文的形式,单词之间使用 “_” 连接。提供给上层应用使用的 API 接口,必须在相应的头文件中声明;如果函数入口参数是空,必须使用 void 作为入口参 数,例如:

1 rt_thread_t rt_thread_self(void);

8.注释编写

请使用英文做为注释,使用中文注释将意味着在编写代码时需要来回不停的切换中英文输 入法从而打断编写代码的思路。并且使用英文注释也能够比较好的与中国以外的技术者进 行交流。

源代码的注释不应该过多,更多的说明应该是代码做了什么,仅当个别关键点才需要一些 相应提示性的注释以解释一段复杂的算法它是如何工作的。对语句的注释只能写在它的上 方或右方,其他位置都是非法的。

9.缩进及分行

缩进请采用 4 个空格的方式。如果没有什么特殊意义,请在 “{” 后进行分行,并在下一 行都采用缩进的方式,例如:

1 if (condition)

2 {

3 /* others */

4 }

唯一的例外是 switch 语句,switch-case 语句采用 case 语句与 switch 对齐的方式, 例如:

1 switch (value)

2 {

3 case value1:

4 break;

5 }

case 语句与前面的 switch 语句对齐,后续的语句则采用缩进的方式。

分行上,如果没有什么特殊考虑,请不要在代码中连续使用两个以上的空行。

10.大括号与空格

从代码阅读角度,建议每个大括号单独占用一行,而不是跟在语句的后面,例如:

1 if (condition)

2 {

3 /* others */

4 }

匹配的大括号单独占用一行,代码阅读起来就会有相应的层次而不会容易出现混淆的情况。

空格建议在非函数方式的括号调用前留一个空格以和前面的进行区分,例如:

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 语句),而运算表达式 中,运算符与字符串间留一个空格。另外,不要在括号的表达式两侧留空格,例如:

1 if ( x 《= y )

2 {

3 /* other */

4 } /* others */

5 }

这样括号内两侧的空格是不允许的。

11.trace、log信息

在 RT-Thread 中,普遍使用的 log 方式是 rt_kprintf。rt_kprintf 在 RT-Thread 被实 现成一个采用轮询、非中断方式的字串输出,能够适合于在中断这类“即时”显示日志的场 合。因为这种轮询方式的存在,也必然会影响到日志输出的时序关系。

建议在代码中不要频繁的使用 rt_kprintf 作为日志输出,除非你真正的明白,你的代码 运行占用的时间多一些也没什么关系。

日志输出应该被设计成正常情况下是关闭状态(例如通过一个变量或宏就能够开启),并且 当真正输出日志时,日志是易懂易定位问题的方式。“天书式”的日志系统是糟糕的,不合 理的。

12.函数

在内核编程中,函数应该尽量精简,仅完成相对独立的简单功能。函数的实现不应该太长 ,函数实现太长,应该反思能够如何修改(或拆分)使得函数更为精简、易懂。

13.对象

RT-Thread 内核采用了 C 语言对象化技术,命名表现形式是:对象名结构体表示类定义、 对象名 + 动词短语形式表示类方法,例如:

1 struct rt_timer

2 {

3 struct rt_object parent;

4 /* other fields */

5 };

6 typedef struct rt_timer* rt_timer_t;

结构体定义 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 + 动词短语的形式表示能够应用于 timer 对象的方法。

在创建一个新的对象时,应该思考好,对象的内存操作处理:是否允许一个静态对象存在 ,或仅仅支持从堆中动态分配的对象。
责任编辑:pj

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开源软件
    +关注

    关注

    0

    文章

    207

    浏览量

    15796
  • RT-Thread
    +关注

    关注

    31

    文章

    1240

    浏览量

    39491
收藏 人收藏

    评论

    相关推荐

    2024 RT-Thread全球巡回 线下培训火热来袭!

    亲爱的RT-Thread社区成员们:我们非常高兴地宣布,2024年RT-Thread全球开发者线下培训即将拉开帷幕!24年全球巡回培训将覆盖超10座城市及国家,为开发者提供一个深入学习
    的头像 发表于 08-07 08:35 404次阅读
    2024 <b class='flag-5'>RT-Thread</b>全球巡回 线下培训火热来袭!

    【好书推荐】RT-Thread设备驱动开发指南

    近年来国内芯片产业和物联网产业的快速崛起,行业发展迫切需要更多人才,尤其需要掌握嵌入式操作系统等底层技术的人才。随着RT-Thread被更广泛地应用于行业中,开发者对嵌入式驱动开发的需求越来越
    的头像 发表于 08-01 08:35 318次阅读
    【好书推荐】<b class='flag-5'>RT-Thread</b>设备驱动<b class='flag-5'>开发</b>指南

    开发者分享 | 基于先楫RT-Thread BSP,使用CLion开发应用

    本期开发者:朱彦祖RT-Thread资深工程师,HPM6700/6400元老级开发者及骨灰级用户,先辑生态社区常驻优秀开发者,江湖人称杭州吴彦祖。背景最近在使用先辑HPM6750
    的头像 发表于 06-07 08:17 2195次阅读
    <b class='flag-5'>开发</b>者分享 | 基于先楫<b class='flag-5'>RT-Thread</b> BSP,使用CLion<b class='flag-5'>开发</b>应用

    使用FATFS中fopen函数创建新文件名称时,有什么方法可以增加字符长度吗?

    在使用FATFS中fopen函数创建新文件名称时,发现txt文件名长度不能超过8个英文字符,请问有什么方法可以增加字符长度吗?在文件系统中的哪个位置去更改参数呢?
    发表于 03-28 08:39

    RT-Thread设备驱动开发指南》基础篇--以先楫bsp的hwtimer设备为例

    一、概述(一)RT-Thread设备驱动《RT-Thread设备驱动开发指南》书籍是RT-thread官方出品撰写,系统讲解RT-threa
    的头像 发表于 02-24 08:16 1008次阅读
    《<b class='flag-5'>RT-Thread</b>设备驱动<b class='flag-5'>开发</b>指南》基础篇--以先楫bsp的hwtimer设备为例

    RT-Thread设备驱动开发指南基础篇—以先楫bsp的hwtimer设备为例

    RT-Thread设备驱动开发指南》书籍是RT-thread官方出品撰写,系统讲解RT-thread IO设备驱动开发方法,从三方面进行讲解
    的头像 发表于 02-20 16:01 1427次阅读
    <b class='flag-5'>RT-Thread</b>设备驱动<b class='flag-5'>开发</b>指南基础篇—以先楫bsp的hwtimer设备为例

    【PSoC™62 for RT-ThreadRT-Thread携手英飞凌举办嵌入式网络应用开发沙龙,圆满落幕!

    2023年12月09日,深圳,全球半导体解决方案的领导者英飞凌科技(中国)有限公司(以下简称:英飞凌)与上海睿赛德电子科技有限公司(RT-Thread)在深圳塘朗联合举办了“嵌入式网络应用开发”为主
    的头像 发表于 12-14 16:25 469次阅读
    【PSoC™62 for <b class='flag-5'>RT-Thread</b>】<b class='flag-5'>RT-Thread</b>携手英飞凌举办嵌入式网络应用<b class='flag-5'>开发</b>沙龙,圆满落幕!

    RT-thread源码移植到STM32F10x和STM32F4xx

    v2.1.0的稳定版本。   解压后的源码目录结构:   基本内核的移植只需要关心目录-bsp、include、libcpu、src。   二、开始移植 1、文件拷贝 -- F:RT-Thre
    的头像 发表于 11-15 09:38 2103次阅读
    <b class='flag-5'>RT-thread</b>源码移植到STM32F10x和STM32F4xx

    上海线下培训:RT-Thread×先楫 HPM5300 for RT-Thread ,高性能 RISC-V 平台开发快速上手

    RT-Thread的代表性产品和服务。 同时,我们也邀请到先楫的资深工程师杨帆,他将为开发者们带来期待已久的热门技术主题培训,RT-Thread×先楫 HPM5300 for RT-Thre
    的头像 发表于 11-03 19:10 642次阅读
    上海线下培训:<b class='flag-5'>RT-Thread</b>×先楫  HPM5300 for <b class='flag-5'>RT-Thread</b> ,高性能 RISC-V 平台<b class='flag-5'>开发</b>快速上手

    rt-studio潘多拉开发板最新rt-thread不能运行解决办法

    rt-studio 上 选择基于开发板的项目,选择潘多拉,rt-thread选择lasted ,如下图
    的头像 发表于 10-16 14:50 1120次阅读
    <b class='flag-5'>rt</b>-studio潘多拉<b class='flag-5'>开发</b>板最新<b class='flag-5'>rt-thread</b>不能运行解决办法

    基于rt-thread的socket通信设计

    最近再研究 rt-thread 的通信 ,想设计出 eps8266(多个) rt-thread(作为中控) 服务器的通信框架,使用的开发板是 潘多拉
    的头像 发表于 10-13 15:02 1129次阅读
    基于<b class='flag-5'>rt-thread</b>的socket通信设计

    RT-Thread使用Soft RTC(软件模拟RTC)

    开发环境:野火的stm32f407,rt-thread studio版本是版本: 2.2.6,rt-thread 使用版本为4.0.3,stm32f4的资源包为0.2.2。
    的头像 发表于 10-12 17:39 592次阅读
    <b class='flag-5'>RT-Thread</b>使用Soft RTC(软件模拟RTC)

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

    开发环境:野火的stm32f407,rt-thread studio版本是版本: 2.2.6,stm32f4的资源包为0.2.2,rt-thread版本为4.0.3。
    的头像 发表于 10-12 12:49 1091次阅读
    <b class='flag-5'>RT-Thread</b>移植使用webserver (lwip+httpd)

    试用RT-Thread Studio(VSCode)

    想尝试RT-Thread studio (VSCode),先下载安装VSCode,再搜索RT-Thread
    的头像 发表于 10-12 10:58 919次阅读
    试用<b class='flag-5'>RT-Thread</b> Studio(VSCode)

    RT-Thread v5.0.2 发布

    RT-Thread 代码仓库地址: ●  https://github.com/RT-Thread/rt-thread RT-Thread 5.0.2 版本发布日志详情: ●  htt
    的头像 发表于 10-10 18:45 1219次阅读
    <b class='flag-5'>RT-Thread</b> v5.0.2 发布