RTT工具学习
RT-Thread Studio作为一个开发工具软件,需要一个从了解到熟悉,从熟悉再到熟练应用的过程,特别是对于以前没有用过基于eclipse的开发工具的用户,还是需要先熟悉软件基本使用方法和主要功能入口,然后开发项目。
RT-Thread构建与配置系统
- Kconfig:kernel config配置文件(提供系统的配置裁剪功能)
- SCons:构建工具
- env工具:主要提供构建系统所需的各种环境变量以及软件包的管理
Kconfig
C语言项目的裁剪配置本质上是通过条件编译和宏的展开来实现的,RT-Thread借助Kconfig这套机制能更方便的实现这一功能。
以Env工具的使用为例。
Kconfig机制包括了Kconfig文件和配置UI界面(如menuconfig,pyconfig等)。
- Kconfig文件中的配置项会映射至rtconfig.h中。
- Kconfig文件可以随源码分散至各级子目录,便于灵活修改。
.config片段
CONFIG_RT_USING_TIMER_SOFT=y
CONFIG_RT_TIMER_THREAD_PRIO=4
CONFIG_RT_TIMER_THREAD_STACK_SIZE=512
CONFIG_RT_DEBUG=y
相对应的rtconfig.h片段
#define RT_USING_TIMER_SOFT
#define RT_TIMER_THREAD_PRIO 4
#define RT_TIMER_THREAD_STACK_SIZE 512
#define RT_DEBUG
Kconfig文件在源码中呈现树形结构,需要在工程的根目录下存在一份顶层Kconfig文件,顶层Kconfig文件在文件中通过source语句显示调用各子目录下的Kconfig文件。
Env在根目录下执行menuconfig命令后会递归解析各级Kconfig文件,然后提供配置界面,完成相应的配置后并保存,根目录下会存在一份.config文件保存当前选择的配置项,并将.config文件转为RT-Thread的系统配置文件rtconfig.h。
Kconfig源于Linux内核的配置构建系统,当前只介绍RTT中的常用语法。
采用#作为注释标记符
config定义了一组新的配置选项
config BSP_USING_GPIO
bool "Enable GPIO"
select RT_USING_PIN
default y
help
config gpio
语句分析:
- config表示一个配置选项的开始,紧跟着的BSP_USING_GPIO是配置选项的名称。
- config下面几行定义了该配置选项的属性。属性可以是该配置选项的。
- bool 表示配置选项的类型,每个config菜单项都要有类型定义,变量有5种类型。
- select是反向依赖的关系,即当前配置选项被选中,RT_USING_PIN就会被选中。
通过env选中以上配置界面的选项后,最终在rtconfig.h文件中生成如下两个宏:
#define RT_USING_PIN
#define BSP_USING_GPIO
config RT_CONSOLE_DEVICE_NAME
string "the device name for console"
default "uart1"
以上配置项在rtconfig.h文件中生成的宏为
#define RT_CONSOLE_DEVICE_NAME "uart1"
config BSP_I2C1_SCL_PIN
int "I2C1 scl pin number"
range 1 176
default 116
#define BSP_I2C1_SCL_PIN 116
menu语句用于生成菜单,menu之后的字符串是菜单名。
menu和endmenu间有很多config语句。
menu "Hardware Drivers Config"
menuconfig BSP_USING_CAN
bool "Enable CAN"
default n
select RT_USING_CAN
if BSP_USING_CAN
config BSP_USING_CAN1
bool "Enable CAN1"
default n
endif
endmenu
当没有选中“Enable CAN”选项时,if判断的选项并不会显示出来。
menuconfig这个语句和config语句很相似,但它在config的基础上要求所有的子选项作为独立的行显示。
构建工具
构建工具(software construction tool)是一种软件,它可以根据一定的规则或指令,将源代码编译成可执行的二进制程序,这是构建工具最基本也是最重要的功能。
实际上构建工具的功能不止于此,通常这些规则有一定的语法,并组织成文件。这些文件用来控制构建工具的行为,在完成软件构建之外,也可以做其它事情。
目前最流行的构建工具是GNU Make。很多知名开源软件,如Linux内核就采用Make构建。Make通过读取Makefile文件来检测文件的组织结构和依赖关系,并完成Makefile中所指定的命令。
由于历史原因,Makefile的语法比较混乱,不利于初学者学习。此外,在Windows平台上使用Make也不方便,需要安装Cygwin环境。为了克服Make的种种确定,人们开发了其它构建工具,如CMake和SCons等。
RT-Thread构建工具
RTT早期使用Make/Makefile构建。
从RTT 3.0开始,RT-Thread开发团队逐渐引入了SCons构建系统,引入SCons唯一的目的是:使大家从复杂的Makefile配置、IDE配置中脱离出来,把精力集中在RTT功能开发上。
IDE通过图形化界面的操作完成构建,大部分IDE会根据用户添加的源码生成类似Makefile或SConscript的脚步文件,在底层调用类似Make或SCons的工具来构建源码。
SCons
SCons是一套由Python语言编写的开源构建系统,类似于GNU Make。
它采用不同于通常Makefile文件的方式,而是使用SConstruct和SConscript文件来替代。这些文件是Python脚本,能够使用标准的 Python 语法来编写。所以在 SConstruct、SConscript 文件中可以调用 Python 标准库进行各类复杂的处理,而不局限于 Makefile 设定的规则。
SCons使用SConscript和SConstruct文件来组织源码结构并进行构建,SConstruct是scons构建的主脚本,SConscript存放在源代码的子目录下,以达到分层构建的目的。
一个项目只有一个SConstruct,但会有多个SConscript,一般情况下,每个存放有源代码的子目录下都会放置一个SConscript。
/
-- rtconfig.py ---- 控制SCons构建的配置文件,存放了如工具链,构建参数等配置。
-- SConscript
-- SConstruct ---- SCons的入口脚本,初始化了SCons构建rt-thread所需的必要环境
-- Kconfig ---- 顶层Kconfig文件,menuconfig的入口Kconfig文件
-- rt-thread/
--- src/
---- SConscript ---- 各级源码的scons子脚本,控制当前级别下的源码构建行为
---- Kconfig ---- 各级源码的Kconfig子脚本,存放当前级别下的配置项
---- **.c
为了方便开发者使用SCons,RTT构建了如图所示的构建框架,rtconfig.py是控制SCons构建的配置文件,存放了如工具链,构建参数等配置。
Env开发工具
Env是RTT推出的开发辅助工具,针对基于RTT操作系统的项目工程,提供编译构建环境、图形化系统配置以及软件包管理功能。
其内置的menuconfig提供了简单易用的配置裁剪工具,可对内核、组件和软件包进行自由裁剪,使系统以搭积木的方式进行构建。
- menuconfig图形化配置界面,交互性好,操作逻辑强;
- 丰富的文字帮助说明,配置无需查阅文档;
- 使用灵活,自动处理依赖,功能开关彻底;
- 自动生成rtconfig.h,无需手动修改;
- 使用Scons工具生成工程,提供编译环境,操作简单;
- 提供多种软件包,模块化软件包耦合关联少,可维护性好;
- 软件包可在线下载,软件包持续集成,包可靠性高。
scons --dist:搭建项目框架,使用此命令会在BSP目录下生成dist目录,这便是开发项目的目录结构,包含了RT-Thread源码及BSP相关工程,不相关的BSP文件夹及libcpu都会被移除,并且可以随意拷贝此工程到任何目录下使用。