JNH官网

【ARM】Keil MDK Trace ETM功能

一、硬件、软件环境

1、硬件环境:

(1)开发板:ATSAMV71Q21开发板(注:开发板需带ETM模块接口)




(2)仿真器:ULINK pro仿真器(注:仿真器支持ETM功能即可)




2、软件环境:

(1)系统:window11 专业版

(2)软件:Keil MDK pro版



二、ETM功能配置流程

1、新建初始化文件”SAMx7_TP.ini”


初始化文件的内容如图所示:(注:不同型号的芯片的对应trace功能的初始化文件可能不一致,不同芯片的trace功能的初始化文件可以参考帮助文档Configure Cortex-M Devices for Tracing部分)


初始化文件主要内容是将ETM功能使能和对应的GPIO口进行对应的使能。

首先是对于电源管理控制器(PMC)进行写保护失能,使得可以对PMC对应的寄存器进行操作。据数据手册查询,PCK3时钟对应的是ETM外部设备,所以要设置ETM的主时钟,使能PCK3时钟。


然后是使能PIOD的时钟,要对于PIOD组进行设置也需要对于PIOD的写保护进行失能并禁止PIO控制相对应的引脚,启用对于对应引脚的外围控制,让仿真器可以对于对应IO口进行控制。

然后是对于IO口的复用,需要对于寄存器0和寄存器1进行设置。让PD8设置成无上拉下拉,PD7~4设置成输入改变中断模式,无上拉下拉。

最后设置一个重启执行函数OnResetExec,让该函数可以通过uVision的“重置”按钮重置后执行。


2、添加初始化文件:将初始化文件添加到Keil->option for target->Debug->Initialization File中,




3、选择仿真器

仿真器需要选择支持ETM功能的,而ULINK pro仿真器支持ETM功能,所以仿真器选项可以选择”ULINK Pro Cortex Debugger”。


3、配置Keil的debug和trace选项

(1)点击settings进入设备设置界面


(2)在Debug选项中,需要将port选择SW接口


(3)然后在trace配置上,需要设置core clock,核心时钟必须与设备配置相对应。并且勾选”Use Core Clock”,让trace clock和core clock保持一致。


(4)然后,勾选”Trace Enable”和”ETM Trace Enable”,让Trace和ETM功能使能。


(5)Trace Port的设置必须始终与”xxxx.ini”文件中的设置相对应。在配置文件中,配置了 PD4-PD8五个IO口,其中TRACED[0..3]在引脚PD4到PD7上输出,跟踪时钟TRACECK 在引脚PD8上配置。所以,Trace Port选择”Sync Trace Port with 4-bit Data”。

CLK为引脚TRACECLK设置以ns为单位的信号延迟。通常,无需更改,0.0 ns的值就足够了。

D0..D3为引脚TRACEDATA[0]..TRACEDATA[3]设置以ns为单位的信号延迟。通常,无需更改,0.0 ns的值就足够了。

(补充资料:什么时候需要调整信号延迟)


(6)这里的PC Sampling部分定义了生成仪器跟踪数据的间隔。除了周期性生成外,还 可以为每个存储器读/写操作生成PC采样。设置PC的采样间隔为1024*16.(周期性PC 值的频率 = 核心时钟/预分频器)


(7)Trace Event设置这里可以根据需求自行进行勾选,勾选项会在Event Counters窗口出展示。



CPI(每条指令的周期):用于指令周期计数估计的通用计数器。此计数器在执行多周期指令所需的每个额外周期上递增。在任何指令获取暂停的每个周期,计数器也会递增。指令的第一个周期和LSU记录的周期不计数。

EXC(异常开销):计数器在与异常条目或返回相关联的每个周期上递增。也就是说,它统计与入口堆叠、返回取消堆叠、抢占和其他异常相关进程相关的周期。

SLEEP(睡眠周期):无论是由WFI或WFE指令启动,还是由退出时休眠功能启动,计数器在与省电相关的每个周期上递增。

LSU(加载存储单元周期):此计数器在执行多周期加载存储指令所需的每个额外周期上递增。它不计算执行任何指令所需的第一个周期。

FOLD(折叠指令):计数器对以零周期执行的任何指令递增(例如,IT指令被折叠且不使用任何周期)。

EXCTRC(异常跟踪):计数器在异常、中断条目和中断退出时递增。“跟踪异常”窗口显示统计信息和事件查看器随时间的执行情况。


5、完成上述步骤,Trace功能和ETM功能就配置完成,进入调试界面后,界面下方出现”Trace: Running”则表示配置成功,可以使用Trace、ETM功能。


若出现的不是”Trace:Running”,需要根据对应的提示信息对于配置流程进行筛查。

例如:

“Trace:Communication Error”:表示检测到无效通信。不正确的时钟设置或硬件问题导致此消息。在main()程序中更改核心时钟的应用程序可能会在数据捕获错误时抛出此消息。一旦核心时钟调整到系统设置,此错误消息将消失。

“Trace:HW Buffer”:表示检测到溢出USB端口无法以适配器发送数据的速度接收数据。关闭不需要的跟踪事件,或跳过“PC采样”。

“Trace:SW Buffer”:表示PC上的内部SW缓冲区溢出。调整跟踪端口的SWO时钟预分频器或调试端口的最大时钟。

“Trace:No Synchronization”:表示未从目标接收到同步数据包。跟踪硬件未连接或配置不正确。

“Trace:Data Stream Error”:表示跟踪端口太忙,无法传输所有跟踪数据包。捕获太多跟踪数据时会发生这种情况。减少跟踪事件的数量。“指令跟踪窗口”显示溢出发生的位置。




三、功能展示

1、代码覆盖率功能:可以显示函数的执行百分比了。


2、性能分析功能:可以查看工程中每一个文件、函数、语句的执行时间和占用总时间的比例。


jnh官网 jnh官网 jnh官网 jnh官网 金年会 金年会 金年会 金年会