Rtthread V5.2.0 MSH/finsh 报错finsh: can not find device: uart1
官网gitee 下载最新Rtthread 后通过SCONS 生成Keil5 STM32f407VG 代码烧录到开发板后,启动可以正常出现RTthread Finsh终端打印,但之后卡住,无法接受串口发送的指令,
终端上报告finsh: can not find device: uart1错误
\ | /
- RT - Thread Operating System
/ | \ 5.2.0 build May 19 2024 08:28:13
2006 - 2024 Copyright by RT-Thread team
finsh: can not find device: uart1
msh >
调试发现rtthread 源码似乎都对MSH兼容性有问题,修改代码后解决msh卡住问题,
1.通过keil调试发现程序在执行finsh_set_device()中的rt_dev_find 后会查询uart1 失败,导致finsh未能正常创建进程,而退出,
2.检查代码,uart1 有被正常申请注册,进入rt_device_find() 函数最终调用rt_object_find();发现判断的
data!=name 条件不成立,进入rt_object_for_each(); 这个rt_object_for_each() 函数内的的实现简直反人类设置,返回值和设备不明确,RT_EOK, 乱使用, 心累
修改两处,暂时解决finsh报错问题
1.rt_object_for_each() 修改返回值的判定
2.修改rt_object_find返回目标的判定
问题在rtthread 5.2.0 上解决,