電源投入直後に Ada.Real_Time.Clock を読み取ると、ゼロに近くない値が表示され、時には負の値さえ表示されます。私が知る限り、Ada.Real_Time.Clock は電源投入時にリセットされると想定しています。Ada.Real_Time.Clock をリセットするにはどうすればよいですか?
ありがとう。
Ada 2005 LRM は次のように宣言しています。
「時間値が標準時間基準と同期しているかどうかは、言語によって指定されていません。たとえば、E はシステムの初期化の時間に対応したり、何らかの時間標準のエポックに対応したりできます。」( D.8 [18-19])
それが述べているように、Ada は、リアルタイムの Time 値の「ゼロ時間」として機能するエポックの開始である「E」が特定の開始点に対応することを必要としません。それはコンパイラの実装者に任されています。
表示されている Time のインスタンスで観察される特定の数値は、ゼロに近いか遠いか、正か負かに関係なく、コンパイラ実装者の E の選択、それが時間の値を表す方法、およびそれに対応してどのように実装するかにのみ依存します。リアルタイム機能。
したがって、Time の特定の既知の値に依存するコードや、時間の値を厳密に操作できるようにする必要があるコードを記述することは避ける必要があります。
Real_Time.Time の値は、抽象的な量と見なす必要があります。
マークに同意します。ブート以降の時間を使用するプラットフォームをいくつか見てきましたが (特に Intel プラットフォームでは、プロセッサの反復カウンターを使用するのが好きだと思います)、それは完全にコンパイラ ベンダー次第です。
「起動からの時間」のようなものが必要で、プラットフォームがそれを提供しない場合は、起動時に Real_Time.Clock を取得し、Real_Time.Clock からのすべての読み取りからその値を減算します。
Marc が引用したすべての LRM セクションを含め、Real_Time パッケージで定義されている機能を正確に確認するには、その LRM ページを参照してください。
ずいぶん前のことですが、参考になれば… MCUのタイムベースレジスタに0を書き込んで時計をリセットしました。