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 编译即可

posted on 2019-01-17 00:18  杰瑞鼠  阅读(1433)  评论(0编辑  收藏  举报