这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 有关VxWorks系统时间设置问题?

共18条 2/2 1 2 跳转至
菜鸟
2005-08-23 17:38:00     打赏
11楼

我的方法更老土,设定时器。。。。。。。。

不过我是每分钟都有GPS校时的,运行的还可以


菜鸟
2005-08-23 21:13:00     打赏
12楼

-> 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()函数的内部结构有关,有可能是数据错误,直接返回,只是猜想而以哦

[em05][em05][em05][em05]

菜鸟
2005-08-24 16:39:00     打赏
13楼
megaco兄弟,

设置系统时间需要修改bios的时间吗?


菜鸟
2005-08-24 16:45:00     打赏
14楼
EarnestWang兄弟,按照你的说法我改了运行后,单独的年份显示变成了tm_year = 105,还有 SAT SEP 这还有点问题。

-> ctime_test
tm_sec = 25
tm_min = 41
tm_hour = 8
tm_mday = 24
tm_mon = 8
tm_year = 105
SAT SEP 24 08:41:25 2005

current data:8-24-105
current data:08-41-25


菜鸟
2005-08-24 21:23:00     打赏
15楼

星期和月份错的原因还是因为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项的取值范围都是不一样的,要注意。

我也是刚学,以后多交流。


菜鸟
2005-08-24 21:58:00     打赏
16楼
EarnestWang兄弟,还是你看得透彻啊!谢谢了啊!

菜鸟
2005-08-24 22:03:00     打赏
17楼
年份是从1900开始算的。

菜鸟
2005-08-25 20:40:00     打赏
18楼
以下是引用EarnestWang在2005-8-24 13:23:00的发言:

星期和月份错的原因还是因为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中的所有时钟信息吗?包括年月日,时分秒等。


共18条 2/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]