2012-09-11 52 views
1

我正在嘗試在Linux設備上配置RTC警報。我用一個例子來自RTC documentationLinux RTC鬧鐘是否使用相對或絕對時間?

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)是相對的還是絕對的?

回答

1

,如果你想報警熄滅5分鐘,那麼你應該讀當前時間,5分鐘添加到當前時間和使用結果來設定鬧鈴時間的RTC報警工程關絕對時間,換句話說。

這裏是文本的從TI RTC芯片DOC剪斷:(http://www.ti.com/lit/ds/symlink/bq3285ld.pdf)

在每個更新週期中, RTC比較月份,小時,分鐘和秒數字節與四個相應的報警字節。如果發現所有字節匹配,則寄存器C中的鬧鐘中斷事件標誌位AF置1。如果鬧鐘事件被使能,則產生一箇中斷請求。

我相信這是跨區域培訓中心在那裏非常標準...

+0

謝謝!如果將絕對時間傳遞給RTC_ALM_SET是正確的,那麼似乎我的問題一定是由其他問題引起的。 –