4

我通过端口 0x70 和 0x71 直接读/写 RTC。根据手册,工作日字节将包含星期天 = 1 的星期几,值范围从 1 到 7。当我读到今天的字节时,我得到了 4,即星期三。而当我阅读 RTC 信息时hwclock -r,当天是星期四,这是正确的。

将日期设置hwclock为其他日期并使用我的代码读取它并不能反映工作日字节的变化。

这个问题在所有系统中都存在。可能是什么问题?

4

1 回答 1

3

来自OSDev Wiki(强调添加):

RTC 芯片能够跟踪一周中的当前日期。它所做的只是在午夜增加其“工作日”寄存器并在达到 7 时将其重置为零。不幸的是,无法保证该寄存器被任何东西正确设置(包括当用户使用 BIOS 配置更改时间和日期时)屏幕)。它完全不可靠,不应使用。

确定星期几的正确方法是从日期开始计算。

我相信这既回答了您最初的问题,也回答了为什么手动更改 RTC 日期hwclock不会显示工作日偏移量的更改 ( 0x07)。如果它只是午夜的翻转柜台,那说明了很多。

至于从日期计算星期几而不使用系统时间函数,例如strptime,看看这个 StackOverflow 线程:C Program to find week of week given date

于 2013-01-10T07:38:39.980 回答