阅读:4082回复:12
WINCE6.0+2440 断电后保存系统时间?WINCE6.0+2440 断电后如何保存系统时间? 谢谢! |
|
沙发#
发布于:2009-02-04 16:47
有备用电池的。
每次重启后时间都会重至为12:00。 应该是重启后没有读取RTC的值。 4.2中这样修改一下就可以了 case IOCTL_HAL_INIT_RTC: // The kernel has detected a cold-boot. if(nInBufSize >= sizeof(SYSTEMTIME)) return OEMSetRealTime((LPSYSTEMTIME)lpInBuf);//把这里改成return TRUE; else return FALSE; break; 但6.0中没有找到这部分代码。 高手请帮忙啊。 谢谢。 |
|
板凳#
发布于:2009-02-04 23:16
|
|
地板#
发布于:2009-02-05 10:22
你备用电池是对什么进行供电的?对cpu的rtc模块供电?如果断电了你cpu没有了供电,是不会保存时间的,
OEMSetRealTime这个函数你2440的bsp(oal)中应该会实现的。 CE6.0中platform\common\src\inc下有个oal_ioctl_tab.h中有定义{ IOCTL_HAL_INIT_RTC, 0, OALIoCtlHalInitRTC },查找OALIoCtlHalInitRT函数的定义,你的2440的oal层的代码里面应该有这个函数的实现。 |
|
地下室#
发布于:2009-02-09 11:02
OALIoCtlHalInitRTC函数的实现是这样的:
BOOL OALIoCtlHalInitRTC( UINT32 code, VOID *pInpBuffer, UINT32 inpSize, VOID *pOutBuffer, UINT32 outSize, UINT32 *pOutSize ) { BOOL rc = FALSE; SYSTEMTIME *pTime = (SYSTEMTIME*)pInpBuffer; OALMSG(OAL_IOCTL&&OAL_FUNC, (L"+OALIoCtlHalInitRTC(...)\r\n")); // Validate inputs if (pInpBuffer == NULL || inpSize < sizeof(SYSTEMTIME)) { NKSetLastError(ERROR_INVALID_PARAMETER); OALMSG(OAL_ERROR, ( L"ERROR: OALIoCtlHalInitRTC: Invalid parameter\r\n" )); goto cleanUp; } // Add static mapping for RTC alarm OALIntrStaticTranslate(SYSINTR_RTC_ALARM, IRQ_RTC); // Set time rc = OEMSetRealTime(pTime); cleanUp: OALMSG(OAL_IOCTL&&OAL_FUNC, (L"-OALIoCtlHalInitRTC(rc = %d)\r\n", rc)); return rc; } 按4.2的修改,应该是把rc = OEMSetRealTime(pTime);改成rc = TRUE; 但还是不行。 试着改成rc = OEMGetRealTime(pTime);也不行。 哪位大哥大姐帮帮忙,急救啦…… |
|
5楼#
发布于:2009-02-10 11:23
|
|
6楼#
发布于:2009-02-10 14:31
我试着帮你解决问题,但是我问你的问题你一个都没有回答,你这样别人也不知道该怎么帮助你。
|
|
7楼#
发布于:2009-02-10 20:39
引用第6楼liulord于2009-02-10 14:31发表的 : 兄弟,我不知道你在哪里问了我问题?请说明白一点。 |
|
8楼#
发布于:2009-02-10 20:43
liulord兄弟
你备用电池是对什么进行供电的?对cpu的rtc模块供电?如果断电了你cpu没有了供电,是不会保存时间的, ------------------------------------------------------------------------------ 不知道你是不是说我没有回答这些问题? 谢谢你的回答 。。。 我的设备之前是使用4.2,在4.2上没问题的。所以应该不要怀疑硬件有什么问题。 由于硬件是另一部门同事做的,我不清楚是不是外接RTC。不过既然4.2没问题,那应该是6.0驱动的问题。 |
|
9楼#
发布于:2009-02-11 10:16
我只做过5.0和6.0.
rc = OEMSetRealTime(pTime);这条代码就是对2440的rtc操作的,将时间写入2440的rtc中,我手上没有2440的oal代码,所以具体也没法分析。但是你既然说这个地方要改成true。那么你bsp的其他地方肯定对rtc进行操作了才会这么修改。 没法知道你的硬件设计,我也提不出更好的意见了。 |
|
10楼#
发布于:2009-02-11 15:01
耐心点找,common下那些代码里面找找。
|
|
11楼#
发布于:2009-02-11 21:11
谢谢各位的回答。
明天再看看硬件的设计 。。。 |
|
12楼#
发布于:2009-09-14 10:12
在oallib/init.c中的
函数OEMInit()添加 KITLIoctl(IOCTL_HAL_INIT_RTC, NULL, 0, NULL, 0, NULL); |
|