Loading
新闻中心库存中心价格中心PDF中心图片中心
ICGLE 电子技术支持中心,为电气人员和相关企业提供全面的信息(IC技术\IC库存\IC图片\PDF资料等)服务
总线设计PCB设计单片机DSPARM
JAVA驱动设计C/C++汇编J2EE网络协议中间件技术嵌入式系统无线通信通信网络模拟技术接口电路显示光电传感与控制EDA/PLD
气流体控制电子产品电机及工具通信设备仪器仪表电线电缆建筑电气低压电器高压电器电源工控自动化广电设备医疗器械More..
电源设计仪器仪表技术专递电路图片电子专栏储存技术汽车电子测量测试音响技术家用电器
成功方案市场分析行业标准应用前沿芯片应用综合专区
浅谈Windows CE应用程序的可移植性
来源:http://blog.csdn.net   作者:
字体大小:[大][中][小]


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

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

首先必须明确两个概念。
  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 使得在不同平台下程序能够顺利运行。
如果使用下面的代码我们就可以不用这么费劲的定义不同平台了:

先定义
inIoSpace = 1;
ioPhysicalBase.QuadPart = 0x360;
if( HalTranslateBusAddress( Isa, //此函数把ISA总线上物理地址映射为系统物理地址
0,
ioPhysicalBase,
&inIoSpace, //此参数=1说明转化的是I/O空间地址,=0时存储器地址
&ioPhysicalBase ) )
{
if( !inIoSpace ) ////如果是存储器地址,针对非X86 平台

{
ioPortBase = ( PUCHAR ) MmMapIoSpace( //此函数把系统物理地址转化为虚拟地址
ioPhysicalBase,
IoLen,
FALSE );
if( ioPortBase == NULL )
{
//TODO: Error handling
}
}
else //如果是I/O,即X86 下,不需要做地址映射
{
ioPortBase = ( PUCHAR ) ioPhysicalBase.LowPart;
}
}
else
{
//TODO: Error Handling
}

  随后对于端口的操作( ioPortBase),我们也可以充分挖掘它的可移植性。通过使用READ_PORT_UCHAR,
WRITE_PORT_UCHAR这些wince下的宏来实现端口读写。而不是在X86下用指针操作(不仅移植性差,而且容易产生问题)。CE下的宏在内部是封装好的API函数。例如WRITE_PORT_UCHAR这个宏在X86 处理器上转化为一条OUT的汇编指令;而在ARM处理器上会转化成一条对虚拟地址的写指令。

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

Upload by 小刘(2007-5-9)
IC
·VxWorks系统下的RTL8139..
·基于VxWorks的视频采集系统的设..
·VxWorks下UDP协议栈效率的研..
·基于MPC860T的嵌入式通信服务器..
·基于VxWorks嵌人式操作系统的C..
·VxWorks操作系统及实时多任务程..
·基于嵌入式操作系统VxWorks的图..
·利用VxWorks作Internet..
·linux下命令行下编译c程序
·移植U-Boot到AT91RM920..
·一种改进嵌入式Linux操作系统实时..
·Linux内核初始化及启动之用户模式..
·Linux在信息家电(IA)上的应用
·嵌入式Linux的动态扩展技术研究
·基于Linux的嵌入式POS的GUI..
·Linux嵌入式系统与硬件平台的关系
·基于嵌入式Linux的打印控制系统的..
·Linux下获得CPU利用率和内存使..
·擂台战:嵌入式Linux面临图形化挑..
·面向多媒体应用的嵌入式Linux实时..
·Linux系统内存磁盘初始化技术详细..
·Linux下的网络HOOK实现以及使..
·Linux系统下搭建C/C++开发的..
·移动电话挑战嵌入式Linux
·在嵌入式Linux上实现JFFS文件..
·基于嵌入式Linux系统界面的研究
·Linux的向“心”力运动
·支持基于Linux的USB设备的三种..
·基于ARM的嵌入式Linux开发平台
·主流嵌入式Linux动态扩展技术比较..
·嵌入Linux基于MiniGUI信息..
·蓝牙模块在HHARM2410上的移植
·基于Linux的嵌入式系统在测控系统..
·uClinux在嵌入式系统中的移植研..
·用busybox制作嵌入式Linux..
·基于uClinux的远程温度监控系统..
·uClinux内核移植相关代码分析
·linux驱动相关
·WinCE系统下BootLoader..
·Windows CE环境下无线网卡的..
IC
推荐技术文章:
IC
IC

©2007 版权归ICGLE所有   页面执行时间:46.875毫秒