sj8zw8 发表于 2023-3-27 14:41

stm32cubemx生成不了keil工程文件_RTT 是如何管理和构建工程的?

前言rtthread 是一个功能强大,组件丰富的物联网操作系统。它相比于其他的 RTOS 的一个主要区别之一,也就是它不仅仅是一个实时内核,还具备丰富的中间层组件。那对于 rtt 来讲,它又是如何管理和构建工程的呢?下面笔者将从一个工程的目录结构开始来进行阐述。

工程目录结构下图是一个STM32f4 基于 rtt 的一个工程目录:




sj8zw8 发表于 2023-3-27 14:41

这个目录所包含的文件夹的具体功能也能够从其文件夹名得知,这里笔者简单的说一下:

    .vscode:这个 文件夹所包含的是当前 vscode 环境的一些设置,如果没有这个文件夹,那么在阅读代码的时候,就会出现好多头文件找不到的情况。

    applications:这个文件夹是用户应用程序所在的文件夹,main.c 就在这个文件夹下,如果用户的应用程序不是很多的情况下,那么都可以将其放到这个文件夹下。

    board:针对于 STM32 来讲,在使用 rtt 的时候,采用的是 CubeMX 来配置单片机外设的功能,这个文件夹存放的就是经过 CubeMX 配置之后的相关文件。

    libraries:在配置单片机外设的时候,我们无外乎会使用到单片机的库,针对于 STM32 来讲,存在标准库,也有 HAL 库,这里使用的是 HAL 库,所以这个文件夹下面存放的是 HAL 库的相关文件。

    packages:rtt 存在丰富的软件包,这个文件夹存放的就是我们使用的软件包的相关文件。

    rt-thread:这个文件夹存放的就是 rtt 内核以及组件的相关文件。

    rtconfig.h:这个是极为关键的一个文件,rtt 进行内核裁剪实际上也就是通过这个文件里的宏定义来关闭或者打开 rtt 所具备的功能。

sj8zw8 发表于 2023-3-27 14:44

rtconfig.h 文件配置

上述我们介绍了基于 rtt 的一个 STM32 的工程目录,紧接着我们来看 rtconfig.h 文件,这个文件里存放的全是宏定义,换句话说就是通过在这个文件里增加或者删减相关宏定义从而实现 rtt 的相关功能。最为直观的修改方法便是手动修改了,直接在 rtconfig.h 文件里敲代码解决。另一种方法便是 rtt 引入的一种自动修改的机制,也就是引入的 Env 工具,Env 工具如何使用就不在这里阐述了,官方文档有详细地介绍。那如何通过 Env 工具来配置 rtconfig.h 文件呢,通过在 Env 里输入 menuconfig 命令,会出现下图所示的界面,通过图形化的操作就可以实现相关的配置。

sj8zw8 发表于 2023-3-27 14:44

sj8zw8 发表于 2023-3-27 14:45

通过这个界面我们来选择要使用的组件以及相关的软件包,而上图这个界面里的内容又是和 kconfig 文件相对应的,也就是说我们可以通过 kconfig 文件来配置我们的 menuconfig 界面,然后通过 menuconfig 界面来配置及我们的 rtconfig.h 文件,举一个简单的例子说明这个问题,我们通过 CubeMX 配置了单片机的相关外设,那如果要在 rtt 中使用这个外设的相关功能,那么我们就需要在 rtconfig.h 中开启相关的宏定义,但是这个时候 menuconfig 中还没有关于这个外设的相关选项,那么就需要在 kconfig 文件里进行设置,假设我们要使用 GPIO 的功能,那么相关内容如下所示:

sj8zw8 发表于 2023-3-27 14:45



kconfig文件

sj8zw8 发表于 2023-3-27 14:46

menuconfig 界面所对应的内容如下图所示:

sj8zw8 发表于 2023-3-27 14:47

在 menuconfig 界面选择了之后,我们再来看 rtconfig.h 里对应的宏定义。

sj8zw8 发表于 2023-3-27 14:47

上图的左边是 kconfig 文件,右边是 rtconfig.h 文件,可以看到是一一对应的(RT_USING_PIN也是对应的,由于不在一个位置所以没有截图下来)。上述阐述了一个 kconfig 文件与 rtconfig.h 文件以及 menuconfig 之间的对应关系,但是一个工程存在好多个 kconfig 文件,运行 menuconfig 的时候又是如何找到各个 kconfig 文件的呢?整个过程是这样的,在当前工程的根目录存在一个 kconfig 文件,所在位置和内容如下图所示:

sj8zw8 发表于 2023-3-27 14:48

上图中红色方框里的内容就是其他 kconfig 文件的路径,因此这个文件是所有配置的总入口,通过它找到其他 kconfig 文件。

sj8zw8 发表于 2023-3-27 14:48

小结

上述简单叙述了一个 rtconfig.h 文件的配置过程,总结一下也就是在工程的根目录下使用 env 工具执行 menuconfig 命令时会出现 rtt 系统的配置界面,所有的配置选项都是通过读取工程根目录下的 kconfig 文件,然后通过此文件找到其他的 kconfig 文件,从而生成配置界面,然后通过选择配置界面的相关选项,从而实现在 rtconfig.h 文件里增添或者减少宏定义的目的。

sj8zw8 发表于 2023-3-27 14:49

scons

引用 rtt 文档中心的一句话来介绍 scons:

    scons 是一套由 Python 语言编写的开源构建系统,类似于 GNU Make,它采用不同于通常 Makefile 文件的方式,而是使用 SConstruct 和 SConscript 文件来替代。这些文件也是 Python 脚本,能够使用标准的 Python 语法来编写。所以在 SConstruct、SConscript 文件中可以调用 Python 标准库进行各类复杂的处理,而不局限于 Makefile 设定的规则。

sj8zw8 发表于 2023-3-27 14:49

使用 makefile 时,我们可以通过命令行输入 make 来编译工程,在使用 scons 时,同样的道理,我们也可以使用 scons 来编译工程,如图所示:

sj8zw8 发表于 2023-3-27 14:50

在 scons 的介绍里说,scons 通过 SConscript 和 SConstruct 文件来组织源码结构,而通常来说一个项目中只有一个 SConstruct,但是会存在多个 SConscript,SConstruct 所在的位置如下图所示:

sj8zw8 发表于 2023-3-27 14:50

可以看到 SConstruct 处在工程的根目录下,上图还标识了一个文件是 rtconfig.py ,这个文件的作用是为了使得 rtt 更好地支持多种编译器,以及方便地调整编译参数。再来看 SConscript ,一般来讲,每个存放着源代码的子目录下都会放置着一个 SConscript,如果想要将自己的一些源代码加入到 Scons 编译环境中,一般可以创建或修改已有的 SConscript,它可以控制源文件的加入,并且可以指定文件的 Group,如果是在 keil 或者 iar 中开发,那么通过 SConscript 文件就可以自动地添加文件或者增加 Group 到 keil 工程中,下面以 keil 工程为例说明,首先看对应的 SConscript 文件。

sj8zw8 发表于 2023-3-27 14:51

chenho 发表于 2023-3-27 19:09

这也行?

macpherson 发表于 2023-5-10 21:52

你可以使用RTT stuio开发stm32的。

iyoum 发表于 2023-5-11 19:07


用STM32CubeMx创建的FreeRTOS

everyrobin 发表于 2023-5-11 19:50

stm32cubemx支持freertos系统
页: [1] 2
查看完整版本: stm32cubemx生成不了keil工程文件_RTT 是如何管理和构建工程的?