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
都没有给出我想要的结果。即使我仅在函数的持续时间内启用跟踪,它仍然显示函数跟踪中运行的所有函数,并且跟踪统计信息与没有这些断点的运行时没有显着不同。
TraceEnable 以某种方式配置片上 ETM,它仅对标有 TraceEnable 的地址发出跟踪,而根本不发出其他地址的跟踪。
TraceOn/TraceOff 成对使用,并以某种方式配置片上 ETM,以便在 CPU 执行给定地址时开始/结束发出跟踪。
因此,如果您只想跟踪一个函数,您有两种选择:
Break.Set
会将 FunctionName 视为单个地址,而 Var.Break.Set
会将 FunctionName 视为地址范围。考虑一下,这些过滤器以某种方式配置片上资源,CPU 将仅生成减少的跟踪。对于您的情况,这可能是一种更合适的方法来跟踪所有内容并稍后过滤记录的数据(例如使用 GROUP)