コードの実行時間を 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 に配置することで、キャッシュのヒット・ミスヒットに関わらず 常にフルスピードでアクセスすることができます。


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-10-27 (日) 17:45:23 (3134d)