(串口通信编程) 开源串口调试助手Common (Com Monitor)

陪她去流浪 桃子 编辑 阅读次数:31260

开篇

大家好,这篇文章是我之前写的开源串口调试软件Common的文档。很久很久之前都说要提笔写的,结果拖了很久,抱歉。

原来在博客园的文章:http://www.cnblogs.com/memset/archive/2012/12/24/common.html

先介绍下吧,这是一款开源的串口(RS232)调试助手软件,取名为Common,之所以取这个名,是因为其实最初我是想把她做成串口监视器的(Communication Monitor,Common),但后来由于能力不够,就放弃了,做成了串口调试软件。 她运行在Windows平台上。最初的开发语言是纯C语言,后来经维护,慢慢地变成了C++,然后是C++加部分的C++11,变更开发的语言,其主要也是正在学习这些语言,想要通过实际的项目经验来达到学习的目的。 软件最初的开发时间大概是2012年12月24日,当时我正在学校的电子实验室进行单片机方面的学习,由于单片机很多时候没有显示设备,不方便调试,所以就经常用串口,所调试数据输出到电脑端上位机来进行调试。 之间用过几个国内的比较流行的串口调试软件,发现都不符合我自己的习惯,于是就花了点时间自己写了一个。没想到一写就写了两年多,直到大四那年(2015),我从Windows+单片机的开发,转到了Linux+嵌入式(网络)(我本身的专业就是嵌入式),所以渐渐地,就更新得特别慢了,有了不再更新的念头。

下载

跟源代码一样,最终的程序下载地址同样是在GitHub上,地址是:https://github.com/movsb/common/releases

功能介绍

本软件提供了以下基本功能:

  • 串口数据的读取与发送;
  • 设置波特率、停止位、数据位、校验位;
  • 以十六进制和字符方式显示接收数据;
  • 支持自动发送,可设置自动发送间隔时间;
  • 显示发送数据量、接收数据量;

本软件还提供了以下额外功能:

  • 自动枚举系统所有可用串口设备(虚拟的、物理的、USB转串口的);
  • 任意设置通信波特率(手动输入),但得设备(设备驱动支持);
  • 支持保存接收数据到文件(十六进制、字符格式);
  • 支持加载文件并发送,多种格式(纯文本、二进制、十六进制序列、命令列表(手动配置));
  • 字符模式支持设置换行符类型(回车换行、回车、换行、无),支持转义字符(如:\x12, \xab, \r, \n, \t, \a, \b 等等);
  • 支持部分Linux终端控制字符,包括:前景颜色、背景颜色、字节加粗等;
  • 支持显示ASCII码表(0-255),以及对应的十进制、八进制、十六进制;
  • 支持从接收窗口区域直接输入待发送内容;
  • 支持简洁模式、支持窗口全屏模式;
  • 支持快捷打开计算器、设备管理器、记事本等系统程序;

关于版权与免责声明

本串口调试软件(以下简称“本软件”软件完全开放源代码,目前无协议。但仅限个人使用,任何公司在未得到作者允许前不得将本软件用于任何商业用途。

本软件由作者独立开发完成,限于作者能力有限,可能难免会出现BUG或程序错误,虽然我已经尽力编码使本软件不产生BUG。本人不对本软件所造成的任何个人(或集体)的任何损失负责,所有风险由您自己承担。您只有接收了该条款,您才能使用本软件。一旦您使用了本软件,即代表您接受本条款。

软件的安全性

本软件可运行在Windows XP及以上的所有系统中,一共两个文件(EXE本身+一个配置文件),没有任何其它附带程序,也不依赖任何MFC相关库。

本软件完全开源,除了会修改本软件自身的配置文件以外,不会增删修改任何文件,包括但不限于:磁盘文件、系统设置、注册表、安装信息等。下载即用。至于某些“安全”软件所报的“本软件携带恶意代码”、“本软件为病毒”,等等。其它的我不想多说什么,我只是劝告你们,尽早卸载掉这些所谓的“安全”的不安全软件,还自己一片干净、清爽的天空。

软件源代码的编译

本软件是完全开源软件,并采用 git 维护,项目在 GitHub 上面。地址是:https://github.com/movsb/common.git

如果不会使用 git,则可以直接下载打包文件,在项目主页右边,有个“Download ZIP”,点击即可下载。如果会的话,git clone 就可以了。

软件是用C++/C++11,而且运行在Windows之上,所以必须采用Visual Studio 2013及以上才行!低版本都不行,也没有低版本可用,所以不用再问我是否有VC6.0的版本之类的了,没有哦!用VS2013打开根目录下的 .sln 文件即可打开项目,然后编译并链接就可得到相应的可执行文件。如果遇到错误,请接着往下看。

界面布局的管理

本软件通过一个叫做 sdklayout 的小项目来管理本软件的界面布局,其通过 xml 来布局窗口及其控件,与控件、窗口相关的大小、位置、显示与隐藏等信息全部由其管理。

主窗口的界面布局在 main_orig.xlm 中,文件中引用字符串串形式的控件ID,但Windows内部是以数字ID形式使用的。为了考虑运行时的效率,所以把转换工作换在了编译时,也就是说要把 main_orig.xml 中的字符串ID形式,通过资源文件,转换成数值ID的形式。这需要借助另一个小工具。这个工具叫做 idxml,名字是随便取的,知道功能就好了!软件也在 github 上面,地址是:https://github.com/movsb/sdklayout.git。但是为了大家的方便,我已打算将最终的exe文件放在了 tools 目录,采用VS2013+兼容XP+无MSVCRT依赖,所以最终生成的EXE偏大,有接近200KB。本程序是基于命令行的,所以要在CMD命令行下执行,因此不要再问我为什么窗口一打开就自动关闭了类似的问题!

软件使用命令:idxml <in_xml> <resource.h> [out_xml]

其中的 in_xml 为输入xml(如:main_orig.xml),resource.h 为窗口所在的资源文件,out_xml 为输出xml(如 main.xml),可省略。

**2015年10月14日更新:**写了一个自动脚本,用于完成上面的转换工作,见 tools/gen_main_xml.bat 文件。

XML文件的解析库 tinyxml2

同样为了方便大家的使用,我已经把tinyxml2集成到项目中了。不用再去下载。

关于找不到 afxres.h

本软件完全采用Win32SDK写成,未使用任何MFC相关的库,所以本身并不会依赖于 AFX 的,但 Windows 有时候会抽风,报找不到 afxres.h 错误。解决办法如下:打开 common.rc,定位到大概第 10 行左右,有一行是:#include "afxres.h",把这行干掉,改成以下两行即可:

#include <Windows.h>
#include <winres.h>

软件更新历史

2015-09-13: 1.20 没有什么修改,只是整理了文档

  • 没做什么实质性的修改,增加了文档,集成了idxml和tinyxml工具库

2015-08-02: 1.19 久违了

  • 修复了“保存到文件”功能
  • 解决无法识别虚拟串口的问题 && 解决某些不支持的事件导致 SetCommMask 失败问题
  • 编辑框增加常用功能:鼠标中键删除,计算器
  • 去掉了一些不需要的功能 libtccw32, str2hex, pinctrl

2014-08-09: 1.18 Beta

  • 优化:简化对数据中包含'\0'的数据的处理
  • 增加:简洁界面模式时把工具栏放到左边
  • 增加:接收区增加一个"清空数据"菜单
  • 更改:不限制接收数据的多少
  • 优化:完美实现4种换行符的统一, 就算'\r\n'分两次发送也会正确地产生仅一个换行符!
  • 优化:主窗口应用新的布局方案
  • 修复:修复错误解析16进制转义字符问题
  • 修复:解决一个中文字符分两次发送的乱码问题

2014-07-06: 1.17

  • 增加:允许从接收区输入字符并发送(更友好的类交互模式)
  • 更改:更改了字符接收区/发送区的字体为Consolas等宽字体,不再使用原来的Courier字体
  • 增加:简洁模式 - 此模式下大部分界面元素会被隐藏, 有时候这样更舒服
  • 增加:主窗口的自动界面布局(允许拖动改变窗口大小,控件坐标自动调整)
  • 更改:默认使用的模式改为:字符接收+字符发送

2014-07-05: 1.16

  • 字符接收数据时,增加对控制字符Backspace的支持(即'\b'),效果就是向前删除一个字符
  • 修复一处中文检测错误(原来是对的, 不知道什么时候改错了
  • 删除了窗体大小调整(下个版本即将使用自动布局)

2014-03-03: 1.15

  • 增加:支持输入非标准的波特率, 但是驱动是否能够支持, 要看具体的驱动了
  • 改进:加入了一些快捷键, 比如Alt+S为发送...

2013-11-06:

  • 修正:如果接收缓冲区有未显示的数据,则会在按下继续显示时进行提示,而不是原来的在接收到下一次的数据时进行提示;感谢网友lin0119的反馈

2013-11-02 1.14:

  • 修改:完全修改了命令发送的界面,比原来方便了很多~

2013-09-10 1.13:

  • 增加:现在可以手动编写待发送的命令文件,并发送命令了 - 在发送文件时选择 命令文件, 格式见博客后面的介绍
  • 增加:字符发送模式下,可以选择取消回车换行符的发送,可以选择插入转义字符
    1. 支持的字符型转义字符: \r,\n,\t,\v,\a,\b,\
    2. 支持的16进制转义字符格式: \x?? - 其中一个问号代表一个16进制字符, 不可省略其一, 必需保证4个字符的格式
    3. '?',''','"', 等print-able字符不需要转义

2013-08-30:

  • 细节:根据用户要求,窗口大小现在可以变化; 如果不满意于接收/发送区的文本框过小, 可以左右拖动窗口以改变窗口大小
  • 细节:由于原来接收区没有水平滚动条,所以数据可能自动被换行, 现在已纠正,数据不再自动换行, 要换行, 请使用 '\n'

2013-08-29:

  • 修正:在设备管理器中更改串口的端口号后, 自动刷新串口列表
  • 细节:修正在串口打开且允许显示接收到的数据时无法使用鼠标滚轮的小问题

2013-07-27:

  • 细节:主窗口最小化后其它子窗口不自动最小化的问题

2013-07-20 1.12:

  • (过渡版本,以后更新)

2013-07-14:

  • 改进:程序内部改进内存分配算法,避免因程序错误造成内存泄漏

2013-07-05:

  • 临时修正:选择从文件加载并取消后, 串口号选择的ComboBox会消失不见,不知道原因,临时已解决

2013-05-11:明天母亲节

  • 修正:终于找到一个比较好的办法来处理自动发送用到的重复数据了,呵呵,时间下限减少到10ms

2013-04-23:

  • 修正:发送与接收方式改回同步方式!坑~
  • 修正:当发送操作达到100次时无法继续发送的BUG!
  • 修改:优化内部线程同步机制,避免程序停止工作(失去响应)!
  • 优化:优化自动发送数据的方式,提高精度,减小内存/CPU占用!
  • 小提示:在加载/保存文件时,若不清楚打开/保存方式,可以查看简单的帮助信息!

2013-04-13:

  • 修正:更改发送与接收方式为异步方式.
  • 添加:简单波形显示.

2013-04-11:

  • 发送字符数据时,对于换行,只发送'\n',不再发送'\r\n',注意:结尾的'\0'不被发送!

2013-04-07:

  • 修改:完全修改了utils.str2hex的实现,大大增加了16进制输入的灵活性. 现在的要求:每个16进制值由两个相邻字符组成,无其它限制.(以前是2个相邻字符+一个空格)

2013-04-04:

  • 修正:无法复制接收区字符文本的BUG.
  • 小提示:在选择串口时,如果没有任何可用的串口,则进行提示更新.

2013-03-25:

  • 修正:大大减少中文乱码的问题.细节处理见代码.现在应该可以放心地使能中文显示模式了.
  • 增加:字符串转16进制数组功能,工具菜单里面.

2013-03-23 1.10:

  • 添加:工作模式中,右键点击接收区字符文本框可以使能中文显示模式(不推荐),由于中文字符由两个字节构成,所以:一旦在某一次接收过程中只接收到了中文字符的一个字节,那么数据就会显示出错, 这个无法避免, 所以建议尽量不使能中文显示模式.
  • 修正:用C语言的人们都习惯使用'\n'作为换行符,我也这样使用,但偏偏Windows的编辑框以'\r\n'作为换行符,没有办法,我不得不把所有的'\n'换成'\r\n',效率必然会下降,而且我不得不计算出\n的个数先 --> 为了计算所需缓冲区的大小.
  • 添加:现在可以显示出还未被发送出去的数据计数.
  • 添加:新增计时器,打开串口后开始计时,关闭后停止计时.

2013-03-18:

  • 更正:若为字符显示方式,16进制方式保存不被允许,因为格式基本上不满足!

2013-03-10 1.0.0.9:

  • 修正:因为在格式化字符串的最后少写了一句 *pb = '\0',导致接收区数据显示错误!
  • 修复:对utils.hex2chs和add_text作了大量修改,大大减少数据丢包,貌似没有丢包?,细节处理参见源程序
  • 1.0.0.8版本因为内部原因速度严重减慢, 1.0.0.9回到原来的快速!

2013-03-09 1.0.0.8:

  • 修正在使用SetupApi枚举串口设备时未检测并口设备而造成的内存异常访问错误
  • 减少在某些波特率(如:19200bps)下丢包严重的情况(如:MSP430串口),有时候还是会发生,等待修复.某些软件(如:SComAssistant采用每次只读一个字节的办法效果还行, 就是速度有点慢. 我改成了WaitCommEvent函数调用了(原来是Pending ReadFile),减少了CPU占用(有些串口驱动并不总是支持同步操作).
  • 以前只管ReadFile+输出nRead字节,这里错误,ReadFile并不保证读取到要求的数据量后才返回,这里会导致严重丢包,WriteFile亦然.
  • 速度减慢,但数据更完整

2013-03-05:

  • 为了方便数据的统计与显示,16进制内容与字符内容被显示到不同的编辑框中

2013-03-04:

  • 修改:现在在串口列表中可以显示串口在设备管理器中的名字了
  • 修正:无法显示 MSP430-FETUIF Debugger 的串口号(现在调用SetupApi更新列表)

2013-03-03:

  • 添加:<其它> 菜单添加 <设备管理器>
  • 修改:在关闭串口后自动发送前面的钩不再自动取消(如果已经选中)
  • 修改:串口被关闭/移除后串口列表回到第一个串口设备的BUG

2013-03-01 1.0.0.7:

  • 修改原计算器(系统)为表达式求值计算器(简单版本)

2013-02-27 1.0.0.6:

  • 若发送文本,则自动发送被自动取消(若自动发送选项已打开)
  • 在显示模式下不允许对接收区数据进行选择操作
  • 提供硬件支持的串口设备设置
  • 为用户提供串口超时设置
  • 提供手动设置DTR/RTS引脚电平

2013-02-24 1.0.0.5,今天元宵节:

  • 更改原来的1~64串口列表到自动检测计算机上的可用串口

2013-02-14 1.0.0.4:

  • 增加显示出0~127号ASCII对应8,10,16进制功能

2013-02-08 1.0.0.3:

  • 内部程序作了许多的优化工作,包含数据的发送方式等
  • 修复接收数据时鼠标在接收区的文本选择造成的干扰

2013-01-18 1.0.0.2:

  • 修复:文本文件,16二进制文件读取错误
  • 修复:程序内部缓冲区满后使程序进入死循环
  • 修复:文本字符方式显示接收的数据时产生不正确的换行符的错误,若要产生换行符, 请使用"\n"

2013-01-11 1.0.0.1:

  • 增加保存接收区数据到文件(16进制/文本形式)
  • 增加从文件读数据到发送区(16进制/文本形式)
  • 增加暂停显示功能
  • 增加复制发送/接收区数据到剪贴板

2012-12-26:

  • 自动识别当前存在,插入,移除的串口号

2012-12-24 1.0.0.0:

  • 发布第1个版本

软件相关截图

(暂无)

标签:串口 · 我的小项目

文章评论 67 发表评论 登出
  1. 小鱼tx

    您好,发现选择数据位为5bit时,出现不能打开串口;但友善的串口助手可以。

    1. 桃子

      您好,5bit 的使用场景我这边太少了,测试没有覆盖到。 您是开发吗?如果有开发环境的话,帮忙看看错误原因最好了,我目前没有开发环境来排查并修复问题。 谢谢了~

    2. shenghui

      非常感谢作者的代码,网上找了一堆,就你这个清晰明了。

      1. 桃子

        谢谢,感谢支持!😊

      2. 黄GAGA
        作者你好,我们尝试用单片机上开发,让单片机和电脑进行USB的数据交互。 单片机重启后,在设备管理器可以发现相关COM消失又出现, 但从这时候开始就打开不了这个COM。需要拔插USB或者在设备管理器禁用启用这个COM才正常。 感觉是在单片机重启时,电脑端工具没有立刻关闭USB,才出现的异常。 请问这个问题主要在哪里,要怎么处理呢
        1. yx
          膜拜,打算Qt实现部分功能
          1. 桃子
            嗯嗯,我这个用Win32原生实现,略显复杂?
          2. david FAN
            楼主大大,好牛逼的赶脚...
            1. 乔宇
              楼主大大,VS2015会提示版本过低,代码重新升级,升级之后就找不到main.xml了,怎么解决?
              1. 乔宇
                在文章中找到答案了
              2. istars2005
                您好,一直没有找到您命令列表文件的格式,能否告知一下,谢谢
                1. 雨纷纷
                  Sorry 啊,这个功能有BUG,没做完,不太好用。
                  1. istars2005
                    希望能在空闲时间继续完善这个工具,因为这个工具实在太好用了。 另外软件搜索不到STM32的USB模拟串口,这里应该有个bug
                    1. 雨纷纷
                      嗯,谢谢支持。有在更新,只是比较慢。 STM32的模拟串口,我没有这个设备,估计得你自己找找原因了。
                2. 又双叒叕…… https://blog.dabria.net
                  有时候收的数据多了,接收窗口的字体会变异=_=|||
                  1. 雨纷纷
                    这么奇怪?是否有截图,直接回复此邮件让我瞧瞧。
                    1. 又双叒叕…… https://blog.dabria.net
                      暂时不好复现。出状况时大致是字体从等宽变成非等宽的样子。
                      1. 雨纷纷
                        噢,好的,我猜测是终端控制字符处理那里出了问题。下次出了问题记得截个图。thx.
                        1. istars2005
                          我也遇到过这个问题,偶尔有一个数字和别的不等宽
                          1. 雨纷纷
                            这个问题“又双叒叕…… ”正在研究,比较麻烦。
                  2. 小杨PH
                    楼主大大。。请教一下。我用串口接收的时候需要将单片机的RTS拉低电平。。怎么样用软件将他拉低?现在单片机的RTS是高,收不到数据,我把他与地短接后就可以收到数据了,想问你怎么软件控制RTS? 求
                    1. 小杨PH
                      我用的是QT写的、、QSerialPort类
                      1. 雨纷纷
                        参考:https://github.com/movsb/common/blob/a2fce6fdb9f2317f513957505cf1e83a0ffdedcd/src/pinctrl.cpp#L46
                        1. 小杨PH
                          这个是C++写的?
                          1. 雨纷纷
                            嗯,是的,Qt的我不知道,Qt可以直接调用WinAPI吗?
                    2. linmeimei
                      发送数据时有可能导致死锁。问题为sendMessage必须等到主线程(UI线程)返回。
                      1. 雨纷纷
                        异步通知这一块确实处理得很不好。需要很多的优化。 串口通信那一块的代码应该和界面完全独立,但现在不是。还有类似SendMessage之类的同步操作。 没时间维护这个代码了,我就只能计划计划。。。⊙﹏⊙
                      2. 卡卡
                        楼主还是妹子?厉害... 话说,老师让编写一个can口通信助手,网上找不到源码,也找不到类似软件.想编一个串口助手学学,我是初学者,请问要编你这个,需要学哪些知识呢?我现在会java,c++不太懂呀...
                        1. 雨纷纷
                          不是妹子。(°ο°)~@ .. Java里面有那么成熟的封装,分分钟写出来。 没写过Can的。
                          1. 卡卡
                            求指教...写这个串口助手需要了解哪些知识?
                            1. 雨纷纷
                              若是Windows上用C++写的话,要了解的就太多了,光一个Windows程序设计就麻烦死。 若是Java的话,了解下相关接口应该就很容易上手了吧,反正我以前见一个用Java写的串口,没几行就能读写数据了。
                        2. meat
                          楼主你好,命令列表文件的格式是什么?
                          1. 雨纷纷
                            囧,忘了写文档,连我自己都忘记了。。。 刚才试了一下,好像有点问题,晚上我弄好后发个包吧。
                            1. 雨纷纷

                              类似下面这种 XML 格式,我看了一下代码,改过几次版,不知道为什么这个版本功能没做完就没做了:

                               1
                               2
                               3
                               4
                               5
                               6
                               7
                               8
                               9
                              10
                              11
                              12
                              13
                              
                              <?xml version="1.0" encoding="gb2312"?>
                              <common type="commands">
                                  <commands>
                                      <command type="char" escape="true">
                                          <name>命令1</name>
                                          <script>123456</script>
                                      </command>
                                      <command type="hex">
                                          <name>命令2</name>
                                          <script>123456</script>
                                      </command>
                                  </commands>
                              </common>
                              

                              目前有一些问题,包括新建的命令无法保存。 但如果是手动建立一个这样的文件的话,是可以使用的。估计要改的话得花点时间,暂时又没空。。。

                            2. pener
                              谢谢你能开源,不过我用2012版本也是编译出错,请问C++串口的编程需要安装什么控件之类的吗
                              1. 雨纷纷
                                在“软件源代码的编译”中说明了哟,至少VS2013。 VS2010跟VS2012都是过渡版本,VS2013才正式支持较多的C++的新特性,为了学习,我就没顾及那么多,升到VS2013的项目的,无法向后兼容。
                                1. pener
                                  错误 1 error RC2135: file not found: main.xml C:\Users\pener\Desktop\common-master\res\common.rc 327 1 common 请问是什么原因?
                                  1. 雨纷纷
                                    https://blog.twofei.com/566/#compiling 请注意看文档。
                                  2. pener
                                    抱歉,我没仔细看
                                2. chinanier
                                  在CComm::_end_threads函数里面,通知线程退出后只等待hEventToExit,感觉用WaitForMultipleObjects同时等待hThread更好。
                                  1. 雨纷纷
                                    工作线程在设置 hEventToExit 之后就都马上 return 0 了,估计效果差不多,但是理应还是要等待的。 在 CComm:_begin_threads() 中 _beginthreadex 之后其实还应该调用 CloseHandle 关闭线程句柄的,因为函数返回的时候会使引用计数加1. 当时写的时候还很小白,所以就写得不够规范了。
                                  2. 隨颩洏過
                                    楼主很不错啊!看经历应该才毕业不久,有这水平已经很不错了!才转行做上位机开发,对于你写的代码竟然很多看不懂,惭愧啊!
                                    1. 雨纷纷
                                      看不懂那是因为我代码实在写得太烂了。好的代码应该是简单而易懂的。哈哈哈哈。。。。。。。
                                    2. 文子和小鱼子
                                      很感谢楼主的分享
                                      1. 女孩不哭
                                        谢谢。能对你们有所帮助我就很开心了。
                                      2. 破晓
                                        我是个编程小白,我想自己写个软件来控制 51单片机 但不知道如何下手你有这方面资料吗?能发我邮箱吗,谢谢
                                        1. 女孩不哭
                                          电脑上串口相关的资料吗? 我全部看的MSDN: https://msdn.microsoft.com/en-us/library/windows/desktop/aa363140%28v=vs.85%29.aspx
                                          1. 破晓
                                            好厉害,能给我讲解下软件流程吗
                                            1. 女孩不哭
                                              在上班,估计没时间单独讲解。 可以先自己试着调试下,不明白的我可以作答。
                                              1. 破晓
                                                嗯,谢谢
                                        2. kingkey
                                          好东西,上次调试一个串口的bug,花了3天多是时间 。
                                          1. tangjian
                                            楼主,如果能抽个时间录制下整个软件的制作流程就好了,也为我们这些不是很熟悉vs编程的人能更快的明白。
                                            1. 女孩不哭
                                              估计应该没时间。把VS下下来,调试一遍应该能完整地走一遍流程。软件逻辑本身不复杂。
                                            2. fan
                                              博主你好, 我新学com 编程的. 连接上以后发送数据正常, 但是始终接受不到数据, readfile 返回0 , getlasterror 也是0 . 请问博主, 有什么可能我没注意到的地方吗? 谢谢
                                              1. 女孩不哭
                                                用最新版本的源代码编译,试试在“更多设置”里面修改一下“DTR/RTS引脚电平控制”的值。 据一些网友反馈,有些设备需要此设置才会收到数据。
                                                1. fan
                                                  谢谢, 我设置为0 就可以收到数据了. 默认值都是1
                                              2. 张特 http://cnblogs.com
                                                很好,尤其是那个设备管理器,不用再老是自己去找了。 谢谢作者。说到这里我不得不说我之前用的一个串口助手,用了段时间 竟然弹窗说要注册,价格还不低,我当时就火气很大, 一个串口助手你收那么多钱!!最后最可恨的是它的发送有bug ,害的我调试了一个晚上。
                                                1. 女孩不哭
                                                  哈哈~ 谢谢支持。
                                                2. 碧水渊
                                                  外部依赖项main.xml找不到,请问怎么解决?
                                                  1. 女孩不哭
                                                    执行:tools/gen_main_xml.bat 看上面的“界面布局的管理”
                                                    1. 碧水渊
                                                      谢谢楼主,准备抄了你的软件,在此基础上做一个上位机调试工具。
                                                      1. 女孩不哭
                                                        不客气,随便抄 :-) 遇到我代码的BUG了,还望通知一声。
                                                  2. 英东
                                                    真厉害,我来调试下,向你学习
                                                    1. 秋风少年
                                                      很不错的一个软件,试着在vc2005下编译,果然编译不过,std::function一直没看懂,看来改天还要整个最新的编译器,不然思想都赶不上最新标准了
                                                      1. 女孩不哭
                                                        std::function使得可以像变量一样在函数内部定义函数,并保存在变量中。这种定义的函数而且还可以使用当前作用域内的其它变量(捕捉),也就是常说的lambda表达式,闭包。 写这个软件时,才开始学C++11,所以用得不多,也用得不好。但从最近的编码来看,已经离不开它了。 再加上移动赋值语义(std::move)到来的高效性能,我已经说服自己尽量用C++11及之后的版本了。
                                                      2. 等我有钱了
                                                        膜拜
                                                        1. 女孩不哭
                                                          谦虚了~
                                                        还没有用户发表过评论,我要发表评论
                                                        编辑评论