我的方法更老土,设定时器。。。。。。。。
不过我是每分钟都有GPS校时的,运行的还可以
-> ctime_test
tm_sec = 43
tm_min = 11
tm_hour = 19
tm_mday = 11
tm_mon = 8
tm_year = 5
SUN FEB 06 06:28:15 2106
current data:1-6-206
current data:06-28
value = 19 = 0x13
,************************************************************
从以上结果来看,从BIOS中读取的时间是正确的。问题出在
sysOutByte( 0x70, 0x09 );/*year*/
cYear = sysInByte( 0x71 );
ahora.tm_year = ( cYear & 0x0F ) + 10 * ( ( cYear & 0xF0 ) >> 4 );
printf( "tm_year = %d\n", ahora.tm_year );
return mktime( &ahora );
,如果改成ahora.tm_year = ( cYear & 0x0F ) + 10 * ( ( cYear & 0xF0 ) >> 4 )+100;
试验运行的结果是正确的。
struct tm中tm_year为当前年减1900
BIOS中减2000;
至于为什么会出现时间固定,就不太清楚了,可能和mktime()函数的内部结构有关,有可能是数据错误,直接返回,只是猜想而以哦
星期和月份错的原因还是因为vxWorks和BIOS的时间格式不相同造成的。
tm结构中int tm_mon的范围是0-11;
而BIOS中的月份是1-12;
这样你得到的月份就差了一个月。
在asctime和mktime函数中认的月份是tm_mon%12。
如果你要用字符串显示的话,你就要在变换之前把tm_mon-1(最好用tm_mon=tm_mon%12);
或者直接用tm结构显示,或者自己写转换函数,很简单的。
至于向BIOS中写时间的问题,可根据需要,不过最好还是在手动更改时间或程序结束时向BIOS中写时间。
写法:
以秒为例子,unsgined char temp;
temp=tm_sec/10*16+tm_sec%10;
sysOutByte(0x70,0x00);
sysOutByte(0x71,temp);
由于我用zinc,我没有用到字符串显示时间,所以我用的是BIOS标准。如果用vxWorks标准的话很多tm项的取值范围都是不一样的,要注意。
我也是刚学,以后多交流。
星期和月份错的原因还是因为vxWorks和BIOS的时间格式不相同造成的。
tm结构中int tm_mon的范围是0-11;
而BIOS中的月份是1-12;
这样你得到的月份就差了一个月。
在asctime和mktime函数中认的月份是tm_mon%12。
如果你要用字符串显示的话,你就要在变换之前把tm_mon-1(最好用tm_mon=tm_mon%12);
或者直接用tm结构显示,或者自己写转换函数,很简单的。
至于向BIOS中写时间的问题,可根据需要,不过最好还是在手动更改时间或程序结束时向BIOS中写时间。
写法:
以秒为例子,unsgined char temp;
temp=tm_sec/10*16+tm_sec%10;
sysOutByte(0x70,0x00);
sysOutByte(0x71,temp);
由于我用zinc,我没有用到字符串显示时间,所以我用的是BIOS标准。如果用vxWorks标准的话很多tm项的取值范围都是不一样的,要注意。
我也是刚学,以后多交流。
EarnestWang说的很对。你能告诉大家如何修改bios中的所有时钟信息吗?包括年月日,时分秒等。
打赏帖 | |
---|---|
【Zephyr】MCXN947 Zephyr 开发入门适配shell被打赏20分 | |
【我要开发板】6.联合MATLAB记录数据被打赏50分 | |
【瑞萨RA2E1开发板】:使用ADC功能实现位移传感器采集方案被打赏20分 | |
【nRF7002DK】基于sht30的温湿度计被打赏20分 | |
【nRF7002DK】日志打印被打赏20分 | |
rtthread硬件加密-5hash加密分析被打赏10分 | |
【STM32F769】SD卡驱动及其调试经验分享被打赏32分 | |
【分享开发笔记,赚取电动螺丝刀】使用看门狗降低系统隐藏bug触发概率被打赏18分 | |
【STM32F769】调试SD驱动,由于其时钟配置不对引起的错误以及排查记录被打赏35分 | |
【分享开发笔记,赚取电动螺丝刀】MCUXpressoConfigTools配置外设时的异常解决被打赏24分 |