简介
rt-thread 是我非常喜欢的一款RTOS,近期在使用Env更新工程的时候发现,keil MDK 中的预处理型号和器件型号不符。
这就导致我每次更新工程后都需要进入keil MDK手动修改一下。这显然是一个无聊的操作,于是有了这篇随笔。
实际上如果你系统,仔细的学习完RTT官方的一些资料,其实该问题的解决办法非常简单。在此,我仅使用该问题展示一下解决该类问题的思路。
开始
我的MCU为F405,于是我选择了一个F405的BSP模板进行开发。但是,当Env更新完工程后,keil MDK中的预处理总是写着 STM32F407xx。
我的第一想法是修改 keil MDK的模板,如下:
但是Env更新工程后,还是被修改成了 STM32F407xx。
于是,我就知道不是模板这里能改的,可能是定义在某处,然后Env读取并填入。这种猜测并不是因为我解决了该问题才知道,而是往往该类参数都是以字段(字符串)等明文方式定义的。
猜测有了, 接下来就需要借助工具来搜索一下哪些文件中含有 STM32F407xx, CLKTCK=RT_TICK等字符串。
这里我使用的是 FileSeek) , 经过查找,结果如下:
经过一番查看,最终在 SConscript 文件中发现这个字段很 ‘’可疑’’。然后我们使用文本工具打开该文件进行查看。
将STM32F407xx 改成 STM32F405xx, 进入Env 更新工程。 然后 keil MDK 中再查看,发现我们修改对了!!
这里我们可以初步知道,CPPDEFINES 对应了 keil MDK 的预处理定义。
为了验证该猜测,我们继续使用 FileSeek) 搜索 RT_USING_ARM_LIBC 关键(它也是keil MDK预处理中已有的定义)。
发现如下:
这下就坐实了我们的猜测。至此,该问题已经解决。
这算是一个逆向解决问题的方法,由此,我们可以反过来去搜索一下 CPPDEFINES 的作用,做一个全面的了解,学习。这里不在赘述。
总结
程序开发中我们每天都在面对各种各样的问题。无论是新手还是老鸟,无一例外的每天都在解决着五花八门的问题。在大部分情况下其实我们很难对一个系统或者项目的细节面面俱到,特别是在项目代码量逐渐增大的今天。我们应该善于思考,勤于思考,用智慧去解决问题,而不是盲目乱试。
原作者:svchao
|