gpt4 book ai didi

linux - Linux RTC 闹钟使用相对时间还是绝对时间?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:40 24 4
gpt4 key购买 nike

我正在尝试在 Linux 设备上配置 RTC 警报。我使用了 RTC documentation 中的示例:

    int retval
struct rtc_time rtc_tm;
/* .... */
/* Read the RTC time/date */
retval = ioctl(fd, RTC_RD_TIME, &rtc_tm);
if (retval == -1) {
exit(errno);
}

/* Set the alarm to 5 sec in the future, and check for rollover */
rtc_tm.tm_sec += 5;
if (rtc_tm.tm_sec >= 60) {
rtc_tm.tm_sec %= 60;
rtc_tm.tm_min++;
}
if (rtc_tm.tm_min == 60) {
rtc_tm.tm_min = 0;
rtc_tm.tm_hour++;
}
if (rtc_tm.tm_hour == 24)
rtc_tm.tm_hour = 0;

retval = ioctl(fd, RTC_ALM_SET, &rtc_tm);
if (retval == -1) {
exit(errno);
}

此代码片段使用绝对时间(从纪元开始)并且对我不起作用。我以为这是由于硬件中的错误,但在看似随机的一段时间后,警报确实响了。我设法找到的唯一另一篇文档是 rtc.cc 中的评论。 :

 case RTC_ALM_SET: /* Store a time into the alarm */
{
/*
* This expects a struct rtc_time. Writing 0xff means
* "don't care" or "match all". Only the tm_hour,
* tm_min and tm_sec are used.
*/

仅使用小时、分钟和秒的事实表明时间是相对于调用 ioctl 的时刻而言的。

传递给 ioctl(fd, RTC_ALM_SET, &rtc_tm) 的时间应该是相对的还是绝对的?

最佳答案

RTC 闹钟根据绝对时间工作,换句话说,如果您希望闹钟在 5 分钟内响起,那么您应该读取当前时间并将当前时间加上 5 分钟,然后使用结果来设置闹钟时间。

这是 TI RTC 芯片文档中的一段文本:(http://www.ti.com/lit/ds/symlink/bq3285ld.pdf)

During each update cycle, the RTC compares the day-of-the-month, hours, minutes, and seconds bytes with the four corresponding alarm bytes. If a match of all bytes is found, the alarm interrupt event flag bit, AF in register C, is set to 1. If the alarm event is enabled, an interrupt request is generated.

我相信这是所有 RTC 的标准...

关于linux - Linux RTC 闹钟使用相对时间还是绝对时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12375704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com