2017-05-23 4 views
0

私はベンチマークしたいコードを組み込んだシステムを持っています。このケースでは、私が費やした時間を知りたいという一行があります(これは、アプリケーションの残りの部分を起動する新しいオブジェクトの作成です)。Benchmarking Code Runtime with Trace32

Trace-> Chart-> Symbolsを開いて、カーソルで選択した領域の所要時間を表示できますが、これは面倒で、私が望むほど正確ではありません。 Perf-> Functionランタイムも見つかりましたが、特定の関数呼び出しではなく、新しいオブジェクトの割り当てをベンチマークしています(newが関心のある行だけでなく複数の場所で呼び出されています)。

Trace32でコード行に現実世界の時間を表示する方法はありますか?単一の行以上のこと:2つのブレークポイント間の時間を簡単にベンチマークする方法がありますか?

答えて

2

RunTimeコマンドを使用しているsolution by codeheartsは、リアルタイムトレースがない場合は問題ありません。これは、任意のLauterbachツールおよび任意のターゲットCPUで動作します。

(たとえば、ETMとLauterbach PowerTraceハードウェア搭載のCPU)のリアルタイムトレースがある場合は、代わりにTrace.STATistic.AddressDURation <start-addr> <end-addr>コマンドを使用することをおすすめします。このコマンドは、2つのアドレス間の平均時間を示すウィンドウを開きます。 2つのアドレス間でコードを何回か実行すると、最良の結果が得られます。

サイクル精度のタイミング情報(通常はすべての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の設定をお勧めします。 (デフォルトでは、ポートフィルタはPACKに設定されていますが、より多くのデータとプログラムフローを記録できますが、タイミング精度は若干悪くなります)。

0

「Misc-> Runtime」ウィンドウを開くと、「laststart」以降の合計時間が表示されます。コードブロックの最初の行にブレークポイントを設定し、最後の行の後に別のブレークポイントを設定すると、「実際の」列の下の最初のブレークポイントから2番目のブレークポイントまでの時間がわかります。

+1

TRACE32のRunTimeコマンドは、CPUの起動からCPUを停止しました。しかし、実際に停止しているCPUと、JTAGポーリングによる停止を検出したデバッガとの間に大きな遅延が生じることがあります。可能な測定エラーは 'PRINT RunTime.ACCURACY()'コマンド(またはマウスカーソルを "laststart"値にホバーする)で見ることができます。 – Holger

+1

'SYStem.POLLING.CONTinuous'コマンドで精度を向上させることができます – Holger