Trace32 函数运行时未按预期工作

Trace32 Function RunTime does not work as expected

我正在尝试调试一段代码从点A到函数调用B的执行流程。

为此,我使用 cmm 脚本激活了一些 Trace 图形

SYStem.RESetTarget
Break.Delete
Break EcuM_Prv_StartOS
Go
WAIT !STATE.RUN() 5.s
Trace.Init
Trace.METHOD SNOOPer
Trace.Mode PC
Trace.Arm
Break  RE_CS_S_SquibDrv_Reset_func
Go
WAIT !STATE.RUN() 5.s
Trace.CHART.FUNC

我在图表中期望的是看到所有函数调用和从 A (EcuM_Prv_StartOS) 到 B (RE_CS_S_SquibDrv_Reset_func)。 但是相反,我只看到介于两者之间的一些函数,当我探测是否执行了哪些函数时,我还在图中附加了 window 和堆栈框架,它有效地显示了所有调用,直到我在 B 中的断点

所以我想知道是我做错了什么还是这张图没有像我预期的那样工作,意思是显示了代码的所有执行流程。

注:uC为英飞凌三核TC27X;而这个核心其实并没​​有内部的TRACE能力。但是此功能位于 Perf TAB 下,而不是 TRace TAB 下,并且 Powerview GUI 不会阻止使用这些图表,所以我想它是可用的,不像其他 TRACE 功能

您已选择 Trace.METHOD SNOOPer。该方法意味着定期对某些项目(在您的情况下为 PC)进行采样。这不是复杂 运行 时间分析的合适跟踪方法。

对于复杂的 运行 时间分析,您需要使用以下方法之一:

  • Trace.METHOD Anayzer(需要 PowerTrace 和 CPU 支持片外跟踪(并行或串行))
  • Trace.METHOD CAnalyzer(需要 CombiProbe 和 CPU 通过微型 4 位跟踪端口支持片外跟踪)
  • Trace.METHOD Onchip(需要 CPU 支持 onchip-trace)

既然你写道你的核心有内部跟踪能力(所以你可能有一个所谓的 "TriCore Emulation Device")我认为 Trace.METHOD Onchip 是你需要的。

对于片上迹线的时序测量,您必须确保核心的片上迹线实际提供一些时序信息和程序流信息。对于 TriCore,检查 MCDS window.

中的 TimeSTamp 和 TImeMode

为了使用程序计数器的样本来大致了解目标软件的哪一部分执行得最多,我推荐 PERF 命令组,它与 SNOOPer 非常相似。

为了测量 A 和 B 之间的时间,其中核心在 A 和 B 都停止,RunTime 命令可能也有帮助。