嵌入式开发<串口调试工具>


前言

   为何设计此调试工具软件,完全因为在工作中遇到的问题。如产品开发过程中涉及到众多的命令调试(可能需要使用人员记住各种命令),参数及状态数据查看、修改,串口或网口通信调试,软件在线升级等等。同样,在测试及生产过程中也会涉及到诸多的操作需求,甚至对于测试中的问题跟踪提供便利操作,包括跟踪信息、操作日志跟踪等等。所有这些可能的需求,都将其集中在一个工具软件中执行,其所具有的功能完全已经超出了普通的串口助手或网络调试助手。    这里本人对日常产品开发中对设备参数做一个说明。

1,设备参数分类

   在实际产品软件开发时,往往对设备来说有较多参数需要设置。对其归纳一下,大致可以分为4类:设备基本信息、设备工作参数、设备通信参数、设备状态,当然可能还会有一些其它参数,比如我在工作中就还会有拟合数据参数,但这不太具有一般性,以下仅说明前述的4类参数。    1) 设备基本信息:主要描述设备名称、设备ID、设备型号、软硬件版本号、生产日期、生产厂商等信息。基本信息主要用于标识一个具体设备,其信息大部分往往是固定;这个参数可读写;    2) 设备工作参数:主要描述设备工作中使用的可变参数,如某个阈值,某个时间值等。这部分参数即可以包括工厂模式修改,也可以包括客户模式修改,只需要软件进行区分即可;这个参数可读写;    3) 设备通信参数:这个参数仅对具备通信功能的设备,可能包括通信参数的修改,也可以包括通信协议的选择(设备支持多种通信协议);这个参数可读写;    4) 设备状态:主要是对设备运行的各种数据的及时读取及显示,可能包括电池电压、设备温度、通信模块信号等;这个参数仅可读;

2,设备参数修改

  以上4类参数,实际在软件进行设计时需要考虑如何对其进行读取或配置。不仅在开发调试可能使用,同时在生产、测试时同样需要使用,甚至在产品出货后在用户现场还可能进行配置修改。这就涉及到如何对参数进行修改,也属于软件设计需要考虑的内容。以下对各种修改方式作一个说明。    1) 串口调试工具修改:这是最简单也最原始的方法,也就是软件设计一组命令,并通过调试串口接收命令及数据完成设备参数的读取或修改;这种修改方式有一定的缺陷,即作为产品来说,必须在外壳提供一个串口的接口,否则就需要开盖处理;    2) 网口调试工具修改:这种方式对比串口调试工具稍微方便一些,可以设计为同样的修改方法,并且网口应该属于产品本身具有的一个接口,这样就不需要单独再为此开一个接口;    3) 网页方式修改:这种方式与第二种方式有些相似之处,并且不需要工具软件,属于比较流行的方式。但对设备MCU的资源要求较高,对于一般的单片机,尤其是资源有限的MCU,其必然不太合适;    4) 通信协议方式修改:也就是定义一个通信协议,由上位机或其它设备对它进行读取或修改。这种方式比较适合于有上位机通信的情况,并且其通用性不是太好;

3,调试工具软件

   本人根据工作需要自行开发了两款相似功能的软件工具,即串口调试工具和网络调试工具软件,这两款工具软件即具有一般的通用性(如普通的串口助手),也有一定针对性(如考虑到调试或生产的使用)。本文主要针对串口调试工具做一个说明,至于网络调试工具,将在另一份文档中说明。请参考:    此工具软件最大的特点是设计了功能按钮,设备可以输出指定格式的按钮文本,并进行保存,或者用户可以导入指定格式的按钮文本。在此后的调试中,用户无需记住所需的调试命令便可进行操作,同时若设备导入了按钮说明信息,则操作用户还可以查阅使用说明。    同时,工具软件还提供了一套自定义的设备软件升级功能,并提供了协议说明;    此外,工具软件也提供了诸多方便使用的小功能,可以更多的帮助开发人员使用;

一、软件界面

说明:发送区的功能按钮取消勾选,则显示如下的升级区

二、功能说明

1.串口设置

这个区域与串口助手相似,仅对多出的功能或有特色的功能进行说明

1)串口选择

  在点击时,将自动刷新所有串口,使得新连接的串口可立即显示出来;

2)自动换行

  串口接收按照设置的分帧时间,在结束时自动添加回车换行符号;

3)接收到文件

  可以将串口接收数据输出到指定命名的文件中,使得掉电时的调试信息得以保存在文件中。同时,提供了文件拆分功能,避免一个文件存储过大的内容(当然,不选择也会进行大文件拆分<100M>);   以下是执行后的显示:   可在存储过程中恢复串口数据到接收区,或终止文件存储;

4)保存文件

  提供2种格式存储,即文本格式与BIN格式,同时在存储BIN格式时,还可以选择自动识别功能(只需要将鼠标指定在某个位置)。自动识别功能同时将查找指定字符串“完成”或“结束”用以辅助确定数据结束(不提供此字符串则完全自动识别)。

5)查找功能

  提供在接收区指定位置开始的文本查找功能,方便调试信息的查阅;

6)保存按钮

  自动识别接收区的按钮格式文本,并进行存储;   注:按钮文本可以在设备中按照指定的格式输出,并以此按钮进行保存,后续即可操作按钮完成功能调试;关于设备输出此格式的文本信息,本文档不做说明,会在专门的嵌入式调试文档中进行说明,并提供示例代码。

2.发送操作

   这个区域与普通的串口助手区别较大,除了正常的发送操作外,还提供了发送历史数据保存与调出,辅助的校验和计算功能等;

1)打开文本

  提供ASCII文本调入功能,同时对于中文字符,可选择GB2312或不选择,这取决于调入文本时是否出现乱字符;

2)清除

  发送完成后,可手动清除发送区的数据;

3)自动

  勾选时,发送完成后自动清除发送区数据;

4)历史清除

  发送数据会自动进行存储(同时会存储数据格式<ASCII或HEX>),并通过”>>”或“<<”选择下一个或上一个历史数据,当执行“历史清除”时则会删除存储的数据;

5)计算校验和

  提供了对输入区数据的8/16/32bit累加校验和计算,CRC8/CRC16/CRC32冗余校验和计算,输入数据接受两种格式(ASCII或HEX),输出数据提供了大端与小端格式输出;   注:同时,在发送区也提供了右键菜单,执行常用的多种CRC8/CRC16/CRC32计算;

3.发送区

   这个区域主要提供数据输入,并可控制部分辅助功能;这部分的功能与普通的串口助手完全不同,并进行了有效的功能改进。以下重点对改进功能进行说明。

1)发送字符显示区域

  除基本的接收输入字符外,额外提供了多种CRC8/CRC16/CRC32的计算,具体包括如下:

CRC8:	CRC8,CRC8-ITU, CRC8-ROHC, CRC8-MAXIM;
CRC16:	CRC16_CCITT,CRC16_CCITT_FALSE,CRC16_XMODEM,CRC16_X25,CRC16_MODBUS, CRC16_IBM, CRC16_MAXIM, CRC16_USB, CRC16_DNP;
CRC32:	CRC32-IEEE802.3,CRC32-MPEG2;

   这些CRC的快捷计算,可以非常方便执行通信调试,对应软件开发与测试人员均非常方便。    当然,实际上还有一种更方便的做法,即由设备输出通信协议数据,并生成通信调试按钮,这样更方便于调测与生产测试,这部分同样会在专门的嵌入式调试文档中进行说明,并提供示例代码;    另外,在右键菜单中还提供了HEX数据与ASCII字符串的相互转换功能;

2)发送计数

  发送的数据字节数,双击清零;

3)自动发送

  提供发送时间间隔、发送次数(设置为0则持续发送),勾选“自动发送”后点击发送按钮,则开始执行,自动发送过程中,取消自动发送选项则立即停止发送。同时,发送的过程中会显示当前发送次数,并在发送完成后也会进行提示,方便测试人员掌握具体的数据。其两种状态分别如下:   发送过程中的显示:   发送完成后的显示:

4)HEX数据

  勾选时,发送区数据为十六进制数据,在执行发送时将进行检查;

5)功能按钮

  勾选时,在发送区下面的部分将显示功能按钮(同时接收操作中的“保存按钮”功能有效),具体的按钮内容由其旁边的下拉列表进行选择,如下图示:   当取消“功能按钮”选项时,发送区下部分将显示升级区内容(同时接收操作中的“保存按钮”功能无效,并且按钮文件下拉列表也变得无效);

4.接收区

   接收区与普通串口助手也增强了部分功能。

1)接收字符显示区域

  可显示ASCII数据或HEX数据,其受控于“HEX显示”选项。同时,接收区域提供右键菜单(及快捷键),可执行ASCII数据与HEX数据相互转换,复制选择区域数据以覆盖或追加的方式到发送区,对调测非常方便;

2)接收计数

  显示接收串口数据的字节数,双击可清零;

3)字体

  可设置显示区域的字体大小等格式;

4)HEX显示

  可切换接收区HEX格式数据与ASCII格式数据的显示方式;

5)暂停显示

  可使接收区域暂停接收数据的显示,但并不影响串口数据的接收,当取消暂停显示时,将此期间接收的数据显示出来;

6)时间戳

  按照设定的分帧间隔时间显示数据,且将记录收到数据的时间信息;

7)置顶

  此窗口置于其它窗口的前面;

8)分隔帧时间

  默认设置为100ms;

5.按钮区

   这部分功能为此工具的特色功能,其主要为解决调测中交互调试或设置的便捷性。    当你的设备需要执行调试或设置时,可能会设计一组专用的调试命令,可能会设计为英文字符串,也可能设计为中文字符串,但无论如何,都需要操作人员记住你设计的命令,尤其是每个人可能设计不同的命令执行相同的功能,这给实际使用造成了相当的麻烦;    如果我们设计一种标准的调试命令文本格式,由设备通过某个命令输出,并由调试工具进行保存,同时生成顾名思义的按钮,同时提供按钮操作及参数说明,这样使用起来则非常方便,即便设备被拿到其它地方,只要读出按钮文本并进行保存,则可以很容易执行操作;    同时,如果我们针对不同的场景,即针对调试、测试、生产、客户不同人员使用的情况下,提供不同级别的功能操作按钮,这样可以非常方便的设计操作级别;    最后,还可以针对我们的调测,设计出通信命令按钮,方便进行通信自测;    以下将对按钮区的功能进行说明:

1)功能按钮选择

  由发送区的功能按钮列表进行选择,这在发送区已经进行了说明;

2)导入按钮、导出按钮、删除按钮

  这一组功能分别实现如下功能:

导入按钮

  导出的按钮文件或手动生成的按钮文件,可通过此功能导入;

导出按钮

  可生成按钮文件,方便其他人导入,或参照此文件修改并生成新的按钮文本;

删掉按钮

  从本机电脑上删除当前选择的按钮文件;

3)上一页、下一页

  此工具一共设计了40个按钮,通过上一页及下一页进行翻页操作;

4)日志文件

  这是一个非常有用的功能,提供了当前按钮及串口操作的日志记录,并保存了多达30个历史日志,对于测试人员发现的问题,可以很容易进行操作记录的查找,对问题的查找提供了较大的帮助,执行这个功能时将进入下一个页面,其内容如下:   其中可以选择查看最新日志、历史日志,导出最新日志、历史日志,以及删除索引历史日志文件。查看日志文件的内容如下:   同时,按钮功能还提供了诸多功能如下:

5)按钮功能说明

A, 勾选按钮提示框

  则鼠标移动到按钮上时,将以气泡方式显示按钮提示内容;提示显示如下:   或将鼠标移动到按钮上右击按钮,将弹出按钮功能说明提示框;提示框显示如下:    按钮提示内容根据规定的格式存放在按钮文本文件制定位置即可;

B, 按钮参数输入开关

  在按钮文本中关于按钮参数的开关中设置为“Y”,则在操作按钮时,工具软件将检查输入区是否有参数数据,如没有则进行提示:

C, 按钮功能确认开关

  在按钮文本中关于按钮确认的开关中设置为“Y”,则在操作按钮时,工具软件将提示是否确认操作:

D, 其它辅助功能

a,同步时间

  根据个人工作中的需要,经常需要使用电脑对设备进行时钟设置,此工具软件专门提供了两种方法同步时间:   同步时间选项:   勾选时,点击任何功能按钮,则自动获取当前的系统时间并作为参数一起与功能按钮发送;   输入区导入时间:   在系统时间旁的时间值上点击,则在发送区自动添加当前时间值(可通过勾选系统时间下面的选项切换两种时间格式),点击自己设定的功能按钮,则将发送区时间值作为参数一起发送;

b, 参数空格

  在输入的参数与功能按钮一起发送时,可选择参数与功能按钮间是否有空格,未勾选时有空格,勾选则无空格;

c, 提示信息

  点击任何功能按钮,其所执行的按钮命令及其参数数据将被显示在提示信息栏,双击提示信息栏将清除数据;

6.升级区

   工具软件提供了一种自定义协议的软件升级功能,通过去掉“按钮功能”勾选项便可进入升级功能。

1)协议说明

  对自定义升级协议进行了较详细的说明,设备端只要按照此协议执行,即可完成设备通过IAP完成设备的APP升级;具体内容请在工具软件内点击“协议说明”查看;

2)参数设置

  接收延时,设置串口数据帧接收延迟时间(可使用默认值即可),包大小为工具软件下载到设备的文件包大小(包含:512/1024/2048/4096),升级参数:可在执行“设备升级”命令中携带发送区输入的参数数据;

3)选择升级文件

  点击“打开…”选择升级bin文件;如按照协议说明内的要求在指定位置填写了规定的信息,则在产品名称、软件版本栏将显示升级文件的具体内容;同时,会在文件大小、校验和栏显示相关内容;另外,只要选择文件栏显示有调入的升级文件,后面需要再次升级时,不必再次选择升级文件,工具软件会自动重新载入;

4)文件下载

  点击“开始下载”则开始执行文件包传输,升级进度及升级结果将动态显示进度,并在升级完成并成功后均进行提示;同时,下载过程中,可随时点击“停止下载”终止升级;

6.按钮格式文件

   按钮格式文件可以通过设备自身输出,并使用“保存按钮”功能自动保存。也可以根据按钮格式进行编辑,并使用“导入按钮”功能进行导入。以下将以实际的按钮格式文件进行格式说明:

普通的按钮文件:

按钮文件:DBLJ-X8测试按钮
=====================================================================
按钮名称              按钮命令      确认 参数 提示信息
---------------------------------------------------------------------
{
          
   重启设备}            {
          
   C-RESTARTS}	{
          
   N}	{
          
   N}	{
          
   无}
{
          
   清除记录}            {
          
   C-CLEARREC}	{
          
   Y}	{
          
   N}	{
          
   无}
{
          
   读写系统时间}        {
          
   C-DATETIME}	{
          
   N}	{
          
   N}	{
          
   直接点击该按钮后进行读取
如果把读取的内容复制到发送区,修改参数后点击该按钮则可以进行设置}
{
          
   读写基本信息}        {
          
   C-BASEINFO}	{
          
   N}	{
          
   N}	{
          
   直接点击该按钮后进行读取
如果把读取的内容复制到发送区,修改参数后点击该按钮则可以进行设置}
{
          
   读写工作参数}        {
          
   C-WORKINFO}	{
          
   N}	{
          
   N}	{
          
   直接点击该按钮后进行读取
如果把读取的内容复制到发送区,修改参数后点击该按钮则可以进行设置}
{
          
   读写通信参数}        {
          
   C-COMPARAM}	{
          
   N}	{
          
   N}	{
          
   直接点击该按钮后进行读取
如果把读取的内容复制到发送区,修改参数后点击该按钮则可以进行设置}
{
          
   读设备状态}          {
          
   C-DEVSTATU}	{
          
   N}	{
          
   N}	{
          
   无}
{
          
   读所有告警记录}      {
          
   C-WARN-ALL}	{
          
   N}	{
          
   N}	{
          
   无}
{
          
   读部分告警记录}      {
          
   C-WARNSOME}	{
          
   N}	{
          
   N}	{
          
   无}
{
          
   读所有调试开关}      {
          
   C-ALL---SW}	{
          
   N}	{
          
   N}	{
          
   无}
{
          
   设置温度信息开关}    {
          
   C-TEMP-MSG}	{
          
   N}	{
          
   N}	{
          
   无}
{
          
   设置通信信息开关}    {
          
   C-COM--MSG}	{
          
   N}	{
          
   N}	{
          
   无}
{
          
   设置自检信息开关}    {
          
   C-CHECKMSG}	{
          
   N}	{
          
   N}	{
          
   无}
{
          
   设置存储信息开关}    {
          
   C-STOREMSG}	{
          
   N}	{
          
   N}	{
          
   无}
{
          
   立即执行设备自检}    {
          
   C-ZEROSAMPLE}	{
          
   N}	{
          
   N}	{
          
   无}
{
          
   显示任务状态}        {
          
   C-TASKSTATUS}	{
          
   N}	{
          
   N}	{
          
   无}
{
          
   周期显示任务状态}    {
          
   C-PERIOTASKSTATUS} {
          
   N} {
          
   N}	{
          
   无}
{
          
   设置参数为默认值}    {
          
   C_SETDEFAULT}	{
          
   N}	{
          
   N}	{
          
   无}
{
          
   恢复出厂设置}        {
          
   C_SETFACTORY}	{
          
   N}	{
          
   N}	{
          
   无}
=====================================================================

说明: 按钮文件包括2部分

1)标题

  按钮文件:DBLJ-X8测试按钮,在":"后面的即为按钮标题,此处定义的文本将被显示在按钮列表及按钮区的标题中,表明当前选择的按钮文件是哪一个;

2)内容

  内容标题:按钮名称 按钮命令 确认 参数 提示信息   按钮内容:{} {} {} {} {},每一项的内容均为文本字符,并被{}包括进去;

A)内容-按钮名称

  按钮名称,可定义为最多8个中文字符或16个英文字符;   按钮名称,被用于显示在按钮功能上的字符串;   按钮名称,定义如{重启设备}

B)内容-按钮命令

  按钮命令,可定义为中文或英文字符,无长度限制(但尽量控制在16个英文字符内);当按钮被定义为通信功能时,此按钮命令可能被定义为较长的16进制字符数据;   按钮命令,被用于点击该按钮时,通过串口进行发送(可为ASCII,也可以是16进制,其受“参数”控制);   按钮命令,定义为普通命令时,如{C-RESTARTS};   按钮命令,定义为通信数据时,如{43 2D 34 33 33 53 45 4E 44 F1 1A AA 55 10 01 00 EF FE};

C)内容-确认

  确认,可定义为‘Y’或‘N’;   确认,被用于指定点击该按钮时是否弹出对话框提示用户确认当前操作;

D)内容-参数

  参数,可定义为‘Y’、‘N’、‘H’;   参数,被用于控制是否需要输入参数,或确定按钮命令为ASCII还是16进制数据。其中‘H’表示按钮命令为16进制数据,否则为ASCII数据;Y’或‘N’表示该命令是否需要输入参数,并在需要输入参数时,弹出对话框提示用户输入参数,同时进行参数输入提示;

E)内容-提示信息

  提示信息,定义为任意的字符串;   提示信息,被用于用户获取按钮使用说明(通过右击功能按钮或气泡显示),即可包括功能使用说明,也可以包括输入参数说明。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/290696.html

(0)
上一篇 2022年10月7日
下一篇 2022年10月7日

相关推荐

发表回复

登录后才能评论