第11章      RL-TCPnet调试方法

本章节为大家讲解RL-TCPnet的调试方法,RL-TCPnet的调试功能其实就是通过串口打印实时监控运行状态。而且RL-TCPnet的调试设置比较简单,因为官方已经为我们做好了调试版本的库,直接添加到工程,并使能相应的宏配置就可以使用了。

本章教程含STM32F407开发板和STM32F429开发板的调试方法说明。

11.1  初学者重要提示

11.2  RL-TCPnet调试方法设置

11.3  实验例程说明

11.4  总结

11.1  初学者重要提示

1、本章节讲解的内容相对比较简单,主要是配置Net_Debug.c文件即可。由于Net_Debug.c文件中可以使能的选项较多,实际测试中使能太多的话,会打印出非常多的信息,完全看不过来,所以实际测试的时候最好需要调试哪些功能,就开启哪些选项。

2、本章节使用的例子是由前面移植章节配套的例子简单修改而来。另外,对于本章节配套的例子,大家仅需要知道如何使能调试功能即可,具体代码实现的功能会在后面章节逐渐讲解。

11.2  RL-TCPnet调试方法设置

下面分四步进行说明RL-TCPnet的调试方法。

11.2.1  添加调试版本的RL-TCPnet库和配置文件

KEIL官方提供的库有如下几个版本,路径C:\Keil_v474\ARM\RV31\LIB:

其中TCP_CM3.lib是正式版本库,TCPD_CM3.lib是调试版本库,其中字母D表示Debug的意思。虽然标注的是CM3内核,但同样可以用于CM4内核,也就是说CM3和CM4内核的MCU都是用的这个版本的库。要用到调试功能,就得使用库TCPD_CM3.lib,而且要添加调试配置文件Net_Debug.c。前面章节的裸机,RTX,uCOS-III和FreeRTOS的四种移植版本都是用的这个库。比如裸机版本:

如果使用正式版,就不需要文件Net_Debug.c了,仅需移植库文件TCP_CM3.lib就可以了。

11.2.2 调试级别配置

(重要说明,RL-TCPnet的调试是通过串口打印出来的)

RL-TCPnet的调试功能是通过配置文件Net_Debug.c实现。在MDK工程中打开文件Net_Debug.c,可以看到下图所示的工程配置向导:

Print Time Stamp

勾选了此选项的话,打印消息时,前面会附带时间信息。

其它所有的选项

默认情况下,所有的调试选项都是关闭的,每个选项有三个调试级别可选择,这里我们以Memory Management Debug为例,点击下拉列表,可以看到里面有Off,Errors only和Full debug三个调试级别可供选择,每个调试选项里面都是这三个级别。

Off:表示关闭此选项的调试功能。

Errors only:表示仅在此选项出错时,将其错误打印出来。

Full debug:表示此选项的全功能调试。

11.2.3 打印函数重定向

RL-TCPnet的调试功能就是通过调用函数printf实现打印功能,所以需要我们做一个串口重定向,也就是修改函数fputc,只不过这里稍有区别,对于换行符 \n 要特殊处理下,将其修改成回车符 \r 。否则打印出来的消息会错行,比较混乱。

/*

*********************************************************************************************************

*    函 数 名: fputc

*    功能说明: 重定义putc函数,这样可以使用printf函数从串口1打印输出

*    形    参: 无

*    返 回 值: 无

*********************************************************************************************************

*/

int fputc(int ch, FILE *f)

{

#if 0    /* 将需要printf的字符通过串口中断FIFO发送出去,printf函数会立即返回 */

     comSendChar(COM1, ch);

     return ch;

#else    /* 采用阻塞方式发送每个字符,等待数据发送完毕 */

     /* 使用了RL-TCPnet网络协议栈,这里特别调整下 */

     if (ch == '\n') 

     {

         USART_SendData(USART1, '\r');

          /* 等待发送结束 */

         while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET){}

     }

     USART_SendData(USART1, (uint8_t) ch);

     /* 等待发送结束 */

     while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET){}

     return ch;

#endif

}

11.2.4 实际效果

下面开启如下几个选项的全功能调试(Application Debug Definitions的所有选项都是关闭的,没有开启):

这里开启的选项有点多,实际应用时,建议需要调试哪方面功能的时候,打开哪些选项,否则打印出来的信息非常多。我们这里只是为了让大家看效果,所以打开的选项稍多,显示效果如下:

11.3 实验例程说明

11.3.1 STM32F407开发板实验

本章节仅仅是教会大家调试方法,具体实验内容还不做讲解,仅需学会调试功能的开启方法即可。

对于STM32F407开发板,本章节配套了如下几个例子(这些例子与前面移植章节的例子是一样的,仅仅是修改了配置文件,所以其它功能看前面移植章节的说明即可。裸机版本是第7章的7.2.5小节,RTX版本是第8章的8.2.5章节,uCOS-III版本是第9章的9.2.6章节,FreeRTOS版本是第10章的10.2.6章节):

对于这四个例子,Net_Debug.c配置文件对三种调试级别都做了选择,部分是Off,部分是Errors only,还有一部分是Full Debug。

这里仅对TCPnet Debug Definitions部分做了配置,而Application Debug Definitions未做配置,因为本章节提供的测试例子没有用到这些功能。

由于这四个例子都是采用同样的配置,这里仅贴出裸机时的信息打印效果:

其它的调试选项,大家也可以自行开启测试,我们这里就不测试了。另外注意,选项不要开的太多,否则打印的信息内容太多,看不过来。

11.3.2 STM32F429开发板实验

本章节仅仅是教会大家调试方法,具体实验内容还不做讲解,仅需学会调试功能的开启方法即可。

对于STM32F429开发板,本章节配套了如下几个例子(这些例子与前面移植章节的例子是一样的,仅仅是修改了下配置文件,所以其它功能看前面移植章节的说明即可。裸机版本是第7章的7.3.5小节,RTX版本是第8章的8.3.5章节,uCOS-III版本是第9章的9.3.6章节,FreeRTOS版本是第10章的10.3.6章节):

对于这四个例子,Net_Debug.c配置文件对三种调试级别都做了选择,部分是Off,部分是Errors only,还有一部分是Full Debug。

这里仅对TCPnet Debug Definitions部分做了配置,而Application Debug Definitions未做配置,因为本章节提供的测试例子没有用到这些功能。

由于这四个例子都是采用同样的配置,这里仅贴出裸机时的信息打印效果:

其它的调试选项,大家也可以自行开启测试,我们这里就不测试了。另外注意,选项不要开的太多,否则打印的信息内容太多,看不过来。

11.4 总结

本章节为大家讲解这么多,建议实际操作演练下,实践出真知。

【安富莱】【RL-TCPnet网络教程】第11章 RL-TCPnet调试方法的更多相关文章

  1. 【安富莱】STM32H7用户手册发布,重在BSP驱动包设计方法,HAL库的框架学习,授人以渔,更新至63章(2019-07-21)

    说明: 1.本教程重在BSP驱动包设计方法和HAL库的框架学习,并将HAL库里面的各种弯弯绕捋顺,从而方便我们的程序设计. 2.由于是基于HAL库的文档,所以不限制H7系列,其它F1,F2,F3,F4 ...

  2. 【安富莱STM32H7教程】第1章 初学STM32H7的准备工作

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第1章   初学STM32H7的准备工作 俗话说万事开头 ...

  3. 【安富莱】RTX嵌入式操作系统教程发布,支持F103,F407和F429,含81个配套例程(2017-10-17)

    前言说明:1. 首先感谢大家对我们安富莱电子一年来的支持,2016年我们会再接再厉推出更好的教程. 2. 估计也有网友会问RTX的优势在那里,针对这个问题,教程中第一章分为6条专门回答了这个问题,有兴 ...

  4. 【安富莱】【RL-TCPnet网络教程】第10章 RL-TCPnet网络协议栈移植(FreeRTOS)

    第10章     RL-TCPnet网络协议栈移植(FreeRTOS) 本章教程为大家讲解RL-TCPnet网络协议栈的FreeRTOS操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移植就 ...

  5. 【安富莱】【RL-TCPnet网络教程】第8章 RL-TCPnet网络协议栈移植(RTX)

    第8章        RL-TCPnet网络协议栈移植(RTX) 本章教程为大家讲解RL-TCPnet网络协议栈的RTX操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移植就比较容易了,主要 ...

  6. 【安富莱】【RL-TCPnet网络教程】第7章 RL-TCPnet网络协议栈移植(裸机)

    第7章        RL-TCPnet网络协议栈移植(裸机) 本章教程为大家讲解RL-TCPnet网络协议栈的裸机移植方式,学习了上个章节讲解的底层驱动接口函数之后,移植就比较容易了,主要是添加库文 ...

  7. 【安富莱专题教程第3期】开发板搭建Web服务器,利用花生壳让电脑和手机可以外网远程监控

    说明:1.  开发板Web服务器的设计可以看我们之前发布的史诗级网络教程:链接.2.  需要复杂些的Web设计模板,可以使用我们V6开发板发布的综合Demo:链接.3.  教程中使用的是花生壳免费版, ...

  8. 【安富莱TCPnet网络教程】HTTP通信实例

    第41章      HTTP超文本传输协议基础知识 本章节为大家讲解HTTP(HyperText Transfer Protocol,超文本传输协议),从本章节开始,正式进入嵌入式Web的设计和学习. ...

  9. 【安富莱专题教程第7期】终极调试组件Event Recorder,各种Link通吃,支持时间和功耗测量,printf打印,RTX5及中间件调试

    说明:1.继前面的专题教程推出SEGGER的RTT,JScope,Micrium的uC/Probe之后,再出一期终极调试方案Event Recoder,之所以叫终极解决方案,是因为所有Link通吃.  ...

随机推荐

  1. ogma

    Ogma是Linkurious的JavaScript图形可视化库.Ogma的一个实例是一个javascript对象,它在内部存储一个图形, 并根据样式规则在HTML容器中呈现它. Ogma有两个版本: ...

  2. 自定义Section

    转载 :http://www.cnblogs.com/gaobing/p/6047746.html <configSections> 元素必须是 configuration 元素的第一个子 ...

  3. About Why Inline Member Function Should Defined in The Header File

    About why inline member function should defined in the header file. It is legal to specify inline on ...

  4. js常见的面试题

    css 选择符有哪些 通配选择符 *类选择符 classid选择符 id属性选择符 input[name=button]包含选择符 类似 div span子对象选择符 类似 div > span ...

  5. sqlserver 删除表 视图 函数 存储过程

    use tax_ceshiselect 'DROP TABLE '+name from sysobjects where type = 'U'union select 'DROP VIEW '+nam ...

  6. 理解WindowManagerService

    --摘自<Android进阶解密> *WMS的职责* 1)窗口管理 WMS负责窗口的启动.添加和删除,另外窗口的大小和层级也是由WMS进行管理的 2)窗口动画 WMS的动画子系统Windo ...

  7. django framework相关的错误信息

    错误信息1: 报错信息: TypeError: In order to allow non-dict objects to be serialized set the safe parameter t ...

  8. angularjs和ajax的结合使用 (三)

    转眼九月份了,忙忙碌碌 发现今年还没开过张,写一篇吧. 15年在空闲时就倒腾过angularjs那玩意儿 ,觉得还是挺好的,李金龙那厚厚的一本书,只不过没有系统化应用.最主要的是原来有一个东西没有用到 ...

  9. SpringBoot使用Graylog日志收集

    本文介绍SpringBoot如何使用Graylog日志收集. 1.Graylog介绍 Graylog是一个生产级别的日志收集系统,集成Mongo和Elasticsearch进行日志收集.其中Mongo ...

  10. H5如何解监听页面退出需求???

    事发背景(时间较久): 在一个阳光明媚的一天,这天lz正在工位上悠闲的敲着代码:说时迟那时快,运营小姐姐箭步过来,让lz做一个挽留弹窗:我当时一听这TM不是流氓么.于是便有了以下的故事... 如何实现 ...