コードの実行時間を 1ms の精度で測定するサンプルです。 setTimer() のような関数を自作して、指定時間経過後に 関数を実行するというような使い方もできると思います。 タイマーのマクロの意味については、 devkitPro/libnds/include/nds/timers.h を確認してください。 また、タイマー割り込み処理とカウンタ変数参照のオーバーヘッドを最小限に抑えるためには、 割り込み処理本体を ITCM に、カウンタ変数を DTCM に配置するようにしてください。 コード例 †volatile int timer = 0; void timer0Handler() { timer++; } int main() { ・・・ irqSet(IRQ_TIMER0, timer0Handler); irqEnable(IRQ_TIMER0); // 1 秒間に 1000 回、割り込みを発生させる TIMER0_DATA = TIMER_FREQ_64(1000); TIMER0_CR = TIMER_ENABLE | TIMER_IRQ_REQ | TIMER_DIV_64; // タイマーの現在の値を取得 int now = timer; // ここに処理時間を計測したい処理を書く // 処理時間を表示する printf("%d", timer - now); } DTCM にカウンタ変数を配置する †volatile int timer __attribute__ ((section (".dtcm"))); カウンタ変数に属性を付けて、このように書き換えてください。 DTCM に配置することで、キャッシュのヒット・ミスヒットに関わらず 常にフルスピードでアクセスすることができます。 |