经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Go语言 » 查看文章
没有真实串口设备时使用"虚拟串口驱动"调试你的串口代码
来源:cnblogs  作者:janbar  时间:2020/11/23 12:21:08  对本文有异议

前言

很多时候需要编写串口代码,但是又没有真实串口设备来调试代码。以及本身就是要操作2个串口的情况,可以使用“虚拟串口驱动”工具方便的调试代码。
使用方法就是点击添加端口,此时“COM1 <-> COM2”是一组,即对COM1写数据会让COM2读到,对COM2写数据会让COM1读到,是不是很方便。
下面是“虚拟串口驱动”工具的截图,我是在网上随便找的一个汉化版,大家可自行百度下载吧。

示例代码

  1. 串口收发都是不太好控制的,因此我下面的程序使用“\n”作为结束符,当收到“\n”时认为本次接收数据已完整,发送数据结尾带上“\n”。
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/tarm/serial"
  6. )
  7. /* https://www.eltima.com/products/vspdxp/ : 虚拟串口工具 */
  8. func main() {
  9. if len(os.Args) != 3 {
  10. return
  11. }
  12. com, err := serial.OpenPort(&serial.Config{
  13. Name: os.Args[1],
  14. Baud: 9600,
  15. Size: 8,
  16. Parity: serial.ParityNone,
  17. StopBits: serial.Stop1,
  18. })
  19. if err != nil {
  20. panic(err)
  21. }
  22. defer com.Close()
  23. var n int
  24. buf := make([]byte, 128)
  25. if os.Args[2] == "server" {
  26. for {
  27. n, err = readCom(com, buf)
  28. if err != nil {
  29. panic(err)
  30. }
  31. fmt.Printf("[%s]\n", buf[:n])
  32. err = writeCom(com)
  33. if err != nil {
  34. panic(err)
  35. }
  36. }
  37. } else {
  38. for {
  39. err = writeCom(com)
  40. if err != nil {
  41. panic(err)
  42. }
  43. n, err = readCom(com, buf)
  44. if err != nil {
  45. panic(err)
  46. }
  47. fmt.Printf("[%s]\n", buf[:n])
  48. }
  49. }
  50. }
  51. func readCom(com *serial.Port, buf []byte) (int, error) {
  52. cnt := 0
  53. for {
  54. n, err := com.Read(buf[cnt:])
  55. if err != nil {
  56. return 0, err
  57. }
  58. for i := cnt + n; i >= cnt; i-- {
  59. if buf[i] == '\n' {
  60. // 找到结束标记符,确定是一条完整的信息
  61. return i, nil
  62. }
  63. }
  64. cnt += n
  65. }
  66. }
  67. func writeCom(com *serial.Port) error {
  68. var send string
  69. fmt.Scanln(&send)
  70. var (
  71. buf = []byte(send + "\n")
  72. end = len(buf)
  73. start = 0
  74. )
  75. for start < end {
  76. n, err := com.Write(buf[start:])
  77. if err != nil {
  78. return err
  79. }
  80. start += n
  81. }
  82. // 确保所有数据都发送完成,然后刷新缓存
  83. return com.Flush()
  84. }
  1. 运行效果

总结

有时候需要调试串口代码,但每次接设备进行调试很麻烦,使用“虚拟串口驱动”工具不仅可以用来调试代码,甚至可以做到单元测试里面。
毕竟验证代码逻辑还得用上真实设备不仅麻烦,而且难以控制,使用该工具完美解决问题。

原文链接:http://www.cnblogs.com/janbar/p/13996178.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号