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

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

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

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

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

首先必須明確兩個概念。

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

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

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

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

先定義

  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時(shí)存儲器地址  
  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下的宏來實(shí)現(xiàn)端口讀寫。而不是在X86下用指針操作(不僅移植性差,而且容易產(chǎn)生問題)。CE下的宏在內(nèi)部是封裝好的API函數(shù)。例如WRITE_PORT_UCHAR這個宏在X86 處理器上轉(zhuǎn)化為一條OUT的匯編指令;而在ARM處理器上會轉(zhuǎn)化成一條對虛擬地址的寫指令。

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

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

【編輯推薦】

  1. 在WinCE中獲取設(shè)備ID
  2. WinCE編譯過程的四個階段
  3. WinCE中觸摸屏驅(qū)動開發(fā)詳解
  4. 基于WinCE的液位遙測系統(tǒng)軟件設(shè)計(jì)
  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)用移植性云計(jì)算云平臺應(yīng)用程序

2016-08-02 09:45:59

云計(jì)算

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ù)

2011-07-22 17:41:02

java

2011-07-11 17:33:25

JAVA可移植性

2009-08-25 09:39:21

創(chuàng)建C# Window

2011-07-20 16:59:07

2022-12-25 18:03:13

Debug原理軟件

2009-07-10 17:24:07

Swing應(yīng)用程序

2013-05-28 10:33:06

虛擬化虛擬機(jī)移植

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)用程序

2010-01-26 13:29:46

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

2012-09-07 09:51:07

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

2024-11-22 09:00:00

云原生云計(jì)算云應(yīng)用
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 欧美国产日本一区 | 国产一区二区三区四区在线观看 | 国产精品永久 | 精品国产乱码久久久久久闺蜜 | www.亚洲 | 夜夜骑综合 | 久久男人 | 91资源在线观看 | 久热精品视频 | 99热热99 | 羞羞视频在线观看 | 天天天天操 | 成人综合视频在线观看 | 成人欧美一区二区三区黑人孕妇 | 欧美888| 成人片免费看 | 久草在线在线精品观看 | 99在线精品视频 | 一级毛片免费视频 | 成av在线 | 韩日一区二区 | 一区二区免费视频 | 欧美中文字幕一区 | 国产精品观看 | 草草视频在线观看 | 精品产国自在拍 | 伊人爽| 亚洲精品白浆高清久久久久久 | 亚洲另类视频 | 亚洲精品888 | 亚洲成人久久久 | 国产精品99精品久久免费 | 性色av网站| 精品视频一区二区 | 国产一区精品 | 日日夜夜天天综合 | 欧美在线一区二区视频 | 亚洲免费视频在线观看 | 精品视频一区在线 | 国产一级毛片精品完整视频版 | 国产精品久久久久久久久久 |