在vxworks里取的系统时间是从开机到现在的时间,如果想取到日历时间的话只能借助外界的硬件支持了。在X86系统里,可以通过读取71端口来读取日历时间,以下是一个博友给我的C程序,我改了一下发给大家,可以在vxworks下用
#include<stdio.h>
void ReadTime(int* pYear,int* pMonth,int* pDate,int* pDay,int* pHour,int* pMinute,int* pSecond);
void ReadTime(int* pYear,int* pMonth,int* pDate,int* pDay,int* pHour,int* pMinute,int* pSecond)
{
int OldYear,OldMonth,OldDate,OldDay,OldHour,OldMinute,OldSecond;
int YearTemp,MonthTemp,DateTemp,DayTemp,HourTemp,MinuteTemp,SecondTemp;
int Century;
OldYear="OldMonth"=OldDate=OldDay=OldHour=OldMinute=OldSecond=-1;
sysOutByte(0x70,0x32);
Century=(int)sysInByte(0x71);
for(;;)
{
asm pushf; //Save interrupt enable|disable status
asm cli; //Disable interrupt
sysOutByte(0x70,0xa);
if((0x80&sysInByte(0x71))!=0)
{
asm popf; //Restore interrupt enable|disable status
continue;
}
sysOutByte(0x70,9);
YearTemp=(int)sysInByte(0x71);
sysOutByte(0x70,8);
MonthTemp=(int)sysInByte(0x71);
sysOutByte(0x70,7);
DateTemp=(int)sysInByte(0x71);
sysOutByte(0x70,6);
DayTemp=(int)sysInByte(0x71);
sysOutByte(0x70,4);
HourTemp=(int)sysInByte(0x71);
sysOutByte(0x70,2);
MinuteTemp=(int)sysInByte(0x71);
sysOutByte(0x70,0);
SecondTemp=(int)sysInByte(0x71);
sysOutByte(0x70,0xa);
if((0x80&sysInByte(0x71))!=0)
{
asm popf; //Restore interrupt enable|disable status
continue;
}
if((OldYear!=YearTemp)||(OldMonth!=MonthTemp)||(OldDate!=DateTemp)
||(OldDay!=DayTemp)||(OldHour!=HourTemp)||(OldMinute!=MinuteTemp)
||(OldSecond!=SecondTemp))
{
OldYear="YearTemp";
OldMonth="MonthTemp";
OldDate="DateTemp";
OldDay="DayTemp";
OldHour="HourTemp";
OldMinute="MinuteTemp";
OldSecond="SecondTemp";
asm popf;
continue;
}
asm popf; //Restore interrupt enable|disable status
break;
}
*pYear=(Century>>4)*1000+(Century&0xf)*100+(YearTemp>>4)*10+(YearTemp&0xf);
*pMonth=(MonthTemp>>4)*10+(MonthTemp&0xf);
*pDate=(DateTemp>>4)*10+(DateTemp&0xf);
*pDay=DayTemp;
*pHour=(HourTemp>>4)*10+(HourTemp&0xf);
*pMinute=(MinuteTemp>>4)*10+(MinuteTemp&0xf);
*pSecond=(SecondTemp>>4)*10+(SecondTemp&0xf);
}
void main(void)
{
int t1,t2,t3,t4,t5,t6,t7;
ReadTime(&t1,&t2,&t3,&t4,&t5,&t6,&t7);
printf("%d %d %d %d %d %d %d\n",t1,t2,t3,t4,t5,t6,t7);
}
文章评论(0条评论)
登录后参与讨论