Silicon Labs EFM32:コードの実行時間を測定する方法はありませんか?

EFx32

デバッグインタフェースに実装されている DWT(Data Watch point and Trace)を利用するのが簡単です。
下記の記述を行うと、「測定したいコード」に要した時間が、timeという変数に格納されます。基準クロックはCPUで使用しているシステムクロックになっています。

CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
uint32_t startTime = DWT->CYCCNT;
/* 測定したいコード */
uint32_t time = DWT->CYCCNT - startTime;

例として、EFM32PGのサンプルコード「SLSTK3401A_blink」を使って説明します。このサンプルコードは1秒周期でLEDをピカピカ光らせるというもので、システムクロックには40MHzの外部クリスタルを使用しています。

Article header 1  31

この1秒タイマの部分の時間を測定してみます。Delay(1000)の1000は1000ms (= 1s)を示しています。

Article header 2  33

変数 timeを選択して右クリックし、Watchに登録します。

Article header 3  16

Break pointを張って timeの値を見てみると、 おおよそ40000000システムクロック(つまり1秒)になっていることが確認できます。この要領でコードの実行時間を調べることができます。

Article header 4  13

最新情報については、SiliconLabsのコミュニティサイトをご確認ください。

経験豊富なFAEが
無料でご相談を承ります。

特定製品の仕様からパーツの選定まで、当社のFAEが皆様のテクニカルなお悩みに無料で回答します。ぜひ、お気軽にご相談ください。