2012-09-11 2 views
1

Linux 장치에서 RTC 경보를 구성하려고합니다. 나는 RTC documentation에서 예를 사용했습니다 :Linux 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

RTC 경보는 절대 시간에서 작동합니다. 즉, 5 분 후에 경보가 울리도록하려면 현재 시간을 읽고 현재 시간에 5 분을 더하고 그 결과를 사용하여 경보 시간을 설정해야합니다 . 여기

는 TI RTC 칩 문서로부터 텍스트 가위질이다 (http://www.ti.com/lit/ds/symlink/bq3285ld.pdf) 각각의 업데이트주기 동안

상기 RTC는 일,시, 분 및 초 바이트를 해당 알람 바이트 4 개와 비교합니다. 모든 바이트가 일치하면 레지스터 C의 알람 인터럽트 이벤트 플래그 비트 AF가 1로 설정됩니다. 알람 이벤트가 활성화되면 인터럽트 요청이 생성됩니다.

나는 ...이 밖에 RTC를 통해 꽤 표준으로

+0

감사를 믿습니다! RTC_ALM_SET에 절대 시간을 전달하면 문제가 발생해야합니다. –