关于RTC的一个问题
最近在我的开发板出现一个时钟上的奇怪现象:在某些月份的最后一天会出现多一天的现象,也就是说:
前面正常
第一天:6月30日
第二天:7月1日
第三天:还是7月1日第四天:7月2日
后继正常
时钟使用的是:M41T0,内核是linux 2.6.17
大家觉得问题出现在哪里呢? 1、硬件方面,会不会是rtc时钟跑偏了
2、你的意思是只有天不准,那时分秒准不准?
3、软件方面,有可能是系统里跑了什么其他的程序,把时间改掉了
4、外星人搞的鬼~
用天来统计是不是跨度太大了啊~
就是这个样子~ 1、硬件方面,会不会是rtc时钟跑偏了
re:rtc硬件本身应该没有问题,因为裸机下测试过
2、你的意思是只有天不准,那时分秒准不准?
re:只有天不准,出了问题的那天,出了日期不对,其他时分秒完全正确!很准确
3、软件方面,有可能是系统里跑了什么其他的程序,把时间改掉了
re:系统除了linux没有其他程序
4、外星人搞的鬼~
re:哈哈哈,这个只有上帝知道 毫无疑问,肯定是3了 经过测试,发现问题出在这个地方:
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;
};
而两个的关于月的起始值是不同的,因此在传输等过程中,一不小心就搞错误了!
回复 #5 dorke 的帖子
呵呵 这个问题 有点滑稽啊 以前碰到过,关于月份不对的情况。。。。。 这个只能测试:1.排除硬件问题,例如更换同一个型号的RTC始终新品,跑相同的程序,会不会出现相同问题。
2.如果更换一个芯片还出现就是软件商的问题。你把其他程序全部关掉,重新写一个只读程序看会不会出问题。极有可能是你程序里面在有关于一定计时的东西,把始终写入几次,时间变了 楼上的好牛x
一年前的帖子你也翻出来了。
页:
[1]