shell指令串口和数据口使用同一个口的问题

发布于 2021-03-04 17:29:32

由于设备使用的限制,现在shell指令和数据通信使用同一个串口。

这就有一个问题,主线程使用rt_device_read读取数据时,shell指令线程就无法响应。
比如向串口发送list_device指令,由于数据被主线程读取取走了,shell的线程就无法读取到指令。

请问各位大神,这个问题如何解决

查看更多

关注者
0
被浏览
200
3 个回答
aozima
aozima 2021-03-04
拒绝白嫖,拒绝键盘侠!

方案1

把你的通讯做成命令,数据当成参数。这样手动调试和通讯2不误

方案2

参数ymodem那样,进入通讯模式后,把控制权完全抢过去。

Cfly
Cfly 认证专家 2021-03-05

这个简单,我来描述下我怎么实现的:

  1. 将这个物理串口虚拟成两个device,读写接口都实现
  2. 设置一个全局变量,0代表数据模式,1代表调试模式
  3. 在物理串口的rx_indicate回调里面判断模式,然后读取数据发送到虚拟设备的接收缓冲里并调用虚拟设备的rx_indicate
  4. 发送时判断模式决定要不要通过物理串口发出去
  5. 将其中一个虚拟设备设置为调试口
洋洋得亿
洋洋得亿 2021-03-05

经过一番摸索,下面我说下我最终的做法,应该会比两位大佬说的更加符合我的实际应用。首先找到shell线程获取数据的接口。在shell.c文件中大概位置如下,在这里加入数据拷贝
image.png

同时我发现接收到非指令的数据时,线程会发送错误报警,即你发啥返回啥,给上位机端解析造成麻烦,于是可以注释掉错误警告,如下位置
image.png
进入msh_exec函数,注释掉如下部分
image.png

到此大功告成,此方法不需要切换模式,且shell不响应非指令数据。
再次感谢两位大佬的解答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览