VXWorks 时间问题

1。首先读取rtc的时间。时,分,秒。。。,       
        
    2。利用clock_settime设置系统时间       
        
    下面是x86体系读取bios时间的例子。类似你可以读取rtc中的时间:)       
        
    系统时间与bsp有关,在vzworks       for       x86系列的目标没有直接读取RTC(实时时钟控制器)的函数,用time.h中的函数读到的始终是 00:00:00,       Jan.       1       1970.       
      所以在x86系列的机器中,我们可以从bios中读取当前的时钟。用sysInByte(),sysOutByte(),在70,和71端口读取或写bios里的时间.       
      首先要分析bios的内容,找出秒,分,时,天,月,年的存放地址。       
    他们分别是: 0x00,0x02,0x04,0x07,0x08,0x09年的低位字节,0x0A年的高为字节       
    然后从71端口读出相应的值,进行转换。       
    如:秒       
            sysOutByte(0x70,0x00);       
            second       =       sysInByte(0x71);       
    读出的second进行转换,:       
            second =       (second       &0x0F)       +       10*((second       &0xF0)> > 4);       
        
    示例代码:       
    
  1. time_t biostime() 
  2.     { 
  3.       struct tm   ahora; 
  4.       unsigned char cHour, cMin, cSec; 
  5.       unsigned char cDay, cMonth, cYear; 
  6.         
  7.       sysOutByte(0x70,0x00/*second*/); 
  8.       cSec = sysInByte(0x71); 
  9.       ahora.tm_sec = (cSec&0x0F) + 10*((cSec&0xF0)> > 4); 
  10.         
  11.       sysOutByte(0x70,0x02/*minut*/); 
  12.       cMin = sysInByte(0x71); 
  13.       ahora.tm_min = (cMin&0x0F) + 10*((cMin&0xF0)> > 4); 
  14.         
  15.       sysOutByte(0x70,0x04/*hour*/); 
  16.       cHour = sysInByte(0x71); 
  17.       ahora.tm_hour = (cHour&0x0F) + 10*((cHour&0xF0)> > 4); 
  18.         
  19.       
  20.       sysOutByte(0x70,0x07/*day*/); 
  21.       cDay = sysInByte(0x71); 
  22.       ahora.tm_mday = (cDay&0x0F) + 10*((cDay&0xF0)> > 4); 
  23.         
  24.       sysOutByte(0x70,0x08/*month*/); 
  25.       cMonth = sysInByte(0x71); 
  26.       ahora.tm_mon = (cMonth&0x0F) + 10*((cMonth&0xF0)> > 4) - 1; 
  27.         
  28.       sysOutByte(0x70,0x09/*year*/); 
  29.       cYear = sysInByte(0x71); 
  30.       ahora.tm_year = 100 + (cYear&0x0F) + 10*((cYear&0xF0)> > 4); 
  31.         
  32.       return mktime(&ahora); //将日期转化成时间戳
  33.     }
    我们在系统初始化时读取bios时间一次,然后修改系统时钟:       
    用       
     clock_settime(..)       
    以后我们得到的时间就都是当前的正确时间       
    示例:       
   
  1. void inittime() 
  2.     { 
  3.       int res; 
  4.       struct timespec ts; 
  5.       struct tm daytime; 
  6.       time_t stime; 
  7.         
  8.       ts.tv_sec = biostime(); 
  9.       ts.tv_nsec = 0; 
  10.       res = clock_settime(CLOCK_REALTIME, &ts); 
  11.       
  12.       stime = time(NULL); 
  13.       
  14.       daytime = *localtime(&stime); 
  15.       printf ( "time is :%s\n ", asctime(&daytime) ); 
  16.         
  17.     }
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值