4

ポート 0x70 と 0x71 を介して RTC を直接読み書きしています。マニュアルによると、平日のバイトは、日曜日 = 1 の曜日を保持し、値の範囲は 1 から 7 です。バイトを読み取ると、今日は 4、つまり水曜日です。hwclock -rその日が木曜日であるRTC 情報を読み取ると、これは正しいです。

他の日付を使用して日付を設定hwclockし、コードで読み取ると、平日のバイトの変更が反映されません。

この問題は、すべてのシステムで持続します。何が問題になる可能性がありますか?

4

1 に答える 1

3

OSDev Wikiから(強調を追加):

RTC チップは、現在の曜日を追跡できます。真夜中に「平日」レジスタをインクリメントし、7 に達した場合はゼロにリセットするだけです。残念ながら、このレジスタが何によっても正しく設定されたという保証はありません (ユーザーが BIOS 構成を使用して時刻と日付を変更した場合を含む)。画面)。これは完全に信頼性が低く、使用すべきではありません。

現在の曜日を決定する正しい方法は、日付から計算することです。

これは、元の質問と、RTC 日付を手動でhwclock変更しても平日のオフセット ( ) の変更が表示されない理由の両方に答えていると思います0x07。単純に真夜中のロールオーバー カウンターであれば、それで多くのことが説明できます。

などのシステム時間関数を使用せずに日付から曜日を計算する方法については、次のstrptimeStackOverflow スレッドを参照してください。C Program to find day of week given date

于 2013-01-10T07:38:39.980 に答える