我通过端口0x70和0x71直接读/写RTC。根据手册,工作日字节将保持星期几,星期日= 1,值范围从1到7.当我读到今天我得到的字节4,即星期三。然而,当我用hwclock -r
读取RTC信息时,那天是星期四,这是正确的。
使用hwclock
将日期设置为其他日期并使用我的代码阅读它并不反映工作日字节的变化。
此问题在所有系统中都存在。可能是什么问题?
答案 0 :(得分:3)
来自the OSDev Wiki(强调补充):
RTC芯片能够跟踪当周的当天。所有 它确实是在午夜增加其“工作日”寄存器并重置它 如果它达到7就归零。不幸的是,这不能保证 任何东西(包括用户时)都正确设置了寄存器 使用BIOS配置屏幕更改时间和日期。 是的 完全不可靠,不应使用。
确定一周中当前日期的正确方法是从日期开始计算。
我相信这会回答您的原始问题以及为什么使用hwclock
手动更改RTC日期不会显示工作日偏移(0x07
)的更改。如果它只是午夜的翻转计数器,那就解释了很多。
至于在不使用strptime
等系统时间函数的情况下计算从该日期起的星期几,请查看此StackOverflow主题:C Program to find day of week given date