利用STM32CubeMx创建关于RT-Thread的Makefile工程
一、序言
说到为什么要建立Makefile工程,还要从我的老年机(PC)说起,实在是有点跟不上了。于是我换了ArchLinux系统,开始向Linux系统迈进,开始学着在Linux下进行开发,于是才有了在Linux下开发RT-Thread的念头。我也看了RTT官方的文档,确实也有在Linux下开发的说明。但却是利用Scons和Env进行构建和编译的,也确实是很方便、很nice!但是我对scons一点不懂,而且我想利用Make进行构建编译,所以就必须要创建Makefile工程。恰好RTT官方也有利用STM32CubeMx建立RT-Thread的例程,这不巧了吗这不,那就开始干吧。
二、搭建环境
由于我手头上的板子是STM32F103ZE,所以我就以它举例了!打开STM32CubeMx,首先要添加RT-Thread的软件包,找到Help 菜单下的Manage embedded software packages,选择From Url,New,添加链接https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc,这部分可以参考官方的说明文档
三、开始建立工程
第一步、选择芯片型号
第二步、选择RT-Thread组件
第三部、再配置组件(可以默认配置,有需要在修改)
第四步、生成工程
四、修改Makefile
我们不妨可以先进入工程目录,先make一下。不出所料,肯定是有错误的。如图
这是因为rtthread已经帮我们实现了这个函数,其实还有两个函数,我们可以在stm32f1xx_it.c中注释掉。
改完之后我们可以再编译一下。结果还是要出错。如下图:
这个错误我们需要在Makefile中添加一个.s文件
改完之后我们在make一下,终于是没错误了!哈哈。
此时我们可以在main.c中创建个线程,点个灯验证一下是不是成功了。经过几番折腾,灯依然是不闪烁,说明哪里出错了。这里我是在网上找了到了这位大神,需要在启动文件中修改一下用户函数入口(这里其实在链接文件中也有线索),修改如图:
再次编译下载到单片机,等果然开始闪烁了,说明内核已经移植成功了!下面验证RT-Thread的FinSH,结果串口不能输入,也不能输出……
五、修改链接文件
串口没有输出说明FinSH还没有移植成功,此时内心有点问候它星星的意思了……在确定代码没错的前提下,那只能是程序没有被执行。于是查看链接文件,看了半天也没看出什么名堂,后来我拿官方在keil移植编译成功的链接文件进行比较,结果有惊天发现:
当看到串口有输出,可以输入命令,灯在闪烁,我知道RT-Thread移植成功啦!
总结
总的来说并不是那么容易,但是过程是好的,学到了东西。在任何移植系统的过程中,难免会遇到奇怪的问题,但是总是有章可循的,实在不实行我们还可以百度、谷歌,毕竟大神还是有的。其实移植系统可以学到很多东西的,可以充分了解系统结构。最后附上我的工程。