Nios® Vプロセッサー・ソフトウェア開発者ハンドブック

ID 743810
日付 10/31/2022
Public

このドキュメントの新しいバージョンが利用できます。お客様は次のことを行ってください。 こちらをクリック 最新バージョンに移行する。

ドキュメント目次

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;
}