RTT学习之BSP
一 根据相近型号的demo BSP进行修改制作自己的BSP,可以参考RT-Thread官方bsp的配置教程视频,STM32系列BSP制作教程.md
项目 | 需要修改的内容说明 |
---|---|
CubeMX_Config (文件夹) | CubeMX 工程:芯片型号,时钟源,下载方式,使能串口外设(只需要,为何?),配置时钟树,生成对应工程只是为了获得board/CubeMX_Config/Src/main.c下的SystemClock_Config()拷贝到board.c中 |
linker_scripts (文件夹) | BSP 特定的链接脚本 |
board.c/h | 系统时钟、GPIO 初始化函数、芯片存储器大小(根据具体芯片修改 FLASH 和 RAM 的相关参数) |
Kconfig | 芯片型号、系列、外设资源 |
SConscript | 芯片启动文件、目标芯片型号 |
修改工程模板 |
打开mdk或IAR修改芯片。调试下载方式等 |
二 。通过使能片上外设编写自己的板载外设,可以利用用板载的外设、内核资源/组件开发相应应用,利用片上外设加板级扩展模块也相当于板上外设级别
为 BSP 添加驱动时,STM32CubeMX 工具可以快速的完成使能外设和配置管脚的工作。而外设初始化,中断配置,DMA配置等等则由 RT-Thread 提供的驱动文件来完成。也就是说,虽然 STM32CubeMX 生成了多个文件用来初始化外设,但 RT-Thread 只使用了 STM32CubeMX 生成的 stm32fxx_hal_msp.c
文件(存放了在 CubeMX 工具中开启的外设驱动的配置代码)和 stm32fxx_hal_conf.h
文件(文件里提供的宏开关会决定 HAL 库将哪些外设驱动添加到工程中)。
SCons:是一套由 Python 语言编写SConstruct (一个项目一个)和 多个SConscript(每个源码目录都要有) 文件的开源构建系统,类似于 GNU Make(Make 通过读取 Makefile 文件来检测文件的组织结构和依赖关系,并完成 Makefile 中所指定的命令)和CMake;
每个BSP下都有三个文件:rtconfig.py、SConstruct 和 SConscript。
rtconfig.py 是一个 RT-Thread 标准的编译器配置文件,控制了大部分编译选项(指定编译器和编译参数)。
Kconfig 文件是各种配置界面的源文件。所有配置工具都是通过读取当前 bsp 目录下的 Kconfig 文件(包含其他目录的 Kconfig 文件)来生成配置界面的
Scons 官方文档,Scons 构建工具手册.
scons基本功能:
1 编译器:BSP 目录下的 rtconfig.py 里的 CROSS_TOOL 选项查看当前支持的编译器。因ENV默认使用的是 ARM GCC 编译器,所以arm处理器可以直接用scons进行编译而不需要指定编译器。对于非arm芯片或者编译器需要用命令指定(这样修改只对当前的 Env 进程有效,再次打开时又需要重新使用命令设置,我们可以直接修改 rtconfig.py 文件达到永久配置编译器的目的。一般来说,我们只需要修改 CROSS_TOOL 和下面的 EXEC_PATH 两个选项)。
set RTT_CC=keil
set RTT_EXEC_PATH=C:/Keilv5
2基本命令:
scons:增量编译。
scons -s:不打印具体命令。
scons -c:清除执行 scons 时生成的临时文件和目标文件。
scons --target=XXX
scons --dist搭建项目框架不相关的BSP文件夹及libcpu都会被移除,并且可以随意拷贝此工程到任何目录下使用。
3 内置函数:
Kconfig:
menuconfig 命令通过读取工程的各个 Kconfig 文件,生成配置界面供用户配置内核 ,最后所有配置相关的宏定义都会自动保存到 BSP 目录里的 rtconfig.h 文件中,每一个 BSP 都有一个 rtconfig.h 文件,再次使用 scons 命令就会根据新的 rtconfig.h 文件重新编译工程。
1 按照Kconfig语法修改BSP 目录下有 Kconfig 文件并保存
2 用menuconfig打开env进行配置,保存编译,配置会保存在rtconfig.h
3 语法:
menuconfig 这个语句和 config 语句很相似,但它在 config 的基础上要求所有的子选项作为独立的行显;
choice/endchoice 语句:将多个类似的配置选项组合在一起,供用户选择一组配置项;
prompt 给出提示信息;
comment 语句出现在界面的第一行,用于定义一些提示信息。
source 语句用于读取另一个文件中的 Kconfig 文件
如何在 menuconfig 隐藏一些 config:项目必须但又不希望该配置选项出现在 menuconfig 中,k-V的K只给类型不显示名字即可。
开发环境搭建:
1 下载git配置环境变量
2 下载env并进行右键配置
3 下载rt-thread源码,在bsp下找到相近芯片的工程用scons --dist导出
4 修改mdk的模板工程,适配自己的MCU和调试工具。
5 修改kconfig,用menuconfig打开env进行配置生成rtconfig.h
6 用scons进行编译测试
7 增加其它模块重复5~6
ENV的设置:Env 配置工具带有 SCons 和 Python,因此在 windows 平台使用 SCons 则不需要安装这两个软件,而其它环境ubunt需要安装scons:udo apt-get install scons.
命令进入 Env 配置界面
pkgs --upgrade 命令是用来升级 Env 功能脚本本身和软件包列表的
用户软件包管理功能:
对于已经开发过的工程维护时,我们不希望env自动帮我们下载最新版本的软件包,此时可以将软件包后面的版本删除,此时系统就会认为软件包版本由我们自己管理就不会自动更新除非pkgs --force-update
编译器和外部编辑器IDE:
一般在使用 Env 的开发,使用 gcc 的工具链,那么只需要一个 source insight 或者 vs code 之类的编辑器来看代码,使用 scons 编译即可