我通过端口0x70和0x71直接读/写RTC。根据手册,工作日字节将保存Sunday=1的星期几,取值范围从1到7。当我读取字节时,我得到今天4,也就是星期三。然而,当我使用hwclock -r读取实时时钟信息时,日期是星期四,这是正确的。
使用hwclock将日期设置为其他日期并使用我的代码读取它并不反映工作日字节中的更改。
此问题在所有系统中都存在。会有什么问题呢?
发布于 2013-01-10 15:38:40
来自the OSDev Wiki (已添加强调):
实时时钟芯片
能够跟踪一周中的哪一天。它所做的就是在午夜增加其“工作日”寄存器,如果达到7,则将其重置为零。不幸的是,不能保证该寄存器曾经被任何东西正确设置(包括当用户使用BIOS配置屏幕更改时间和日期时)。它完全不可靠,不应该使用。
确定一周中的当前日期的正确方法是从日期计算。
我相信这既回答了您最初的问题,也回答了为什么使用hwclock手动更改实时时钟日期不会显示工作日偏移量(0x07)的更改。如果它只是午夜时的一个翻转计数器,这就解释了很多问题。
至于在不使用strptime等系统时间函数的情况下根据日期计算星期几,可以查看这个StackOverflow线程:C Program to find day of week given date
https://stackoverflow.com/questions/14252744
复制相似问题