RTT学习 开发环境搭建

添加文件到工程

BSP下的applications文件夹用于存放用户自己的应用代码,目前只有一个main.c文件,如果用户的应用代码不是很多,建议相关源文件都放在这个文件夹下面,在applications文件夹下新增两个简单的文件hello.c和hello.h。

applications文件夹下新增的2个文件需要使用scons --target=xxx命令生成新的工程,才会添加到工程项目中。每次新增文件都要重新生成工程。

applications文件夹下新增的文件是怎么样添加到工程中的呢?每个BSP的applications文件夹里都有一个SConscript文件,这些文件的功能都相似。

RTT使用SCons构建系统,SCons使用SConscript和SConstruct文件来组织源码结构。通常来说一个项目只有一个SConstruct,但是会有多个SConscript。一般情况下,每个存放有源代码的子目录下都会放置一个SConscript。

SConscript文件是使用Python语言编写,applications文件夹里面的内容如下:

Import('RTT_ROOT')
Import('rtconfig')
from building import *

# str(Dir('#') 表示获取工程的 SConstruct 所在的目录, 也就是 D:\repository\rt-thread\bsp\stm32f4xx-HAL
# os.path.join() 表示将 `str(Dir('#')` 表示的目录和 applications 一起拼接成一个完整目录。
# 也就是获得当前目录 `D:\repository\rt-thread\bsp\stm32f4xx-HAL\applications`
cwd     = os.path.join(str(Dir('#')), 'applications')

# 获取当前目录下所有的 C 文件
src = Glob('*.c')

# 将当前目录和 SConstruct 所在的目录保存到 list 变量 CPPPATH 中
CPPPATH = [cwd, str(Dir('#'))]

# 将 src 包含的源文件创建为 Applications 组。depend 为空表示该组不依赖 rtconfig.h 中的任何宏。
# CPPPATH = CPPPATH 表示将右边 CPPPATH 变量包含的目录添加到系统的头文件路径中,左边的 CPPPATH 表示头文件路径。
# 这个 Applications 组也就对应 MDK 或者 IAR 工程里面的 Applications 分组。
group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH)

Return('group')

通过这个SConscript文件,applications目录下的所有源文件和相关头文件目录就添加到了工程中,而不需要用户手动添加。

添加模块到工程

前文提到在自己源代码不多的情况下,建议所有源代码文件都放在applications文件夹里面。

同样以上文提到的hello.c和hello.h为例,需要把他们作为一个单独的模块管理,并且在MDK或者IAR的工程文件里有自己的分组,且可以通过menuconfig选中是否使用这个模块。在BSP下新增hello文件夹。

在这里插入图片描述
注意文件夹里多了一个SCoscript文件,如果想要将自己的一些源代码加入到SCons编译环境中,一般可以创建或修改已有SConscript文件。
SConscript 文件可以控制源码文件的加入,并且可以指定文件的 Group(与 MDK/IAR 等 IDE 中的 Group 的概念类似)。对于这个新增的 hello 模块 SConscript 文件内容如下,# 号后面的内容为注释。

# -*- coding: UTF-8 -*-             # 指定文件的编码格式是 UTF-8,文件可以用中文
Import('RTT_ROOT')
Import('rtconfig')
from building import *

cwd          = GetCurrentDir()      # 将当前路径赋值给字符串 cwd
include_path = [cwd]                # 将当前头文件路径保存到 list 变量 include_path 中
src          = []                   # 定义一个 list 变量 src

if GetDepend(['RT_USING_HELLO']):   # hello.c 依赖宏 RT_USING_HELLO
    src += ['hello.c']              # 保存 hello.c 字符串到 list 变量 src 中

# 将 src 包含的源文件创建为 hello 组。depend 为空表示该组不依赖 rtconfig.h 的任何宏。
# CPPPATH = include_path 表示将当前目录添加到系统的头文件路径中
group = DefineGroup('hello', src, depend = [''], CPPPATH = include_path)

Return('group')

通过上面几行简单的python代码就创建了一个新的hello分组,并且可以通过宏定义控制要加入到组里面的源文件。

增加menuconfig菜单

那么自定义宏RT_USING_HELLO又是通过怎样的方式定义呢?
这里要介绍一个新的文件Kconfig。
Kconfig用来配置内核,menuconfig命令通过读取工程的各个KConfig文件,生成配置界面供用户配置内核,最后所有配置相关的宏定义都会自动保存到BSP目录里的rtconfig.h文件中,每个BSP都有一个rtconfig.h文件,这也就是BSP的配置信息。

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

饼干饼干圆又圆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值