Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
cubemx
Env
keil_MDK
使用Env创建RT-Thread标准工程项目
发布于 2024-12-28 11:44:59 浏览:28
订阅该版
[tocm] # 标准工程管理 ## 选择BSP 获取 RT-Thread 源代码后需要根据自己手上的开发板MCU型号找到对应的 BSP,就可以运行 BSP 提供的默认工程。大部分 BSP 都支持 MDK﹑IAR 开发环境和 GCC 编译器,并且已经提供了默认的 MDK 和 IAR 工程。 此处以STM32为例进行操作说明搭建出一套适合自己开发板的项目框架。 在路径“rt-thread-5.0.2\bsp\stm32\libraries\templates”找到对应的MCU型号,复制到“rt-thread-5.0.2\bsp\stm32”文件夹下面。并重新命名“stm32f4xx_Test”。 ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20241228/2488209442fd01a9913b48dd1dab7df2.png.webp) ## 搭建项目框架 打开“stm32f4xx_Test”文件夹,在文件夹下打开Env工具,运行scons --dist 命令。使用此命令会在该 BSP 目录下生成 dist 目录,这便是开发项目的目录结构,RT-Thread 源码位于项目文件夹内,可以随意拷贝 dist 文件夹的工程到任何目录下使用。 ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20241228/ebbddfb844c99556d533b3bb356ab711.png.webp) ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20241228/d067d3cba75714e4f2f0767e891cbbb6.png.webp) 进入dist目录下面的 project工程目录,项目框架目录结构如下图所示: ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20241228/4247ca1f80cecfa38a213d733155604a.png.webp) 项目框架主要目录及文件的说明如下表所示: ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20241228/c4ff87b3fc059afd83e92ca1304ccca7.png.webp) ## 修改工程模版 根据自己的需求对工程做一些工程配置,比如配置 MCU 型号,设置调试选项等。建议大家直接修改工程模板,这样使用 Scons 相关命令生成的新工程也都会包含对模板的修改。MDK 的模板工程为 template.uvprojx。此处可修改MCU型号,Output选项,Debug选项等。 下图为修改 MDK 工程模板文件的芯片型号示例,选择相应 MCU 型号: ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20241228/369ba481d443917590dd77d033e26d2c.png.webp) 下图为根据自己使用的调试工具设置对应的调试选项: ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20241228/13b3b0cdf7047c82bb5997b5924c2ff7.png.webp) 下图为根据修改输出选项,相关配置修改完成后就可以关闭模板工程: ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20241228/29a61146c9c17e8e87b681f6b7ccaf9b.png.webp) # 配置和裁剪 RT-Thread 每个 BSP 下的工程都有默认的配置,比如系统内核支持的最大线程优先级、系统时钟频率、使用的设备驱动、控制台使用的串口等。RT-Thread 操作系统具有高度的可裁剪性,用户可以根据自己的需求使用 Env 工具进行配置和裁剪。 在 BSP (此处既是project目录下)目录下打开 Env,然后在使用 menuconfig 命令打开配置界面: ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20241228/e15d554c547b2ffa630a6aa731378cb4.png) ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20241228/7b7e467ea174441aea38c6c8c3860e19.png.webp) ## 生成工程 选择软件包后需要使用 pkgs --update 命令下载软件包,然后使用scons --target=mdk5 命令或者 scons --target=iar 命令生成 MDK 或者 IAR 工程。**如果大家直接修改 MDK 工程文件 project.uvprojx 或者 IAR 的工程文件 project.ewww 添加了自己的代码,或者修改了工程的一些基本配置,生成的新工程会覆盖之前对工程文件 project 的修改。** ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20241228/363a102fb3b484170ec21b1c6815cb33.png.webp) ## 添加文件到工程 BSP 下的 applications 文件夹用于存放自己的应用代码,目前只有一个 main.c 文件。如果应用代码不是很多,建议相关源文件都放在这个文件夹下面,本文在 applications 文件夹下新增了 2 个简单的文件 hello.c 和 hello.h。 ```c /* file: hello.h */ #ifndef _HELLO_H_ #define _HELLO_H_ int hello_world(void); #endif /* _HELLO_H_ */ ``` ```c /* file: hello.c */ #include
#include
#include
int hello_world(void) { rt_kprintf("Hello, world!\n"); return 0; } MSH_CMD_EXPORT(hello_world, Hello world!) ``` RT-Thread 将 main 函数作为了用户代码入口,只需要在 main 函数里添加自己的代码调用即可。 ```c #include
#include
#include "hello.h" int main(void) { /* user app entry */ hello_world(); return 0; } ``` **注:applications 文件夹下新增的 2 个文件需要使用 scons --target=xxx 命令生成新的工程,才会添加到工程项目中。每次新增文件都要重新生成工程。** 下图为应用程序 hello_world() 的调用结果: ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20241228/c65e229904f0a49bcf3dcf861867e4bc.png) ## 新增文件添加到工程说明 每个 BSP 的 applications 文件夹里都有一个 SConscript 文件,这些文件的功能都相似。RT-Thread 使用 SCons 构建系统,SCons 使用 SConscript 和 SConstruct 文件来组织源码结构。通常来说一个项目只有一个 SConstruct,但是会有多个 SConscript 。一般情况下,每个存放有源代码的子目录下都会放置一个 SConscript。 ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20241228/a70a4979ec42bc5d763bbfef8cc78e45.png.webp) 通过这个 SConscript 文件,applications 目录下的所有源文件和相关头文件目录就添加到了工程中,而不需要用户手动添加。执行Scons命令时自动添加。 ## 添加模块到工程 前文提到在自己源代码文件不多的情况下,建议所有源代码文件都放在 applications 文件夹里面。如果用户源代码很多了,并且想创建自己的工程模块,或者需要使用自己获取的其他模块,怎么做会比较合适呢?前文对 applications 文件夹里的 SConscript 文件做了简单介绍,这一小节将简单演示怎么实现自己的 SConscript 文件来管理工程文件。 ### 添加源代码 同样以上文提到的 hello.c 和 hello.h 为例,需要把他们作为一个单独的模块管理,并且在 MDK 或者 IAR 的工程文件里有自己的分组,且可以通过 menuconfig 选择是否使用这个模块。在 BSP 下新增 hello 文件夹。文件夹内Kconfig与SConscript为新增的文件。将在下面进行说明。 ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20241228/f429a7f026d1fc27b341e3d8ed471698.png) ### 编写SConscript文件 文件夹里多了一个 SConscript 文件,如果想要将自己的一些源代码加入到 SCons 编译环境中,一般可以创建或修改已有 SConscript 文件。SConscript 文件可以控制源码文件的加入,并且可以指定文件的 Group(与 MDK/IAR 等 IDE 中的 Group 的概念类似)。对于这个新增的 hello 模块 SConscript 文件内容如下,# 号后面的内容为注释。 ```python # -*- 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 的配置信息。 ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20241228/f7cac8c7e97a68d273b8e89b381a5d7d.png.webp) 在此目录下的Kconfig文件内添加“source "hello/Kconfig"” ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20241228/787094cedb8f2204a780810b1d9f2448.png.webp) 在hello文件夹内的Kconfig文件内添加如下内容: ```python menu "hello module" #菜单 hello module config RT_USING_HELLO #RT_USING_HELLO 配置选项 bool "Enable hello module" #RT_USING_HELLO 类型为bool类型,选中或者不选中,值为y或者n default n #RT_USING_HELLO 默认 n help #帮助信息,解释这个配置项的含义 this hello module only used for test config RT_HELLO_NAME #RT_HELLO_NAME 配置选项 string "Hello name" #RT_HELLO_NAME 类型为字符串 default "hello" #RT_HELLO_NAME 默认值为 hello config RT_HELLO_VALUE #RT_HELLO_VALUE 配置选项 int "Hello value" #RT_HELLO_VALUE 类型为int default 8 #RT_HELLO_VALUE 默认值为8 endmenu ``` 进入dist目录下面的 project工程目录,使用 menuconfig 命令在主页面最下面就可以看到新增的 hello 模块的配置菜单,进入菜单后如下图显示。 ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20241228/7323053411d3de88c729a1fa38b91d58.png) ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20241228/67802328941a9b10bdf68e49875c654c.png.webp) 保存配置后退出配置界面,打开 project 目录下的 rtconfig.h 文件可以看到 hello 模块的配置信息已经有了。 ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20241228/8b7b542b29dc12e1dd43265538c3a7a4.png.webp) **注:每次 menuconfig 配置完成后要使用 scons --target=XXX 生成新工程。** ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20241228/fc9421dd6058d4b22e96c088797cfef2.png) 打开新生成的 MDK5 工程文件 project.uvprojx 后可以看到新增一个 hello 分组,以及此分组下包含的 hello.c 文件。 ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20241228/1cffc0b8a647e657175708d9048071c1.png.webp)
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
Wade
这家伙很懒,什么也没写!
文章
1
回答
0
被采纳
0
关注TA
发私信
相关文章
1
用scons构建代码出现问题
2
求助用scons生成不了mdk工程
3
关于使用scons编译的问题
4
关于scons 编译CPP问题求教
5
scons编译出现警告信息
6
SCons生成MDK5工程出错
7
realtouch的scons问题
8
SCons的PreAction能用吗?
9
scons 编译时出错。
10
求教:关于scons构建rtt时的两个问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
freemodbus
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
Debug
中断
编译报错
rt_mq_消息队列_msg_queue
SFUD
keil_MDK
msh
ulog
MicroPython
C++_cpp
本月问答贡献
a1012112796
21
个答案
3
次被采纳
红枫
8
个答案
2
次被采纳
踩姑娘的小蘑菇
7
个答案
2
次被采纳
三世执戟
9
个答案
1
次被采纳
张世争
7
个答案
1
次被采纳
本月文章贡献
YZRD
3
篇文章
6
次点赞
catcatbing
3
篇文章
6
次点赞
lizimu
2
篇文章
12
次点赞
qq1078249029
2
篇文章
3
次点赞
xnosky
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部