rt-thread Env 预处理配置方法

简介

rt-thread 是我非常喜欢的一款RTOS,近期在使用Env更新工程的时候发现,keil MDK 中的预处理型号和器件型号不符。

这就导致我每次更新工程后都需要进入keil MDK手动修改一下。这显然是一个无聊的操作,于是有了这篇随笔。

实际上如果你系统,仔细的学习完RTT官方的一些资料,其实该问题的解决办法非常简单。在此,我仅使用该问题展示一下解决该类问题的思路。

开始

我的MCU为F405,于是我选择了一个F405的BSP模板进行开发。但是,当Env更新完工程后,keil MDK中的预处理总是写着 STM32F407xx。

我的第一想法是修改 keil MDK的模板,如下:

但是Env更新工程后,还是被修改成了 STM32F407xx。

image-20211119184544932

于是,我就知道不是模板这里能改的,可能是定义在某处,然后Env读取并填入。这种猜测并不是因为我解决了该问题才知道,而是往往该类参数都是以字段(字符串)等明文方式定义的。

猜测有了, 接下来就需要借助工具来搜索一下哪些文件中含有 STM32F407xx, CLK_TCK=RT_TICK_等字符串。

这里我使用的是 [FileSeek](Download • FileSeek by Binary Fortress Software) , 经过查找,结果如下:

image-20211119190529130

经过一番查看,最终在 **SConscript **文件中发现这个字段很 ''可疑''。然后我们使用文本工具打开该文件进行查看。

image-20211119191317783

将STM32F407xx 改成 STM32F405xx, 进入Env 更新工程。 然后 keil MDK 中再查看,发现我们修改对了!!

这里我们可以初步知道,CPPDEFINES 对应了 keil MDK 的预处理定义。

为了验证该猜测,我们继续使用 [FileSeek](Download • FileSeek by Binary Fortress Software) 搜索 RT_USING_ARM_LIBC 关键(它也是keil MDK预处理中已有的定义)。

发现如下:

image-20211119191217865

这下就坐实了我们的猜测。至此,该问题已经解决。

这算是一个逆向解决问题的方法,由此,我们可以反过来去搜索一下 CPPDEFINES 的作用,做一个全面的了解,学习。这里不在赘述。

总结

程序开发中我们每天都在面对各种各样的问题。无论是新手还是老鸟,无一例外的每天都在解决着五花八门的问题。在大部分情况下其实我们很难对一个系统或者项目的细节面面俱到,特别是在项目代码量逐渐增大的今天。我们应该善于思考,勤于思考,用智慧去解决问题,而不是盲目乱试。

posted @ 2021-11-19 19:32  svchao  阅读(236)  评论(0编辑  收藏  举报