使用 Lauterbach 跟踪 AUTOSAR 堆栈中的一个函数

问题描述 投票:0回答:1

Lauterbach 跟踪启用和跟踪开/关之间有什么区别?使用 AUTOSAR 堆栈时如何仅跟踪一个函数?

我正在使用带有 Arm Cortex M 和 Cortex R 的微控制器。

第一种方法 &a1=sYmbol.BEGIN(函数名) &a2=sYmbol.EXIT(函数名)

;仅在用于测量的地址上生成跟踪消息 Break.Set &a1 /Program /TraceEnable Break.Set &a2 /Program /TraceEnable

;统计分析 Trace.STATistic.cycle/核心 0 ;函数跟踪 性能.lf 全部/核心 0

第二种方法 &a1=sYmbol.BEGIN(函数名) &a2=sYmbol.EXIT(函数名)

;仅在用于测量的地址上生成跟踪消息 Break.Set &a1 /Program /TraceOn Break.Set &a2 /Program /TraceOff

;统计分析 Trace.STATistic.cycle/核心 0 ;函数跟踪 性能.lf 全部/核心 0

都没有给出我想要的结果。即使我仅在函数的持续时间内启用跟踪,它仍然显示函数跟踪中运行的所有函数,并且跟踪统计信息与没有这些断点的运行时没有显着不同。

debugging embedded trace lauterbach
1个回答
0
投票

TraceEnable 以某种方式配置片上 ETM,它仅对标有 TraceEnable 的地址发出跟踪,而根本不发出其他地址的跟踪。

TraceOn/TraceOff 成对使用,并以某种方式配置片上 ETM,以便在 CPU 执行给定地址时开始/结束发出跟踪。

因此,如果您只想跟踪一个函数,您有两种选择:

  • Var.Break.Set FunctionName /Program /TraceEnable :这将记录函数体内的所有指令 - 但它不会记录您的函数调用的任何函数。注意:
    Break.Set
    会将 FunctionName 视为单个地址,而
    Var.Break.Set
    会将 FunctionName 视为地址范围。
  • Var.Break.Set sYmbol.BEGIN(FunctionName) /Program /TraceOnVar.Break.Set sYmbol.EXIT(FunctionName) /Program /TraceOff :这将记录从函数的开始到结束。这里有一个小问题:这还包括由 AUTOSAR 操作系统引起的异步中断。但是,嵌套跟踪分析(例如 Trace.STAT.Func)应考虑异步中断(如果您已加载 ORTI 文件(使用 TAKS.ORTI))

考虑一下,这些过滤器以某种方式配置片上资源,CPU 将仅生成减少的跟踪。对于您的情况,这可能是一种更合适的方法来跟踪所有内容并稍后过滤记录的数据(例如使用 GROUP)

© www.soinside.com 2019 - 2024. All rights reserved.