我正在尝试调试从A点到函数调用B点的代码执行流程。
为此,我使用cmm脚本激活了一些跟踪图形
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)的所有函数调用和所花费的时间。但是,我只在中间看到一些函数,因为我探测哪些函数已经执行了,我还在图中附加了一个窗口,其中的堆栈框架有效地显示了所有的调用,直到我在B中的断点。

因此,我想知道我是做错了什么,还是简单地说,这个图不像我预期的那样工作,意思是显示代码的所有执行流程。
注意: uC是一个Infineon TC27X;而这个核心实际上没有内部跟踪功能。但是这个功能在Perf下,而不是TRace TAB下,而Powerview没有阻止这些图表的使用,所以我想与其他跟踪功能不同,它是可用的。
发布于 2020-05-26 12:48:06
您已经选择了Trace.METHOD SNOOPer。该方法意味着某些项目(在您的情况下,PC)是定期抽样的。这并不是复杂运行时分析的合适跟踪方法。
对于复杂的运行时分析,需要使用以下内容之一:
serial))
CAnalyzer )(需要一个CombiProbe和一个支持芯片外跟踪的CPU通过一个微小的4位跟踪port)
的CPU )。
由于您编写了内核具有内部跟踪功能(因此您可能有一个所谓的"TriCore仿真设备“),所以我认为Trace.METHOD Onchip是您所需要的。
对于使用片上跟踪的定时测量,您必须确保内核的片上跟踪实际上提供了程序流信息的一些计时信息。对于TriCore,请在MCDS窗口中检查TimeSTamp和TImeMode。
为了使用程序计数器的示例来获得目标软件中执行最多的部分的粗略线索,我建议使用PERF命令组,它非常类似于SNOOPer。
为了测量A和B之间的时间,核心在A和B中都停止,RunTime命令也可能有所帮助。
https://stackoverflow.com/questions/62019720
复制相似问题