真所谓是人背的时候,喝凉水都塞牙。今天去弄那个rtc-断电保存时间的问题(当然要有外部电源供电了)。
      在做这个之前,也在网上搜了一把。大体来说是很简单的:一般系统是在每次冷启动的时候,都要重新设置时间。所以即使系统断电后有外部电源供电给外部rtc,在下一次启动系统的时候,系统的时间也会被重新设置成2003-01-01,12:00:00。修改很简单,只要在系统起来的时候不去重新设置这个系统时间就可以了。可以在IOCTL_HAL_INIT_RTC的处理中修改,也可以在OEMSetRealTime中修改(在此的话,用静态变量表示第一次不设置直接返回,以后的都要真正的设置)。
      OEMSetRealTime在wince420\platform\smdk2440\kernel\hal\timer.c(wince500\platform\common\src\arm\samsun\s3c2440a\rtc\rtc.c)中,IOCTL_HAL_INIT_RTC在wince420\platform\smdk2440\kernel\hal\oemioctl.c(wince5下对应的是函数OALIoCtlHalInitRTC在wince500\platform\common\src\arm\samsun\s3c2440a\rtc\rtc.c)中。
      之所以有以上的感叹,是因为,用于调试的一块板子可以将时间设置,却不能启动rtc也就是时间永远是你设置的那个时间,连1s也不往前走,真TMD懒。对于出现这样的问题,我只能从自己的修改上找原因,但是终于忍无可忍了,烧了一个没有修改的nk,因为我知道这个即使是这个2003-01-01,12:00:00经典的时间,在系统起来之后,时间也会往前冲的。出现了,时间一直挂死在2003-01-01,12:00:00。
       换板子,RTC-ok,再不往前冲,老子毙了你。