这几天都在弄这个事,一直有问题,我就奇怪网上写的步骤很简单呀,我这照做了怎么出现很多问题,用rtthread3.1.2版本加finsh加了好几天,终于打印msh>了,输入命令还回复命令不存在。决定将rtthread升级到3.1.3再加finsh,确实容易了。因为3.1.2版本rt_hw_console_getchar函数没有和finsh的getchar函数挂钩,需自己添加,3.1.3就没这个问题。
下面说一下先将工程的rtthread版本升级,再加finsh步骤。
前提是stm32cubmx里已经添加rtthread3.1.3了。
添加步骤参考:
(122条消息) 基于 STM32CubeMX 添加 RT-Thread 操作系统组件(一)- 详细介绍操作步骤_Ch_champion的博客-CSDN博客_cubemx rtthread
1、用stm32cubmx打开工程,Software_Packs->Select Components
选中shell,(如果生成的工程里kernel里文件都出现地址错误,就把这个kernel重新选择一遍)
工程设置:
点GENERATE CODE 生成工程:
由于3.1.3版本没有drivers文件,把下图标叹号的都删了。
rtconfig.h和context_tvds.s文件先删了重新添加。
context_tvds.s位置:Middlewares\Third_Party\RealThread_RTOS_RT-Thread\libcpu\arm\cortex-m3
rtconfig.h就在RT-Thread文件夹里。
以下报错就把stm32f1xx_it.c里的函数注释掉。
注意rtconfig.h里需重新配置下,默认#define RT_USING_HEAP是被隐掉了,需放开。
#define RT_USING_HEAP
如果用事件了就放开#define RT_USING_EVENT。
工程运行时又发现一个问题,线程多了就会导致有的线程初始化失败,是因为定义的堆内存小了。
#define RT_HEAP_SIZE 1024