Тестирование среды выполнения кода с помощью Trace32

У меня есть встроенная система с кодом, который я хотел бы протестировать. В этом случае есть одна строка, на которую я хочу знать потраченное время (это создание нового объекта, запускающего остальную часть нашего приложения).

Я могу открыть Trace-> Chart-> Symbols и посмотреть время, затраченное на область, выбранную курсором, но это громоздко и не так точно, как хотелось бы. Я также нашел Perf-> Function Runtime, но я тестирую назначение нового объекта, а не какого-либо конкретного вызова функции (new вызывается в нескольких местах, а не только в интересующей строке).

Есть ли способ просмотреть реальное время, затраченное на строку кода с помощью Trace32? Идем дальше одной строки: есть ли способ легко измерить время между двумя точками останова?


person codehearts    schedule 23.05.2017    source источник


Ответы (2)


решение codehearts, в котором используются команды RunTime, прекрасно, если вы этого не сделаете. отслеживать в реальном времени. Он работает с любым инструментом Лаутербаха и любым целевым процессором.

Однако если у вас есть трассировка в реальном времени (например, CPU с ETM и Lauterbach PowerTrace hardare), я рекомендую вместо этого использовать команду Trace.STATistic.AddressDURation <start-addr> <end-addr>. Эта команда открывает окно, в котором отображается среднее время между двумя адресами. Вы получите наилучшие результаты, если выполните код между двумя адресами несколько раз.

Если вы используете процессор ARM Cortex, который поддерживает точную информацию о времени цикла (обычно все Cortex-A, Cortex-R и Cortex-M7), вы можете значительно повысить точность результата, используя параметр ETM.TImeMode.CycleAccurate (вместе с ETM.CLOCK <core-frequency>) .

Если вы используете Lauterbach CombiProbe или uTrace (и не можете использовать ETM.TImeMode.CycleAccurate), я рекомендую настройку Trace.PortFilter.ON. (По умолчанию фильтр порта установлен на PACK, что позволяет записывать больше данных и выполнения программы, но с немного худшей точностью синхронизации.)

person Holger    schedule 29.05.2017

Открытие окна Разное-> Время выполнения показывает общее время, прошедшее с момента «последнего запуска». Установив точку останова в первой строке блока кода и другую после последней строки, вы можете увидеть время, затраченное от первой точки останова до второй, в столбце «фактическое».

person codehearts    schedule 23.05.2017
comment
Команда RunTime TRACE32 измеряет только время между запуском ЦП и обнаружением остановленного ЦП. Однако может быть большая задержка между фактической остановкой ЦП и отладчиком, обнаруживающим остановку с помощью опроса JTAG. Вы можете просмотреть возможную ошибку измерения с помощью команды PRINT RunTime.ACCURACY() (или наведя курсор мыши на последнее начальное значение). - person Holger; 29.05.2017
comment
Вы можете повысить точность с помощью команды SYStem.POLLING.CONTinuous - person Holger; 29.05.2017