Kinetisマイコンでプログラム処理時間をはかる方法

*ちなみにマイコンはFRDM-K64を例に使用しています。

デジタル出力をオシロで計測

例えば、下のコード。赤枠内の処理時間が知りたい場合、前後で適当なピンの出力のHigh/Lowをきりかえる。

下が計測結果。今回の場合、処理時間は258usecということが分かった。

でも、いちいちオシロだすの面倒だな。ストップウォッチ的なのほしい。

デバッグウォッチタイマを使う

こんなのありました。

//Debug watch timer
CoreDebug->DEMCR|=0x01000000;
//Reset cycle counter
DWT->CYCCNT=0;
//Enable cycle counter
DWT->CTRL|=1;
uint32_t cpuCycles = DWT->CYCCNT;
PRINTF("DWT timer start¥r¥n");
/*
計測したい関数をここにおく
*/
//Debug watch timer
cpuCycles=DWT->CYCCNT-cpuCycles;
float time = 
1000000*(float)cpuCycles/(float)SystemCoreClock;
PRINTF("Time Printf: %f us.¥r¥n",time);

結果はこんな感じ

10usずれてしまった。デジタル出力はAPIを使っているから、その遅れなどあるかも。

以上です。ざっくり測るには、手間ないし便利かもしれません。

DWTばんざい

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です