WINCE--系统时间设置

发布者:Yinyue1314最新更新时间:2024-09-12 来源: cnblogs关键字:WINCE 手机看文章 扫描二维码
随时随地手机看文章

本来以为系统时间设置很简单,只要修改下RTC会记得你设置的时间,但是经过测试发现情况不是这样的。于是研究了bsp启动时系统时间的设置的流程。我一直认为在OAL层加入OEMSetRealTime()函数即可,但是测试了好几次不行,于是动了真格,呵呵之前一直以为这个功能很简单。在OEMInit加入相应的调试信息后,发现在我OEMSetRealTime之后,wince调用了一个函数OALIoCtlHalInitRTC()这个函数太关键了。于是看了这个函数介绍英文,看的够呛,不过意思都懂了,This function is called by WinCE OS to initialize the time after boot.

//  Input buffer contains SYSTEMTIME structure with default time value.

//  If hardware has persistent real time clock it will ignore this value

啥意思呀??也就是说这个函数是wince OS调用的,那什么时候调用的呢?通过调试信息发现是在调用OEMIoControl时开始这个函数的调用的。

  在bsp中有个s3c6410_sec_v1(..s3c6410_sec_v1oalrtcrtc.c)下文件,其中有个{ IOCTL_HAL_INIT_RTC,0,OALIoCtlHalInitRTC},定义,一切都明白了。但是很奇怪,为什么调用了这个OALIoCtlHalInitRTC后系统时间有变成默认的呢??分析这个函数吧?

#define RTC_YEAR_DATUM   2010 

BOOL OALIoCtlHalInitRTC(

    UINT32 code, VOID *pInpBuffer, UINT32 inpSize, VOID *pOutBuffer,

    UINT32 outSize, UINT32 *pOutSize

) {

    BOOL rc = FALSE;

    SYSTEMTIME *pTime = (SYSTEMTIME*)pInpBuffer;

    OALMSG(1, (L'+OALIoCtlHalInitRTC(...)rn'));

    // Validate inputs

    if (pInpBuffer == NULL || inpSize < sizeof(SYSTEMTIME)) {

        NKSetLastError(ERROR_INVALID_PARAMETER);

        OALMSG(OAL_ERROR, (

            L'ERROR: OALIoCtlHalInitRTC: Invalid parameterrn'

        ));

        goto cleanUp;

    }

    // Add static mapping for RTC alarm

    OALIntrStaticTranslate(SYSINTR_RTC_ALARM, IRQ_RTC);

    // Set time fxf 20100416

  //  rc = OEMSetRealTime(pTime);

    rc = OEMGetRealTime(pTime);

      

cleanUp:

    OALMSG(OAL_IOCTL&&OAL_FUNC, (L'-OALIoCtlHalInitRTC(rc = %d)rn', rc));

    return rc;

}

这个函数大部分代码都是废话,也就是没有作为的代码。当我看到  rc = OEMSetRealTime(pTime);时我崩溃了。为什么呢?我先前在OEMInit又被这句话设置成默认的了,于是改成 rc = OEMGetRealTime(pTime);这样在调用OALIoCtlHalInitRTC时只要get一个就可以了。呵呵搞定了!小样!

UT2416的对应文件夹在SMDK2416/SRC/COMMON/RTC。

UT-S5PC100:时间掉电可以保存,日期保存不了

解决方法: 将WINCE600PLATFORMSMDKC100SRCOALOALLIBInit.c

                 273~282行注释掉即可


关键字:WINCE 引用地址:WINCE--系统时间设置

上一篇:Ubuntu--tar命令
下一篇:WICNE--编译出来的NK太大 修改Eboot

推荐阅读最新更新时间:2024-11-11 11:53

WinCE 7.0下的触摸屏驱动
  在嵌入式系统中较为常用的是四线电阻式触摸屏,通过检测x轴和y轴的电压,来确定触点的位置。一般触摸屏系统结构为:触摸屏- 触摸屏控制器- 处理器。   wince7下触摸屏的驱动分为PDD层(位于bsp目录中)和MDD层(位于public目录中)。PDD层和MDD层通过DDSI接口函数连接,MDD层和上层通过DDI函数连接。其中MDD层一般无需修改,我们只需修改PDD层的代码。   比如我的bsp目录下触摸屏驱动中的touchscreenpdd.cpp文件中主要有如下函数:   TchPdd_Init()   TchPdd_Ioctl()   PDDTouchIST()   PDDInitializeHardware
[电源管理]
<font color='red'>WinCE</font> 7.0下的触摸屏驱动
基于ARM+WinCE项目开发过程中动态加载GPIO端口驱动程序的设计方法
  本文针对采用基于流接口驱动方式进行GPIO端口驱动开发所存在的困难和不足,提出了采用动态方式加载(卸载)端口驱动的思路,给出了该思路下GPIO端口驱动设计方法的步骤和关键代码并进行了验证,为其他类似的驱动设计与实现提供参考。   WinCE下GPIO端口驱动大多采用流接口驱动的方式进行开发,在实现上主要依托Platform Builder编译环境将驱动程序编译成动态链接库,并整合到WinCE内核中。但在实际项目的开发中,Platform Builder在驱动程序的开发和涮试上不够便捷,且在整合动态链接库和WinCE内核时,需要进行繁琐的参数配置,整个过程较为复杂。笔者以飞凌S3C2440开发板为例,给出在VisualStudi
[单片机]
基于ARM+<font color='red'>WinCE</font>项目开发过程中动态加载GPIO端口驱动程序的设计方法
WINCE下s3c2410+cs8900 板子的网络问题解决
CS8900+s3c2410上网掉线的问题及其解决办法 自我理解是,系统在运行网络的时候,经常会去使能网络中断,而造成网络复位了 找到 E:\WINCE420\WINCE420\PLATFORM\SMDK2410\KERNEL\HAL\cfw.c 找到 BOOL OEMInterruptEnable() 函数 里 case SYSINTR_ETHER: 使网卡的初始化只出现一次,因为每次初始化以后,连接就会断掉 加一个全局变量 Inited == FALSE case SYSINTR_ETHER: // Ethernet on EINT9. if(Inited == FALSE) // edit by andy
[单片机]
嵌入式WINCE下实现ftp client问题
现在的4412开发板有android、qt、ubuntu系统。 需要在WINCE下实现ftp client。但WINCE下没有现成的API或组件。 使用.net C#开发。查阅了相关的资料。好像只能通过TCP来实现。 但FTP协议分为命令通道与数据传输通道。 解决办法: FTP 基于 Socket(TCP) 这很正常。命令通道与数据传输通道无非就是开两个 TCP 连接。 也可以考虑用Wininet实现,他提供了InternetOpen,InternetConnect等等API,可以实现FTP。 如果你的ftp不是要求功能很强大,那么Wininet实现绝对比socket来的简单,大概500行代码基本能实现基本的上
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved