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的配置信息。

相关推荐

  1. Django学习全纪录:Django开发环境

    2024-04-24 09:46:01       55 阅读
  2. ODrive学习笔记一:开发环境

    2024-04-24 09:46:01       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-24 09:46:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-24 09:46:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-24 09:46:01       82 阅读
  4. Python语言-面向对象

    2024-04-24 09:46:01       91 阅读

热门阅读

  1. css设置子元素在父元素中水平垂直居中

    2024-04-24 09:46:01       35 阅读
  2. [网络编程]socket嵌套字的一些常用接口

    2024-04-24 09:46:01       30 阅读
  3. equals和==有什么区别?

    2024-04-24 09:46:01       39 阅读
  4. Redis基础应用篇-快速面试笔记(速成版)

    2024-04-24 09:46:01       95 阅读
  5. AtCoder Beginner Contest 146 C - Buy an Integer

    2024-04-24 09:46:01       145 阅读