浅谈Win CE应用程序的可移植性

分享到:

 由于桌面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方式更具不同平台的可移植性。

继续阅读
基于嵌入式Linux的3G无线视频终端的设计与实现

针对目前市场上对与3G模块通常只提供Windows CE下的驱动这一情况,开发了嵌入式Linux系统下的3G模块驱动程序,在软件设计上充分发挥了开源软件的优势,采用高效的Xvidcore编解码库,来完成视频的编码,以及使用PPP源码来编译拨号上网工具,成本低廉并且缩短了系统的开发周期,使得本系统具有较强的工程实用价值。

Windows CE 6.0 Multi-bin的设计与实现

Windows CE操作系统存在启动速度慢的现象。为此在解析系统镜像文件和研究镜像文件下载函数的基础上,设计了一种在Windows CE系统Bootloader中实现Multi-bin的方法。通过调用Bootloader中的BootPart支持库的接口函数,借助BinFS文件系统,从而减少了系统的启动时延,增加了用户的可用内存,降低了客户的等待时间,最终达到提高客户用户体验(QoE)的目的。

浅谈Win CE应用程序的可移植性

Windows CE运行在四大架构(X86,SHx,MIPS,ARM)的CPU上,编写应用程序时就需要考虑它的移植。通过在wince系统下访问物理地址,来看看如何编写可移植性较好的应用程序。

存储的过去与未来 分析存储I/O与物理定律

进入2000年后,存储行业发生了翻天覆地的变化。有好的变化,同时也有令人不太满意的地方。比如存储管理方面的情况变得有些糟糕。大家要克服的种种限制,其实是由简单物理学造成的。数据从应用程序转移到硬件受制于计算机及其存储硬件里面的物理制约因素。

基于Windows CE的SPI驱动程序设计

Windows CE Platform Builder中给出了支持多种CPU常用设备驱动程序,如LCD驱动、鼠标驱动、USB驱动、串口驱动等;但有时由于平台采用了其他特定的硬件设备,其驱动程序在Platform Builder并没有给出,这时就需要用户针对实际的硬件自行开发,以满足个性化的需求。本文所涉及的SPI接口驱动就属于此类。

©2019 Microchip Corporation
facebook google plus twitter linkedin youku weibo rss