*ちなみにマイコンは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ばんざい