Функция Trace32 RunTime не работает должным образом - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь отладить поток выполнения фрагмента кода от точки 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

Я ожидал, что на графике Chart будут отображаться все вызовы функций и время, потраченное на любую функцию от A ( EcuM_Prv_StartOS ) до B ( RE_CS_S_SquibDrv_Reset_fun c). Но вместо этого я вижу только некоторые промежуточные функции. Когда я проверяю, были ли выполнены какие-то функции, я также прикрепляю к графику окно со стековым фреймом, которое эффективно показывает все вызовы до моей точки останова в B enter image description here

Поэтому мне интересно, делаю ли я что-то не так, или этот график просто не работает так, как я ожидал, что означает отображение всего потока выполнения кода. представляет собой Infineon tricore TC27X; и это ядро ​​фактически не имеет внутренних возможностей TRACE. Но эта функция находится под Perf TAB , а не TRace TAB , и Powerview GUI не блокирует использование этих диаграмм, поэтому я думаю, что его можно использовать в отличие от других функций TRACE

1 Ответ

1 голос
/ 26 мая 2020

Вы выбрали Trace.METHOD SNOOPer. Этот метод означает, что некоторые элементы (в вашем случае P C) периодически отбираются. Это не подходящий метод трассировки для сложного анализа во время выполнения.

Для комплексного анализа во время выполнения вам необходимо использовать одно из следующих:

  • Trace.METHOD Anayzer (требуется PowerTrace и процессор, поддерживающий offchip -trace (параллельный или последовательный))
  • Trace.METHOD CAnalyzer (требуется CombiProbe и ЦП, поддерживающий трассировку вне кристалла через крошечный 4-битный порт трассировки)
  • Trace.METHOD Onchip (требуется процессор, поддерживающий onchip-trace)

Поскольку вы пишете, что ваше ядро ​​имеет возможности внутренней трассировки (так что у вас, вероятно, есть так называемая «эмуляция TriCore Устройство ») Думаю Trace.METHOD Onchip - это то, что вам нужно.

Для измерений времени с трассировкой на кристалле вы должны убедиться, что трассировка на кристалле вашего ядра действительно предоставляет некоторую информацию о синхронизации с информацией о потоке программы. Для проверки TriCore TimeSTamp и TImeMode в окне MCDS.


Для использования примеров программного счетчика, чтобы получить лишь приблизительное представление о том, какая часть вашего целевого программного обеспечения выполняется чаще всего, я рекомендую PERF группа команд, которая очень похожа на SNOOPer.

Для измерения времени между A и B, когда ядро ​​останавливается как в A, так и в B, также может помочь команда RunTime.

...