RTT学习 开发环境搭建

embedded/2024/11/15 8:33:58/

添加文件到工程

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 变量 srcif GetDepend(['RT_USING_HELLO']):   # hello.c 依赖宏 RT_USING_HELLOsrc += ['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的配置信息。


http://www.ppmy.cn/embedded/16019.html

相关文章

MySQL中explain的用法

执行结果各字段的含义 EXPLAIN SQL语句 如: EXPLAIN SELECT * FROM test 执行结果: 列名描述id在一个大的查询语句中每个SELECT关键字都对应一个 唯一的idselect_typeSELECT关键字对应的那个查询的类型table表名partitions匹配的分区信息type针对单表…

刷题DAY60 | LeetCode 84-柱状图中最大的矩形

84 柱状图中最大的矩形(hard) 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 思路:1.双指针法 2. 单调栈 详细解…

CSS导读 (CSS的三大特性 上)

(大家好,今天我们将继续来学习CSS的相关知识,大家可以在评论区进行互动答疑哦~加油!💕) 目录 五、CSS的三大特性 5.1 层叠性 5.2 继承性 5.2.1 行高的继承 5.3 优先级 小练习 五、CSS的三大特性 …

【JS】react antd 项目如何让Table组件表格滚动播放

目录 实现原理如何判断是否滚到到底部?停止和开始滚动的控制优化滚动体验 实现原理 某个函数实现向下滚动1个像素效果,使用setInterval每隔1秒都调用这个函数,就实现了滚动的效果。 init () > {const that this;this.timeInterval se…

每日学习笔记:C++ STL算法之移除容器元素

本文API 移除元素 remove(beg, end, value) remove_if(beg, end, op) remove_copy(sourceBeg, sourceEnd, destBeg, value) remove_copy_if(sourceBeg, sourceEnd, destBeg, op) 移除连续重复的元素 unique(beg, end) unique(beg, end, op) unique_copy(sourceBeg, sourceEnd, …

java-反射

简介 获取class对象的API // 1. 通过类名.class Class<Student> clazz Student.class; System.out.println(clazz.getName());// 2. 通过Class.forName()方法 Class<?> clazz2 null; try {clazz2 Class.forName("com.reflect.Student");System.out.p…

爱普生RX-8130CE内置电池控制 RTC

特点&#xff1a;(1)封装极小&#xff0c;集成度高RX-8130CE是一个带|2C接口的实时时钟模块&#xff0c;内部集成32.768KHz晶体振荡器。实时时钟功能不仅集成了年、月、日、星期、小时、分、秒的日历和时钟计数器&#xff0c;同时也有时间闹钟、间隔定时器、时间更新中断等功能…

钡铼IOy系列模块在智能装备制造中发挥重要作用提升整体效能

随着科技的不断发展&#xff0c;智能装备制造已经成为推动工业进步的重要力量之一。在智能装备制造领域&#xff0c;钡铼IOy系列模块在智能装备制造中起关键作用&#xff0c;对生产效率、产品质量和工厂管理也有一定的影响。 首先&#xff0c;钡铼IOy系列模块在智能装备制造中…