成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Windows CE應(yīng)用程序可移植性淺析

開發(fā)
本文對Windows CE應(yīng)用程序的可移植性進行了分析。由于運行在四大架構(gòu)上,WinCE可移植性是編寫過程中需要重點考慮的因素。

由于桌面Windows絕大多數(shù)情況下運行于X86平臺上,也就不存在不同平臺的可移植性問題。然而Windows CE運行在四大架構(gòu)(X86,SHx,MIPS,ARM)的CPU上,編寫應(yīng)用程序時就需要考慮它的移植。

以下通過在wince系統(tǒng)下訪問物理地址,來看看如何編寫可移植性較好的Windows CE應(yīng)用程序。

首先必須明確兩個概念。

1. 在X86平臺下才有I/O地址這一說,在其他體系的CPU(如ARM/MIPS)下是沒有I/O端口的。因為X86下把I/O和存儲器分開編址,導(dǎo)致其有兩種地址;而別的CPU是把兩者統(tǒng)一編址,即把I/O映射到存儲器上。

2. WinCE的存儲管理是通過MMU實現(xiàn)的,在系統(tǒng)啟動后,我們只能訪問虛擬存儲空間,必須經(jīng)過MMU。但是在X86下,訪問I/O口和存儲器走的地址總線不同,不用經(jīng)過MMU。

比如我們想要訪問掛在某總線上物理地址為360h的端口,對于X86平臺我們可以直接嵌入?yún)R編操作物理地址, 或者使用地址指針訪問物理地址。但對于其他平臺,我們必須先作一個物理地址到虛擬地址的映射,然后操作其虛擬地址。這樣顯然程序的可移植性不好,我們需要定義  #ifdef __x86....#elif defined __arm  使得在不同平臺下程序能夠順利運行。

如果使用下面的代碼我們就可以不用這么費勁的定義不同平臺了:

先定義

  1.      inIoSpace = 1;  
  2.     ioPhysicalBase.QuadPart = 0x360;   
  3.  
  4. if( HalTranslateBusAddress( Isa, //此函數(shù)把ISA總線上物理地址映射為系統(tǒng)物理地址  
  5.     0,  
  6.     ioPhysicalBase,  
  7.     &inIoSpace,  //此參數(shù)=1說明轉(zhuǎn)化的是I/O空間地址,=0時存儲器地址  
  8.     &ioPhysicalBase ) )  
  9. {  
  10.     if( !inIoSpace )   ////如果是存儲器地址,針對非X86 平臺  
  11.  
  12.     {  
  13.     ioPortBase = ( PUCHAR ) MmMapIoSpace(    //此函數(shù)把系統(tǒng)物理地址轉(zhuǎn)化為虛擬地址  
  14.     ioPhysicalBase,  
  15.     IoLen,  
  16.     FALSE );  
  17. if( ioPortBase == NULL )  
  18. {  
  19.     //TODO: Error handling  
  20. }  
  21.     }  
  22.     else //如果是I/O,即X86 下,不需要做地址映射  
  23.     {  
  24. ioPortBase = ( PUCHAR ) ioPhysicalBase.LowPart;  
  25.     }  
  26. }  
  27. else 
  28. {  
  29.     //TODO: Error Handling  
  30. }  

隨后對于端口的操作( ioPortBase),我們也可以充分挖掘它的可移植性。通過使用READ_PORT_UCHAR,
WRITE_PORT_UCHAR這些wince下的宏來實現(xiàn)端口讀寫。而不是在X86下用指針操作(不僅移植性差,而且容易產(chǎn)生問題)。CE下的宏在內(nèi)部是封裝好的API函數(shù)。例如WRITE_PORT_UCHAR這個宏在X86 處理器上轉(zhuǎn)化為一條OUT的匯編指令;而在ARM處理器上會轉(zhuǎn)化成一條對虛擬地址的寫指令。

WinCE5.0下可以使用CreateBusAccessHandle(總線注冊表路徑)+BusTransBusAddrToVirtual來實現(xiàn)總線物理地址到系統(tǒng)虛擬地址的直接變換。這種方式比起使用OEMAddressTable+VirtualAlloc+VirtualCopy方式更具不同平臺的可移植性。

本文為Windows Embedded征文比賽獲獎文章。

【編輯推薦】

  1. 在WinCE中獲取設(shè)備ID
  2. WinCE編譯過程的四個階段
  3. WinCE中觸摸屏驅(qū)動開發(fā)詳解
  4. 基于WinCE的液位遙測系統(tǒng)軟件設(shè)計
  5. WinCE中串口驅(qū)動及接口函數(shù)介紹
責(zé)任編輯:yangsai 來源: 網(wǎng)絡(luò)
相關(guān)推薦

2012-12-14 09:35:03

私有云應(yīng)用程序可移植性OpenStack

2009-08-17 10:17:01

C# Windows

2012-09-24 09:31:28

應(yīng)用移植性云計算云平臺應(yīng)用程序

2016-08-02 09:45:59

云計算

2011-06-14 14:18:08

可移植性測試

2012-11-16 15:34:35

Cloud FoundVMware PaaS平臺即服務(wù)

2013-04-02 09:25:20

PaaS 應(yīng)用可移植性PaaS提供商平臺即服務(wù)

2009-08-25 09:39:21

創(chuàng)建C# Window

2011-07-22 17:41:02

java

2011-07-11 17:33:25

JAVA可移植性

2009-07-10 17:24:07

Swing應(yīng)用程序

2011-07-20 16:59:07

2022-12-25 18:03:13

Debug原理軟件

2013-05-28 10:33:06

虛擬化虛擬機移植

2010-01-26 13:29:46

VC++應(yīng)用程序

2009-07-09 16:47:26

Servlet的Web

2009-09-24 17:21:17

加速Hibernate

2009-07-20 16:08:04

ASP.NET應(yīng)用程序

2012-09-07 09:51:07

云互操作性云可移植性云計算服務(wù)

2024-11-22 09:00:00

云原生云計算云應(yīng)用
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 精精国产xxxx视频在线播放 | 涩涩视频网 | www.狠狠干 | 精品国产一区二区三区久久 | 国产大毛片 | 色婷婷国产精品综合在线观看 | 日韩中文字幕2019 | 欧美精品一二三区 | 中文字幕日韩欧美一区二区三区 | 亚洲国产成人精品女人久久久 | 精品欧美一区二区三区久久久 | 亚洲福利在线观看 | 牛牛热在线视频 | 国产一区2区 | 国产精品福利在线观看 | 久久精品国产免费看久久精品 | 国产福利在线 | 欧美中文字幕在线观看 | av网站免费观看 | 欧美亚洲另类丝袜综合网动图 | 精品视频久久久 | 免费看黄色视屏 | 亚洲精品一区二区三区蜜桃久 | 国产在线第一页 | 国产日韩欧美在线观看 | 一区二区三区国产 | 欧美成人一区二区三区 | 免费一级网站 | 欧美成人综合 | 亚州激情 | 国产精品久久久久久婷婷天堂 | 国产98色在线 | 日韩 | 一起操网站 | 我想看国产一级毛片 | 国产国语精品 | 国产精品一区二区福利视频 | 中文字幕国产 | 欧美lesbianxxxxhd视频社区 | 日韩av免费看 | 日日操视频| 日本黄色免费片 |