0

VxWorks では、このレジスタはどのように構成され、読み取られますか? つまり、それがどのアドレスにあり、そのインクリメント レートを構成するためにどのアドレスに書き込むかということです。

RTP を使用していないため、カーネル スペースの問題はありません。速度を何らかの制御アドレスに書き込み、次に 64 ビットの符号なし整数タイマーを定期的に読み取る必要があるだけです。

このアプリケーションでは、ソフトウェアが一般的なタイミング測定を行うために使用する高解像度の 64 ビット タイマーが必要です。

サンプルコードは良いでしょう。

4

2 に答える 2

0

それは、アプリケーションがタイマーで何をしたいのか、およびタイマーが発生する環境によって異なります。私はその特定のチップで動作していないので、レジスタの使用方法を説明することはできません.

操作の前後にカウンターを読み取り、2 つの違いを実行できるタイムスタンプのような関数が必要な場合、VxWorks ボード サポート パッケージは、関数の sysTimestamp ファミリを介してその機能を提供します。ドキュメントを参照してください。

ただし、sysTimestamp が要件を満たしていなくても、レジスタにアクセスして現在の時刻を読み取り、コードがカーネル空間 (対ユーザー空間 AKA RTP) で実行される場合は、関数を定義するだけで済みます。タイムスタンプを返す...

uint64 myTimestamp() {
   uint64 ts;
   ts = *read & massage the register*
     *deal with overflows, etc... *

   return ts;
}

一方、アプリケーションが RTP のコンテキストで実行される場合、Windows のプロセスと同様に、RTP はハードウェア機能に直接アクセスできないため、事態はさらに複雑になります。

可能性の 1 つは、物理カーネル メモリのページを RTP にマップして、レジスタに直接アクセスできるようにすることです。システムの保護メカニズムに穴を開けたので、非常に落胆します。タイムスタンプ レジスタを読み取るためのカスタム システム コールを実装することもできます。

これらのソリューションは両方とも、vxWorks に関する中級から上級のスキルを必要とします。

于 2012-08-24T17:30:21.790 に答える