2017-05-23 13 views
0

벤치 마크 할 코드가있는 임베디드 시스템이 있습니다. 이 경우, 내가 쓰는 시간을 알고 싶다는 단 하나의 선이 있습니다 (그것은 우리의 나머지 응용 프로그램을 시작하는 새로운 객체의 생성입니다).Benchmarking Code Runtime with Trace32

Trace-> Chart-> Symbols을 열어 내 커서로 선택한 영역에 걸린 시간을 볼 수는 있지만, 이것은 성 가시고 정확하지 않습니다. Perf-> Function Runtime도 찾았지만 특정 함수 호출이 아닌 새로운 객체의 할당을 벤치마킹합니다 (new은 관심 대상이 아닌 여러 위치에서 호출됩니다).

Trace32를 사용하여 코드 줄에서 찍은 실제 시간을 볼 수있는 방법이 있습니까? 단일 행 이상으로 이동 : 두 개의 중단 점 사이의 시간을 쉽게 벤치 마크 할 수있는 방법이 있습니까?

답변

2

RunTime 명령을 사용하는 solution by codehearts은 실시간 추적 기능이 없어도 괜찮습니다. 그것은 모든 Lauterbach 도구 및 대상 CPU에서 작동합니다.

실시간 추적이 (예 : ETM 및 Lauterbach PowerTrace 하드 어가있는 CPU) 인 경우 Trace.STATistic.AddressDURation <start-addr> <end-addr> 명령을 사용하는 것이 좋습니다. 이 명령은 두 주소 사이의 평균 시간을 보여주는 창을 엽니 다. 두 주소 사이에서 코드를 여러 번 실행하면 최상의 결과를 얻을 수 있습니다.

사이클 정확도 타이밍 정보 (일반적으로 모든 Cortex-A, Cortex-R 및 Cortex-M7)를 지원하는 ARM Cortex CPU를 사용하는 경우 ETM.TImeMode.CycleAccurate 설정을 사용하여 결과의 ​​정확도를 크게 높일 수 있습니다 함께 ETM.CLOCK <core-frequency>).

Lauterbach CombiProbe 또는 uTrace를 사용하는 경우 (ETM.TImeMode.CycleAccurate을 사용할 수 없음) 나는 Trace.PortFilter.ON으로 설정하는 것이 좋습니다. (기본적으로 port-filter는 PACK으로 설정되어 더 많은 데이터와 프로그램 흐름을 기록 할 수 있지만 타이밍 정확도는 약간 떨어집니다.)

0

기타 -> 런타임 창을 열면 "laststart"이후 걸린 총 시간이 표시됩니다. 코드 블록의 첫 번째 줄에 중단 점을 설정하고 마지막 줄 뒤에 다른 중단 점을 설정하면 "실제"열 아래에서 첫 번째 중단 점에서 두 번째 중단 점까지 걸린 시간을 볼 수 있습니다.

+1

TRACE32의 RunTime 명령은 CPU 시작과 CPU를 중지했습니다. 그러나 실제로 멈추는 CPU와 JTAG 폴링을 통해 중단을 감지하는 디버거 간에는 큰 지연이있을 수 있습니다. 'PRINT RunTime.ACCURACY()'명령 (또는 마우스 커서를 "laststart"값 위로 가져 가면)으로 측정 오류를 볼 수 있습니다. – Holger

+1

'SYStem.POLLING.CONTinuous' 명령으로 정확도를 높일 수 있습니다. – Holger