嵌入式开发工具之串口模拟

戴维营教育原创文章,转载请注明出处。我们的梦想是做最好的iOS开发培训!

串口编程是嵌入式开发最基础的工作之一,很多后续开发都是在读写串口的基础上进行的。程序调试过程中,交叉编译、烧写程序耗费的时间是相当可观的,如果能在本机解决大部分调试问题,仅仅在关键节点时再到板子上进行适配无疑会大大提高开发效率。毕竟高效、优雅是每个开发者都应该培养的素质,而且是和收益直接相关的素质。大多数情况下,通过本机模拟串口,减少实机调试的次数,对提高嵌入式开发的效率是相当显著的。

1.背景

串口编程是嵌入式开发最基础的工作之一,很多后续开发都是在读写串口的基础上进行的。程序调试过程中,交叉编译、烧写程序耗费的时间是相当可观的,如果能在本机解决大部分调试问题,仅仅在关键节点时再到板子上进行适配无疑会大大提高开发效率。毕竟高效、优雅是每个开发者都应该培养的素质,而且是和收益直接相关的素质。大多数情况下,通过本机模拟串口,减少实机调试的次数,对提高嵌入式开发的效率是相当显著的。

2.Windows主机串口模拟

VSPD是一款本地虚拟串口的软件,可以虚拟2个串口然后连接起来实现自发自收调试。下图展示的是vspd虚拟了两个串口COM1、COM2,两个putty实例分别连接这两个串口,可以用自己的程序替换其中任意一个putty示例,另一个就是模拟出来的串口。

Linux有类似的串口模拟终端,网上有python脚本实现。

3.虚拟机串口模拟

这里是本节的重点,因为Windows主机安装虚拟机搭建嵌入式开发环境是一种较为普遍的模式。常见的虚拟机有vmware和virtualbox,这里以virtualbox为例,在vmware同样适用。虚拟机串口可以直接连接主机的真实串口,也可以采用命名管道(pipe)方式。采用Pipe时需要遵循约定的命名规范,在Windows系统上,形如\.\pipe\xxx的形式,如下图所示,在Linux可以设任何路径,如/tmp/virtual。

此时虚拟机内的主机读写串口COM1,主机端读写\.\pipe\c1。大多数串口调试工具不支持这种命名,如xshell、mobaxterm以及常见的串口调试助手。不过putty还是支持的,其效果如下图所示。

将虚拟机中运行的putty实例替换为你的程序(包括虚拟机linux系统下的程序),可以通过主机端的putty实例模拟串口进行调试。 不过对于大多数串口调试需求而言,putty缺少读取文件、按指定频率发送等功能,满足不了开发的需要,需要用到nptp(named pipe tcp proxy),它能够将虚拟串口和网口连接,具体使用见后。如下图所示对nptp进行设置。

打开tcp客户端调试工具,进行下图所示设置。

连接后,通过向127.0.0.1:6666发送数据,就可以实现向虚拟机中的串口发送数据的效果,向串口写数据亦可通过tcp客户端调试工具获取,借助该调试工具文件读取、定时发送等功能,可以满足大多数串口调试的需要,如下图所示。

通过这种方式可以减少实机调试的次数,对提高开发效率还是很有帮助的。


谢谢各位,欢迎交流并指正。

---- funcode@戴维营教育

http://io.diveinedu.com

http://www.diveinedu.com

https://github.com/DiveinEdu-CN

戴维营学院(高级开发视频): http://v.diveinedu.com

潜心俱乐部(iOS面试必备): http://divein.club