嵌入式技术论坛
直播中

郑成枝

8年用户 1385经验值
私信 关注
[问答]

使用Ymodem协议从单片机发送文件至Xshell7出错是何原因

硬件:STM32F429IGT6核心板
操作系统:RTT V4.1.0
使用Ymodem协议从单片机发送文件至Xshell7。
问题1 Ymodem协议使用sy命令发送文件至电脑,文件名缺少第一个字母
MSH发送命令如下

1.jpg

1.jpg

缺少了首字母
不知道是不是我用法不对,如果前面开头加个‘/’,就是正常的
还是说就是bug,改成下面就好了

源码

rt_sprintf((char *)buf, "%s%c%d", (char *) & (cctx->fpath[1]), insert_0, file_buf.st_size);
改为
rt_sprintf((char *)buf, "%s%c%d", (char *) & (cctx->fpath[0]), insert_0, file_buf.st_size);

另外发送文件只能在当前目录下发送才能被电脑正常接收。

如果发送文件带上了文件路径,想发送子目录的文件,就会接收失败,因为电脑保存的文件名带上了‘/’,不被允许保存。

Xshell接收成功后卡死,软件崩溃。重新打开后串口正常运行。

发送中

1.jpg

打开文件

1.jpg

软件崩溃

1.jpg

2.jpg

3.jpg

重新打开串口正常

1.jpg

从上位机接收文件,不会发生这种情况。

是软件问题,还是单片机的问题。

回帖(5)

张桂英

2022-10-28 10:21:39
rtt 里还没有 dir 处理 api。对于一个相对路径文件名,应该自己去处理一下传入的文件路径是:“当前路径下的文件”,“相对路径的其它目录下的文件”,还是“绝对路径文件”。应该从这三种情况分别能提取出 basename 和 后缀名,告诉远端的文件名是不应该包括路径的(相对路径也不行)。这是第一。

xshell 最后无响应了,可能是它在等最终的结束响应信息,但是没等到就在一直死等。这种情况就是单片机端少回传了响应,同时 xshell 也有 bug。
但是如果单片机端的 sy 命令把该做的事情都做了,xshell 还是无响应,那就仅仅是它的 bug 了。

换个工具测试一下,试试其它工具有没有错误出现。
举报

郑成枝

2022-10-28 10:21:47
有什么其他工具可以使用的?
我有尝试找过,要不就没有Ymodem接收只有发送的。
要么接收直接报错
举报

郑成枝

2022-10-28 10:21:56
但是我感觉那句代码不合理。
默认的话 都是直接打文件名的,哪里前面还要加个’/‘的
举报

张桂英

2022-10-28 10:22:09
securyCRT 支持,支持这个的终端工具还是少
举报

郑成枝

2022-10-28 10:22:18
已测试,是我的xshell7的问题
使用teraterm工具接收不会导致无响应。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分