89
京東網上商城
vxworks for x86讀取bios時間的解決方法
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\n", asctime(&daytime) );
}
最後更新:2017-04-03 12:56:25
上一篇:
最近我在學習c++,為android項目做準備。
下一篇:
flare-spork: 自己維護的Pig on Spark項目
PhalApi-RabbitMQ基於PhalApi專業隊列拓展
CodeIgniter框架模型(model),視圖(view)和控製器(controller)中的文件操作
關於遠程桌麵登陸提示“連接被拒絕,因為沒有授權此用戶賬號進行遠程登錄”
HTAP數據庫 PostgreSQL 場景與性能測試之 32 - (OLTP) 高吞吐數據進出(堆存、行掃、無需索引) - 閱後即焚(JSON + 函數流式計算)
wallet勒索病毒數據恢複 數據庫恢複wallet病毒
《vSphere性能設計:性能密集場景下CPU、內存、存儲及網絡的最佳設計實踐》一1.2.3 網絡
使用單例模式實現自己的HttpClient工具類
【Python學習】打印10000以內的所有素數
聯想調整組織架構:分為Lenovo和Think兩大集團
ARMS 發布 V2.2.6 版本,全新支持 前端前監控, MQ數據源