当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]浅谈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方式更具不同平台的可移植性。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

(全球TMT2022年10月20日讯)国际消费类电子产品展CES 2023将于2023年1月5日至8日在美国拉斯维加斯举行。Cision旗下美通社成为本届CES官方新闻发布合作伙伴。这也是美通社连续第三年为主办方及参展...

关键字: CE CIS 消费类电子 MT

(全球TMT2022年10月20日讯)三星电子宣布2亿像素(200MP)系列传感器再增添一员。延续三星最小的0.56微米(μm)像素,全新的图像传感器ISOCELL HPX为智能手机相机用户继续提供超高分辨率的影像世界...

关键字: 三星电子 传感器 CE SoC

立邦不断推动环境友好型涂料的创新研发,并将低温固化粉末涂料产品应用于煤矿设备领域。相较其他粉末涂料,立邦低温固化粉末涂料NPD-ACE -LT系列,全面降低了实现涂料理想固化效果所需的烘烤温度,使之所需的升温时间也大幅减...

关键字: 温度 PD D-A CE

云顶新耀宣布其合作伙伴Providence Therapeutics Holdings Inc.的mRNA新冠候选疫苗PTX-COVID19-B在评估其安全性、耐受性和免疫原性的II期研究中取得了积极的顶线结果。云顶新耀...

关键字: VI OV IDE CE

四季酒店集团2022年10月17日宣布任命Alejandro Reynal为CEO兼总裁,希望提高集团的数据应用能力,以提升业绩表现。在加入四季酒店之前,Reynal担任凯悦旗下度假村品牌Apple Leisure的总裁...

关键字: APPLE CE TE 电信

亘喜生物科技集团宣布正在中国开展的、旨在全面评估GC007g治疗复发/难治性急性B淋巴细胞白血病效果的1/2期注册性临床试验顺利进入2期研究阶段,首例入组患者已给药。GC007g是亘喜生物旗下的一款靶向CD19的供者来源...

关键字: 移植 CD

科济药业宣布, 中国国家药品监督管理局已受理泽沃基奥仑赛注射液(zevorcabtagene autoleucel,研发代号:CT053)的新药上市申请。泽沃基奥仑赛注射液是一种用于治疗复发/难治多发性骨髓瘤的全人抗自体...

关键字: GEN RC EV CE

摩根大通(JPMorgan Chase)首席执行官戴蒙(Jamie Dimon)预测,美国经济可能在明年陷入衰退。他警告称,经济低迷可能在信贷市场引发“恐慌”,令美国股市价值再蒸发20%。花旗集团(Citigroup)首...

关键字: CE SE MORGAN GROUP

凭借其全新的功能丰富的移动交易应用程序,屡获殊荣的经纪商HFM让客户实现触手可及的全方位交易体验。 毛里求斯路易港2022年10月14日 /美通社/ -- 全球多资产经纪商...

关键字: 应用程序 FM 移动应用 ADI

深圳2022年10月14日 /美通社/ -- 日前,国际独立第三方检测、检验和认证机构德国莱茵TUV大中华区(以下简称“TUV莱茵”)携手深圳驿普乐氏科技有限公司(以下简称“...

关键字: 充电设备 新能源汽车 CE PLAYER

嵌入式教程

6897 篇文章

关注

发布文章

编辑精选

技术子站

关闭