5

電源投入直後に Ada.Real_Time.Clock を読み取ると、ゼロに近くない値が表示され、時には負の値さえ表示されます。私が知る限り、Ada.Real_Time.Clock は電源投入時にリセットされると想定しています。Ada.Real_Time.Clock をリセットするにはどうすればよいですか?

ありがとう。

4

4 に答える 4

6

Ada 2005 LRM は次のように宣言してます

「時間値が標準時間基準と同期しているかどうかは、言語によって指定されていません。たとえば、E はシステムの初期化の時間に対応したり、何らかの時間標準のエポックに対応したりできます。」( D.8 [18-19])

それが述べているように、Ada は、リアルタイムの Time 値の「ゼロ時間」として機能するエポックの開始である「E」が特定の開始点に対応することを必要としません。それはコンパイラの実装者に任されています。

表示されている Time のインスタンスで観察される特定の数値は、ゼロに近いか遠いか、正か負かに関係なく、コンパイラ実装者の E の選択、それが時間の値を表す方法、およびそれに対応してどのように実装するかにのみ依存します。リアルタイム機能。

したがって、Time の特定の既知の値に依存するコードや、時間の値を厳密に操作できるようにする必要があるコードを記述することは避ける必要があります。

Real_Time.Time の値は、抽象的な量と見なす必要があります。

于 2010-09-20T20:14:54.050 に答える
1

マークに同意します。ブート以降の時間を使用するプラットフォームをいくつか見てきましたが (特に Intel プラットフォームでは、プロセッサの反復カウンターを使用するのが好きだと思います)、それは完全にコンパイラ ベンダー次第です。

「起動からの時間」のようなものが必要で、プラットフォームがそれを提供しない場合は、起動時に Real_Time.Clock を取得し、Real_Time.Clock からのすべての読み取りからその値を減算します。

Marc が引用したすべての LRM セクションを含め、Real_Time パッケージで定義されている機能を正確に確認するには、その LRM ページを参照してください

于 2010-09-21T13:22:44.597 に答える
0

ずいぶん前のことですが、参考になれば… MCUのタイムベースレジスタに0を書き込んで時計をリセットしました。

于 2014-12-13T09:19:25.153 に答える