dorke 发表于 2009-07-27 09:25

关于RTC的一个问题

最近在我的开发板出现一个时钟上的奇怪现象:

在某些月份的最后一天会出现多一天的现象,也就是说:


前面正常
第一天:6月30日
第二天:7月1日
第三天:还是7月1日第四天:7月2日
后继正常


时钟使用的是:M41T0,内核是linux 2.6.17

大家觉得问题出现在哪里呢?

.kaka 发表于 2009-07-28 11:41

1、硬件方面,会不会是rtc时钟跑偏了
2、你的意思是只有天不准,那时分秒准不准?
3、软件方面,有可能是系统里跑了什么其他的程序,把时间改掉了
4、外星人搞的鬼~
用天来统计是不是跨度太大了啊~
就是这个样子~

dorke 发表于 2009-07-28 15:19

1、硬件方面,会不会是rtc时钟跑偏了
re:rtc硬件本身应该没有问题,因为裸机下测试过

2、你的意思是只有天不准,那时分秒准不准?
re:只有天不准,出了问题的那天,出了日期不对,其他时分秒完全正确!很准确

3、软件方面,有可能是系统里跑了什么其他的程序,把时间改掉了
re:系统除了linux没有其他程序

4、外星人搞的鬼~
re:哈哈哈,这个只有上帝知道

.kaka 发表于 2009-07-29 08:29

毫无疑问,肯定是3了

dorke 发表于 2009-07-29 16:27

经过测试,发现问题出在这个地方:
linux获得的RTC会放到一个结构体中,结构体分为两种,一个是:
struct rtc_time
{
        int        sec;        /* Seconds (0-59) */
        int        min;        /* Minutes (0-59) */
        int        hour;        /* Hour (0-23) */
        int        dow;        /* Day of the week (1-7) */
        int        dom;        /* Day of the month (1-31) */
        int        month;        /* Month of year (1-12) */
        int        year;        /* Year (0-99) */
};

另外一个是:

/*
* The struct used to pass data via the following ioctl. Similar to the
* struct tm in <time.h>, but it needs to be here so that the kernel
* source is self contained, allowing cross-compiles, etc. etc.
*/
struct rtc_time {
        int tm_sec;
        int tm_min;
        int tm_hour;
        int tm_mday;
        int tm_mon;         /* tm_mon starts at zero */
        int tm_year;
        int tm_wday;
        int tm_yday;
        int tm_isdst;
};

而两个的关于月的起始值是不同的,因此在传输等过程中,一不小心就搞错误了!

zhj1011 发表于 2009-07-29 17:21

回复 #5 dorke 的帖子

呵呵 这个问题 有点滑稽啊

flag 发表于 2009-07-31 20:37

以前碰到过,关于月份不对的情况。。。。。

heiniaoyuyoulin 发表于 2010-12-15 13:21

这个只能测试:
1.排除硬件问题,例如更换同一个型号的RTC始终新品,跑相同的程序,会不会出现相同问题。
2.如果更换一个芯片还出现就是软件商的问题。你把其他程序全部关掉,重新写一个只读程序看会不会出问题。极有可能是你程序里面在有关于一定计时的东西,把始终写入几次,时间变了

EZWORD 发表于 2010-12-15 19:40

楼上的好牛x
一年前的帖子你也翻出来了。
页: [1]
查看完整版本: 关于RTC的一个问题