文章目录
一、使用stm32cubemx生成rtthread工程
官方文档已经说的很清楚了,这里就不赘述了:基于 CubeMX 移植 RT-Thread
二、一些小坑
1.finish未添加
可以看到编译器给我们报错了,这种情况我们需要去打开rtconfig.h文件,有两种方式解决
一是直接取消注释:
二是使用Use Configuration Wizard in Context Menu:在上下文中使用配
置向导来配置 rtconfig.h 中的宏定义。
到此编译就会通过了。
2.重映射rt_kprintf和rt_hw_console_getchar
这个很简单,只需要进入board.c,可以发现官方已经帮我们做好了。
当然我们不能直接使用,除非官方的UartHandle句柄和cubemx中配置的串口一样,所以我们需要进行一点修改,进入cubemx生成的usart.c,复制里面自动生成的句柄,然后修改程序(让UartHandle绑定我们配置的串口):
INIT_BOARD_EXPORT是初始化宏,感兴趣可以搜一下。
这时编译一下,成功。
但是当我们下载进开发板,连接串口准备使用的时候,却发现:
没有msh命令行出现,这是因为cubemx生成的main函数中有while(1);main线程比finish线程优先级高,main一直运行导致finish线程一直没有运行。我们这里把while(1)删除,加入return 0,再烧录。
大功告成!
2.rt_hw_console_getchar的大坑
可以看见我们想用ps打印线程却发现只返回了p,这是因为getchar是通过轮询实现的,同时又增加了rtthread_delay(10)挂起自身便于比finish线程低的线程运行,我们可以将delay删除看看效果。
可以看见可以了,不过建议还是将轮询改为中断方式比较好。