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

  • 前言
    • 1,设备参数分类
    • 2,设备参数修改
    • 3,调试工具软件
  • 一、软件界面
  • 二、功能说明
    • 1.串口设置
      • 1)串口选择
      • 2)自动换行
      • 3)接收到文件
      • 4)保存文件
      • 5)查找功能
      • 6)保存按钮
    • 2.发送操作
      • 1)打开文本
      • 2)清除
      • 3)自动
      • 4)历史清除
      • 5)计算校验和
    • 3.发送区
      • 1)发送字符显示区域
      • 2)发送计数
      • 3)自动发送
      • 4)HEX数据
      • 5)功能按钮
    • 4.接收区
      • 1)接收字符显示区域
      • 2)接收计数
      • 3)字体
      • 4)HEX显示
      • 5)暂停显示
      • 6)时间戳
      • 7)置顶
      • 8)分隔帧时间
    • 5.按钮区
      • 1)功能按钮选择
      • 2)导入按钮、导出按钮、删除按钮
        • 导入按钮
        • 导出按钮
        • 删掉按钮
      • 3)上一页、下一页
      • 4)日志文件
      • 5)按钮功能说明
        • A, 勾选按钮提示框
        • B, 按钮参数输入开关
        • C, 按钮功能确认开关
        • D, 其它辅助功能
          • a,同步时间
          • b, 参数空格
          • c, 提示信息
    • 6.升级区
      • 1)协议说明
      • 2)参数设置
      • 3)选择升级文件
      • 4)文件下载
    • 6.按钮格式文件
      • 1)标题
      • 2)内容
        • A)内容-按钮名称
        • B)内容-按钮命令
        • C)内容-确认
        • D)内容-参数
        • E)内容-提示信息

前言

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

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} {直接点击该按钮后进行读取\r\n如果把读取的内容复制到发送区,修改参数后点击该按钮则可以进行设置}
{读写基本信息}        {C-BASEINFO}    {N} {N} {直接点击该按钮后进行读取\r\n如果把读取的内容复制到发送区,修改参数后点击该按钮则可以进行设置}
{读写工作参数}        {C-WORKINFO}    {N} {N} {直接点击该按钮后进行读取\r\n如果把读取的内容复制到发送区,修改参数后点击该按钮则可以进行设置}
{读写通信参数}        {C-COMPARAM}    {N} {N} {直接点击该按钮后进行读取\r\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)内容-提示信息

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

如果你感兴趣,可查看其它文档.
单片机软件常用设计分享(一)驱动设计之按键设计
单片机软件常用设计分享(二)驱动设计之LED灯显示设计
单片机软件常用设计分享(三)驱动设计之数码屏显示设计
单片机软件常用设计分析(四)驱动设计之串口驱动设计
嵌入式开发<网络调试工具>
嵌入式开发<单片机软件调试>
嵌入式开发<单片机软件升级>

嵌入式开发<串口调试工具>相关推荐

  1. micropython是啥 知乎_嵌入式开发必备调试工具:Micro-Lab

    在工作中,以什么样的方式向领导汇报工作最直接高效呢?当然是图形界面!图形界面更好表达一个程序设计的逻辑思维,一目了然,本次介绍的Micro-Lab出自风媒电子-赵工之手. 1.什么是Micro-Lab ...

  2. Linux 嵌入式开发 网络编程: day4

    [1]IO多路复用  (并发服务器) 想实现服务器处理多个客户端连接请求或数据收发的话,(实现并发) 1. 多进程的方式; 2. 多线程的方式; 3. IO多路复用 a. select 弊端: 1. ...

  3. 嵌入式开发<网络调试工具>

    嵌入式开发<网络调试工具> 前言 1,设备参数分类 2,设备参数修改 3,调试工具软件 一.软件界面 二.功能说明 1.网络设置 1)TCP Client设置 A, 协议类型: B, 远程 ...

  4. 嵌入式开发<单片机软件调试>

    嵌入式开发<单片机软件调试> 前言 一.交互式调试设计依赖工具 二.交互式调试设计的使用方法 1.普通方法 2.定制方法 三.交互式调试产品设计 1, 全局需要使用的宏定义 2,设计一个功 ...

  5. 嵌入式开发<单片机软件升级>

    嵌入式开发<单片机软件升级> 前言 一.单片机软件升级方式 二.IAP升级原理 1.FLASH区域划分 2. FLASH各个区域作用 三.IAP软件BOOT设计 1. 第一种设计方法 2. ...

  6. MicroLab专业的嵌入式开发调试工具集免费试用

    MicroLab是一款专业的嵌入式开发调试工具集.MicroLab集成了串口调试和网络调试,以及基于串口和网络功能的虚拟示波器.图形化上位机编程工具--组态画布,和其他十余种实用功能. 这些功能包括: ...

  7. C++-网络库:Poco概述【开源的C++类库的集合】【提供简单的、快速的网络和可移植应用程序的C++开发】【和C++标准库可以很好的集成并填补C++标准库的功能空缺】【适合嵌入式开发】

    学习一个框架前,要先明白它的是什么,为什么,怎么用.下面这些文字,是从中文poco官网上转过来的,正如poco c++库的特点,非常清晰,代码风格更是一目了然: poco开发库的特点,非常适合写后台处 ...

  8. 嵌入式 linux 系统开发网络的设置

    目录 一.前言 二.linux网络静态地址设置 前言 为什么要对linux系统下的ubuntu进行网络设置呢? 因为我们在嵌入式开发中,我们要保证windows系统.linux系统.开发板的ip要处于 ...

  9. 有哪些工具可以让嵌入式开发事半功倍?详细盘点工程师必备工具

    嵌入式开发就是指在嵌入式操作系统下进行开发,一般常用的系统有μcos,vxworks,linux,android等.当然,对于嵌入式或单片机工程师的利器就是C语言.C++或汇编语言.那么有哪些好工具可 ...

最新文章

  1. 选错导师误终身?Nature大调查显示 :全球1/4博士生想换导师
  2. 使用google云(GCP)二次利用安装kali Linux(kali browser)
  3. linux pci扫描链表,Linux Kernel ---- PCI Driver 分析
  4. Oracle 11g 之自动收集统计信息
  5. 经典java NIO框架
  6. java输出1-100内的所有5的倍数,5个一行
  7. java比赛_javamq
  8. 机器学习九大挑战(转载)
  9. 封条格式用word怎么打_封条格式用word怎么打
  10. 第二个案例实操——创建Bean类
  11. 第四季-专题19-I2C驱动程序设计
  12. PSPNet论文详解
  13. springboot+vue基本微信小程序的疫情防控平台系统 计算机毕业设计
  14. 【PostgreSQL】函数之百分位数中位数:percentile_cont()
  15. 数据集仓库 —— UCI Machine Learning Repository
  16. 安卓设置keychain_keychain(一)
  17. ElasticSearch-高级搜索
  18. CodeForce 597ADivisibility
  19. Ubuntu VSCode C++代码格式化
  20. css 鼠标滑过li变背景图,CSS定义鼠标滑过变换背景的导航菜单

热门文章

  1. [菜鸟训练]347. 前 K 个高频元素
  2. 支付宝手机网站支付、支付查询、退款、退款查询、转账接口整合
  3. 简单易懂的CRC校验原理阐述
  4. 信息化建设规划_统筹规划精准发力打造信息化建设新篇章
  5. 深度学习之图像分类(十二)--MobileNetV3 网络结构
  6. 知识共享有多难?做好这几点,问题统统解决
  7. Redis的应用场景
  8. 成语消消乐java代码_成语消消看-4399成语消消看-成语消消看答案大全
  9. springboot+REST
  10. python联机麻将_python麻将和牌算法