zoukankan      html  css  js  c++  java
  • vxworks for x86读取bios时间的解决方法 分类: vxWorks 2014-04-29 17:13 478人阅读 评论(0) 收藏

    vxworks for x86读取bios时间的解决方法

     系统时间与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

    然后从71端口读出相应的值,进行转换。

    如:秒

      sysOutByte(0x70,0x00);

      second = sysInByte(0x71);

    读出的second进行转换,:

      second = (second &0x0F) + 10*((second &0xF0)>>4);

    示例代码:

    time_t biostime()

    {

      struct tm   ahora;

      unsigned char cHour, cMin, cSec;

      unsigned char cDay, cMonth, cYear;

      sysOutByte(0x70,0x00/*second*/);

      cSec = sysInByte(0x71);

      ahora.tm_sec = (cSec&0x0F) + 10*((cSec&0xF0)>>4);

      sysOutByte(0x70,0x02/*minut*/);

      cMin = sysInByte(0x71);

      ahora.tm_min = (cMin&0x0F) + 10*((cMin&0xF0)>>4);

      sysOutByte(0x70,0x04/*hour*/);

      cHour = sysInByte(0x71);

      ahora.tm_hour = (cHour&0x0F) + 10*((cHour&0xF0)>>4);

     

      sysOutByte(0x70,0x07/*day*/);

      cDay = sysInByte(0x71);

      ahora.tm_mday = (cDay&0x0F) + 10*((cDay&0xF0)>>4);

      sysOutByte(0x70,0x08/*month*/);

      cMonth = sysInByte(0x71);

      ahora.tm_mon = (cMonth&0x0F) + 10*((cMonth&0xF0)>>4) - 1;

      sysOutByte(0x70,0x09/*year*/);

      cYear = sysInByte(0x71);

      ahora.tm_year = 100 + (cYear&0x0F) + 10*((cYear&0xF0)>>4);

      return mktime(&ahora);

    }

    我们在系统初始化时读取bios时间一次,然后修改系统时钟:

     clock_settime(..)

    以后我们得到的时间就都是当前的正确时间

    示例:

    void inittime()

    {

      int res;

      struct timespec ts;

      struct tm daytime;

      time_t stime;

      ts.tv_sec = biostime();

      ts.tv_nsec = 0;

      res = clock_settime(CLOCK_REALTIME, &ts);

     

      stime = time(NULL);

     

      daytime = *localtime(&stime);

      printf ( "time is :%s ", asctime(&daytime) );

    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    ARM Linux 3.x的设备树(Device Tree)
    ubuntu 14.04 编译内核出现unable to locate package ncurses-devel 问题的解决
    Device Tree Usage( DTS文件语法)
    Ubuntu 14.04中gedit打开文件出现中文乱码问题
    Jenkins中集成jmeter-maven插件
    Linux(centos6.5)下安装jenkins
    IM系统架构设计之浅见
    一些常用软件的网络端口协议分类介绍
    Jenkins执行批处理文件失败
    八大持续集成工具
  • 原文地址:https://www.cnblogs.com/mao0504/p/4706629.html
Copyright © 2011-2022 走看看