打印
[应用相关]

STM32H7的终极调试组件Event Recorder

[复制链接]
904|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

本章节为大家介绍终极调试方案Event Recoder,之所以叫终极解决方案,是因为所有Link通吃,支持时间测量,功耗测量,printf打印,RTX5及其所有中间件调试信息展示。

  • 8.1 重要提示(必读)

  • 8.2 Event Recorder简介

  • 8.3 创建工程模板和注意事项

  • 8.4 Event Recorder事件记录的实现

  • 8.5 Event Recoder 实现printf重定向

  • 8.6 Event Statistics 时间测量功能的实现

  • 8.7 Event Statistics 功耗测量功能的实现

  • 8.8 Event Recoder对RTX5及其所有中间件的支持

  • 8.9 JLINK配置说明

  • 8.10 STLINK配置说明

  • 8.11 CMSIS-DAP配置说明

  • 8.12 ULINK配置说明

  • 8.13 配套例子

  • 8.14 总结



使用特权

评论回复
沙发
高级安全大使|  楼主 | 2021-11-30 23:49 | 只看该作者
8.1   重要提示(必读)
  只要是MDK支持的调试下载器,基本都支持Event Recorder,本教程测试了JLINK,STLINK和CMSIS-DAP。

  务必使用MDK5.25及其以上版本。

  使用ARM_Compiler 软件包V1.4.0及其以上版本。详情看此贴:http://www.armbbs.cn/forum.php?mod=viewthread&tid=87175。

  CMSIS软件包 要是使用V5.3.0及其以上版本,详情本教程8.3小节末尾的说明。

  如果大家的MDK5.X应用不是很熟练的话,可以看论坛网友翻译的MDK5.X入门手册:http://www.armbbs.cn/forum.php?mod=viewthread&tid=31288。如果觉得看手册上手慢的话,可以直接看KEIL官方做的MDK入门系列视频,带中文字幕:http://www.armbbs.cn/forum.php?mod=viewthread&tid=82667 。

  为了实现Event Recorder组件的最高性能,最好将下载器的时钟速度设置到所支持的最大值,另外,根据需要加大EventRecorderConf.h文件中的缓冲大小,默认可以缓冲64个消息(动态更新的FIFO空间)。

  此调试组件不需要用到SWO引脚,使用标准的下载接口即可。以我们的开发板为例,用到VCC,GND,SWDIO,SWCLK和NRST。大家使用三线JLINK-OB也是没问题的,仅需用到GND,SWDIO和SWCLK。

使用特权

评论回复
板凳
高级安全大使|  楼主 | 2021-11-30 23:50 | 只看该作者
8.2   Event Recorder简介
前面的专题教程中为大家讲解了使用SEGGER的RTT功能来替代串口打印,比较方便。只是这种方法限制用户必须使用JLINK才可以。而使用Event Recorder的话,无此限制,各种LINK通吃。只要是MDK支持的即可。

Event Recorder是MDK在5.22版本的时增加的功能,到了5.25版本后,这个功能就更加完善了,增加了时间测量和功耗测量的功能。

此调试组件不需要用到SWO引脚,使用标准的下载接口即可。以我们的开发板为例,用到VCC,GND,SWDIO,SWCLK和NRST。大家使用三线JLINK-OB也是没问题的,仅需用到GND,SWDIO和SWCLK。

使用特权

评论回复
地板
高级安全大使|  楼主 | 2021-11-30 23:51 | 只看该作者
  JTAG接口和SWD接口区别

下图分别是20pin的标准JTAG引脚和SWD( Serial Wire Debug)引脚,一般SWD接口仅需要Vref,SWDIO,SWCLK,RESET和GND五个引脚即可,SWO(Serial Wire Output)引脚是可选的。有了SWO引脚才可以实现数据从芯片到电脑端的数据发送。

使用特权

评论回复
5
高级安全大使|  楼主 | 2021-11-30 23:52 | 只看该作者

使用特权

评论回复
6
高级安全大使|  楼主 | 2021-11-30 23:54 | 只看该作者
  词条 SWV(Serial Wire Viewer)

SWV是由仪器化跟踪宏单元ITM(Instrumentation Trace Macrocell)和SWO构成的。SWV实现了一种从MCU内部获取信息的低成本方案,SWO接口支持输出两种格式的跟踪数据,但是任意时刻只能使用一种。两种格式的数据编码分别是UART(串行)和Manchester(曼彻斯特)。当前JLINK仅支持UART编码,SWO引脚可以根据不同的信息发送不同的数据包。当前M3/M4可以通过SWO引脚输出以下三种信息:

使用特权

评论回复
7
高级安全大使|  楼主 | 2021-11-30 23:56 | 只看该作者
ITM支持printf函数的debug调用(工程需要做一下接口重定向即可)。ITM有32个通道,如果使用MDK的话,通道0用于输出调试字符或者实现printf函数,通道31用于Event Viewer,这就是为什么实现Event Viewer需要配置SWV的原因。

数据观察点和跟踪DWT(Data Watchpoint and Trace)可用于变量的实时监测和PC程序计数器采样。

ITM 还附带了一个时间戳的功能:当一个新的跟踪数据包进入了ITM的FIFO 时,ITM 就会把一个差分的时间戳数据包插入到跟踪数据流中。跟踪捕获设备在得到了这些时间戳后,就可以找出各跟踪数据之间的时间相关信息。另外,在时间戳计数器溢出时也会发送时间戳数据包。

使用特权

评论回复
8
高级安全大使|  楼主 | 2021-11-30 23:58 | 只看该作者
8.2.1        Event Recorder的特色
Event Recorder的特色主要有以下几点:

提升应用程序动态执行期间的检测能力。

支持的事件类型滤除机制,比如运行错误、API调用、内部操作和操作信息的区分。

可以在任务中、RTOS内核中和中断服务程序中任意调用。

对于带ITM功能的Cortex-M3/M4/M7/M33内核芯片,执行记录期间,全程无需开关中断操作。对于不带ITM功能的Cortex-M0/M0+/M23,是需要开关中断的。

支持printf重定向。

各种link通吃,支持SWD接口或者JTAG接口方式的JLINK、STLINK、ULINK和CMSIS-DAP。

对于带DWT时钟周期计数器功能的Cortex-M3/M4/M7/M33内核芯片,创建时间戳时,可以有效降低系统负担,无需专用定时器来实现。

Event Recorder执行时间具有时间确定性,即执行的时间是确定的,而且执行速度超快,因此,实际产品中的代码依然可以带有这部分,无需创建debug和release两种版本。

RTX5及其所有中间件都支持Event Recorder调试。

使用特权

评论回复
9
高级安全大使|  楼主 | 2021-11-30 23:58 | 只看该作者
8.2.2        Event Recorder是如何工作的
首先来看下面这张图:

使用特权

评论回复
10
高级安全大使|  楼主 | 2021-11-30 23:59 | 只看该作者
在截图的左下角有个Memory内存区,在这个内存区里面有一个缓冲Event Buffer,其实就是一个大数组。MDK通过访问这个数组实现消息的图形化展示。为了正确的图形化展示,数组缓冲里面的数据就得有一定的数据格式。而这个数据格式就是通过左侧截图里面的Event Recorder和Event Filter来实现的。Event Recorder的API实现数据记录和整理,Event Filter的API实现数据的筛选,从而可以选择哪些数据可以在MDK的Event Recorder调试组件里面展示出来。

这就是Event Recorder的基本工作流程。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

408

帖子

1

粉丝