このドキュメントの新しいバージョンが利用できます。お客様は次のことを行ってください。 こちらをクリック 最新バージョンに移行する。
6.7.3. タイムスタンプ・ドライバー
場合によっては、HAL システム・クロック・ティックよりも高い精度で時間間隔を測定したいことがあります。 HAL は、タイムスタンプ・ドライバーを使用して高解像度のタイミング関数を提供します。タイムスタンプ ドライバーは、タイミング情報を取得するためにサンプリングできる、単調に増加するカウンターを提供します。 HAL は、システムで 1 つのタイムスタンプ・ドライバーのみをサポートします。
BSP 設定を操作して、ハードウェア タイマー ペリフェラルをタイムスタンプ デバイスとして指定します。インテル-提供されたタイムスタンプ・ドライバーは、指定したタイマーを使用します。
タイムスタンプ・ドライバーが存在する場合は、次の関数を使用できます。
- alt_timestamp_start()
- alt_timestamp()
alt_timestamp_start()を呼び出すと、カウンターの実行が開始されます。 後続のalt_timestamp()の呼び出しでは、タイムスタンプ・カウンターの現在の値が返されます。alt_timestamp_start()を再度呼び出すと、カウンターがゼロにリセットされます。 カウンタが (使用されるタイマー パラメータ化に応じて 232 - 1 または 264 - 1) に達したときのタイムスタンプ・ドライバーの動作は未定義です。
alt_timestamp_freq()関数を呼び出すことで、タイムスタンプ・カウンターがインクリメントするレートを取得できます。このレートは通常、 Nios® V プロセッサー システム — 通常は毎秒数百万サイクル。タイムスタンプ ドライバーは、 alt_timestamp.h ヘッダファイル。
タイムスタンプを使用してコード実行時間を測定する
#include <stdio.h>
#include "sys/alt_timestamp.h"
#include "alt_types.h"
int main(void) {
alt_u32 time1;
alt_u32 time2;
alt_u32 time3;
if (alt_timestamp_start() < 0) {
printf("No timestamp device available\n");
} else {
time1 = alt_timestamp();
func1(); /* first function to monitor */
time2 = alt_timestamp();
func2(); /* second function to monitor */
time3 = alt_timestamp();
printf("time in func1 = %u ticks\n",
(unsigned int)(time2 - time1));
printf("time in func2 = %u ticks\n",
(unsigned int)(time3 - time2));
printf("Number of ticks per second = %u\n",
(unsigned int) alt_timestamp_freq());
}
return 0;
}