怎样能够让finsh调试串口和上位机通讯的串口进行共用,而不是通过输入特定指令进入通讯模式,大家做产品时都是怎么去协调的呢?
是因为板子串口资源不够吗?一般都会单独留出来一个串口作为控制台调试使用,如果实在不够用可以把Finsh控制台给关了,这样能多出来一个串口供用户使用,
Finsh 控制台线程的名字是 “tshell”,线程的处理函数名称为 finsh_thread_entry(),位置位于文件 rt-thread/components/finsh/shell.c 中。该线程处理函数的逻辑如下,阻塞的从串口设备中读取数据,读取到一行后从命令表中查找并执行相应的命令。
如果非要实现用户串口和控制台串口共有的话可以考虑从这里面入手,比如说用户串口使用时有特殊的结尾字符,或者特殊的报头等情况,程序判断到特殊的报头或者报尾后执行用户的代码而不去执行相应的命令。
感谢回复,经过一段时间的摸索,参考AT组件里面的写法,确实是可以实现的,具体重点部分代码附上:
请教一下,除了上面代码,shell.c里要怎么改?
我想实现控制台和485共用一个串口设备,已开启各自线程,目前情况是485这边的协议收发要发送msh命令才会显示出来(发ascll被控制台拿去比对命令,发hex无回复)。
可以提供完整的实现吗?@cheung
@cheung
根据你的代码,修改了一下,思路是这样,需要用到串口时将shell的设备关闭,重新初始化串口用于别的线程。退出时也是关闭串口设备,重新经行console的设备初始化并将它关联到shell上面。