当前位置: 代码迷 >> WinCE >> 关于DevKit8000 平台WinCE6.0 系统时间跳变有关问题再提问
  详细解决方案

关于DevKit8000 平台WinCE6.0 系统时间跳变有关问题再提问

热度:377   发布时间:2016-04-28 11:52:46.0
关于DevKit8000 平台WinCE6.0 系统时间跳变问题再提问
小弟稍早之前已经就WinCE 系统时钟跳变的问题发帖提问。但因为自己测试的不够详细,所以没能得到满意的答案。这几天我又重新进行了检查,有一定进展但是问题还是没能解决。恳请论坛朋友能为我稍加分析,提供思路。
软硬件条件:DevKit8000 开发版、WinCE6.0 系统 安装到R3补丁。
现象描述:系统默认开机时间2014年12月1日12时0分0秒。 开机一小时后,也就是当分钟从59分到60分后,会出现一个约0.5秒的2014年12月1日13时0分0秒,然后时间跳变到2023年10月31日13时0分。在之后的时间,系统都是基于2023年10月31日13时正常进位。
打印信息:在每个整点进位时系统都会调用位于 PLATFORM\DevKit8000\SRC\OAL\OALRTC 中的tycoon.c
OALIoCtlHalRtcUpdAte() 函数。这个函数的功能是周期性的调用RTC 驱动,来更新系统RTC 时间。
通过打印信息我可以确定在函数内部该函数获取了正确的时间。但是显示的是那个2023年的错误时间。
当我把这个函数内部注释之后,系统在2014年这个默认时间就不会发生跳变,而是正常进位。
自己的分析:系统每过一个小时利用OALIoCtlHalRtcUpdate()函数进行时间校准。该函数也确实获得了正确的RTC时间。但在将其调用显示的主程序存在问题,例如把2014错解成2023,那么我想问的是如果确实是这里存在问题,这个OALIoCtlHalRtcUpdate() 函数是在哪里被调用,或者说rtc.c 文件在哪里被调用。关于这个函数的调用,我找了很久也没有找到,麻烦知道的朋友告知一下。
如果我的分析思路是错误的,那么问题可能会出在哪?
------解决思路----------------------
引用:
不太清楚,如果BSP中没有,可能就没开源


很多 BSP 都存在这一问题。
更可恨的是有人将 MS 的代码修改一下,然后就不开源了。


————————————————————————————————————————————————
我参加 CSDN 博客了,投票网址如下,大家多多支持。多谢先!
http://vote.blog.csdn.net/blogstar2014/details?username=91program#content
------解决思路----------------------
引用:
Quote: 引用:

系统每过一个小时利用OALIoCtlHalRtcUpdate()函数进行时间校准
--wince并没有过一个小时进行时间校准,很多wince都不一定连网,时间校准也就没有意义。你的平台有这特殊性?

我是用的是DevKit8000 平台,上面使用了一个tps65930 一个多功能芯片,这款芯片其中一个功能就是提供RTC 实时时钟。
我现在有这个假设,我看tps65930的数据手册。

上面的介绍很简略,我觉得,会出现第一个小时时钟跳变的情况可能是由于系统读取了tps65930寄存器的时间,因为我板子上没有备用电池电路,所以tps65930寄存器的时间就存在问题,直到系统第一次读取后,被置为错误时间才恢复正常的时间跳变。
但是我这个假设的一个问题是在2010年以前的时间,就不会出现年份的跳变。????

你好好检查一下BCD2BIN和BIN2BCD调用的地方,看是否有错误。我以前修改2410平台的就是这个有bug。你的平台我没用过,所以代码只能你自己检查。
  相关解决方案