Windows CE应用程序可移植性浅析
创始人
2024-04-17 06:21:14
0

由于桌面Windows绝大多数情况下运行于X86平台上,也就不存在不同平台的可移植性问题。然而Windows CE运行在四大架构(X86,SHx,MIPS,ARM)的CPU上,编写应用程序时就需要考虑它的移植。

以下通过在wince系统下访问物理地址,来看看如何编写可移植性较好的Windows CE应用程序。

首先必须明确两个概念。

1. 在X86平台下才有I/O地址这一说,在其他体系的CPU(如ARM/MIPS)下是没有I/O端口的。因为X86下把I/O和存储器分开编址,导致其有两种地址;而别的CPU是把两者统一编址,即把I/O映射到存储器上。

2. WinCE的存储管理是通过MMU实现的,在系统启动后,我们只能访问虚拟存储空间,必须经过MMU。但是在X86下,访问I/O口和存储器走的地址总线不同,不用经过MMU。

比如我们想要访问挂在某总线上物理地址为360h的端口,对于X86平台我们可以直接嵌入汇编操作物理地址, 或者使用地址指针访问物理地址。但对于其他平台,我们必须先作一个物理地址到虚拟地址的映射,然后操作其虚拟地址。这样显然程序的可移植性不好,我们需要定义  #ifdef __x86....#elif defined __arm  使得在不同平台下程序能够顺利运行。

如果使用下面的代码我们就可以不用这么费劲的定义不同平台了:

先定义

  1.      inIoSpace = 1;  
  2.     ioPhysicalBase.QuadPart = 0x360;   
  3.  
  4. if( HalTranslateBusAddress( Isa, //此函数把ISA总线上物理地址映射为系统物理地址  
  5.     0,  
  6.     ioPhysicalBase,  
  7.     &inIoSpace,  //此参数=1说明转化的是I/O空间地址,=0时存储器地址  
  8.     &ioPhysicalBase ) )  
  9. {  
  10.     if( !inIoSpace )   ////如果是存储器地址,针对非X86 平台  
  11.  
  12.     {  
  13.     ioPortBase = ( PUCHAR ) MmMapIoSpace(    //此函数把系统物理地址转化为虚拟地址  
  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下的宏来实现端口读写。而不是在X86下用指针操作(不仅移植性差,而且容易产生问题)。CE下的宏在内部是封装好的API函数。例如WRITE_PORT_UCHAR这个宏在X86 处理器上转化为一条OUT的汇编指令;而在ARM处理器上会转化成一条对虚拟地址的写指令。

WinCE5.0下可以使用CreateBusAccessHandle(总线注册表路径)+BusTransBusAddrToVirtual来实现总线物理地址到系统虚拟地址的直接变换。这种方式比起使用OEMAddressTable+VirtualAlloc+VirtualCopy方式更具不同平台的可移植性。

本文为Windows Embedded征文比赛获奖文章。

【编辑推荐】

  1. 在WinCE中获取设备ID
  2. WinCE编译过程的四个阶段
  3. WinCE中触摸屏驱动开发详解
  4. 基于WinCE的液位遥测系统软件设计
  5. WinCE中串口驱动及接口函数介绍

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...