0

rm48ボード(Texas Instrument RM48L952、ARM CORTEX-R4F)で「遊んで」いて、ループの時間を計りたい(たとえば)。

char message[20];
int temp=0;
time_t start, end, elapsed; 
sciInit();  

start = time(NULL);
  for(temp=0;temp<0xAAAAAAA;temp++);
end = time(NULL);
elapsed=end-start;
snprintf(message,20,"Duree = %f \r\n",(double)elapsed);
sciSend(scilinREG,20,(unsigned char *)message);

JTAGリンクとCodeComposerStudio(CのEclipseのような)を使用してプログラムを実行している場合、表示は正しくなります(〜4秒)。しかし、プログラムをオンチップ(スタンドアロン)で実行している場合、表示は正しくなく(〜637488s)、遅延が何であれ同じです!

なぜ?時間計算はシステムに依存すると思います...組み込みプロセッサで時間を計る(ベンチマークプログラム)方法は?

4

2 に答える 2

1

ARM CortexプロセッサのDhrystoneベンチマークに関するARMのPDFによると:

最新のARMプロセッサのほとんどには、パフォーマンスカウンタが含まれています。これらは、経過時間を正確に計算するために使用できるプロセッササイクル数をカウントするようにプログラムできます。この機能を使用するには、clock()関数を再ターゲットする必要があります。[...]パフォーマンスカウンターとリターゲットされたclock()関数がない場合、標準Cライブラリのセミホストされたclock()関数が使用されます。ARM RealView Debugger(RVD)やDS-5Debuggerなどのセミホスティングをサポートできるデバッガを接続する必要があります。

そうすると、clock()はオンチップで実行されないと思います。ハードウェアタイマーを使用します。あれについてどう思う?clock()をオンチップで使用できますか?そして、なぜそれはそのような奇妙な期間(63488など)を返すのですか?

于 2013-02-14T13:00:17.330 に答える
1

使用している時計の周波数はどれくらいですか?割り込みを有効にしましたか?そうすると、プログラムが中断されてISRに頻繁にジャンプし、ループの時間が長くなる可能性があります..申し訳ありませんが、コメントする権限がありません。また、サイクルの時間を計りたい場合は、内蔵タイマーを使用する方が良いでしょう。

于 2013-02-14T09:09:33.517 に答える