zoukankan      html  css  js  c++  java
  • wince 6.0和5.0的区别

    wince6.0移植之底层变化

    WINCE6.0与以前的版本最大的区别莫过于它能支持多达32K的应用程序,每个程序的内存都能达到2G,但这些似乎与BSP无关。BSP只需要关心以下几个方面:
    1. OAL与KERNEL不再链接到一起成KEREN.EXE, WINCE6.0中kernel只是一个DLL,它被OAL.EXEL(运行时刻为KERN.EXE)加载,而OAL与KERNEL之间通过两个函数表来初始化自己的函数,得到对方的函数。
    2. KITL从OAL中分离出来,成为一个单独的DLL,KITL.DLL.
    3. MapCallerPtr 一类与内存映射相关的函数不再支持也不需要。
    4. SetKMode也不再需要,因为DRIVER是在KERNEL态运行的。
    而第1点也不需要全部自己做,实际上WINCE的开发人员已经帮我们做好了大部内容,只需要包含oal.h这个文件,将编译器报告为重定义的全局变量不再定义即可,OAL中链接时报告找不到变量时即可检查是不是g_pOemGlobal中的成员,如果包含了oal.h还说没有定义则直接对 g_pOemGlobal中的成员赋值即可,例如协处理器相关的成员就没有在oal.h中定义,就直接对其赋值 g_pOemGlobal->fSaveCoProcReg = 1。 而参照帮助中的内容即可将KITL分离出来。MapCallerPtr, SetKMode 相关的东西,直接MASK掉就行了。

    将老的CEC文件转化成PBXCML文件似乎是挺麻烦的,但可以先不理它,用系统已经有的PLATFORM的定义来新建PROJECT,把我们自己的代码拷到它的目录直接调试。BOOTLOADER可以直接用5.0的,5.0和6.0的BOOTLOADER好像是可以互用的。
    每个模块该链什么库,可以参考已有的BSP,这样用不到几天就可以PORTING到6.0了。

    wince6.0 可安装中断

    NKCallIntChain函数:把IRQ转换为SysIntr,值得留意的是pIntChainTable[],是IRQ所对应的ISR处理程序的入口,其中最主要的是其成员函数pfnHandler。pfnHandler的填充,是在HookIntChain里面,这个函数是ISR在初始化的时候调用的。在这个函数里面,如果pIntChainTable为空,则返回SYSINTR_CHAIN,如果pIntChainTable[]不为空,则调用pfnHandler得到一个sysintr值,然后返回之。

    OEMInterruptHandler函数:arm处理器中断服务例程ISR,通过查询硬件的中断寄存器,得到硬件IRQ号,并把IRQ转换为SYSINTR。在此函数中首先调用NKCallIntChain(IRQ)函数,将寻找中断链,找到并调用此IRQ对应的ISR(可安装的ISR),如果存在,则返回一个合法的逻辑中断,否则返回SYSINTR_CHAIN,那么此时怎么处理没被处理的这个IRQ呢?OEMInterruptHandler函数接着调用OAL层的一个函数 OALIntrTranslateIRQ来查询静态映射表(IRQ->SYSINTR),找到就返回一个合法的逻辑中断。

    可见,arm处理器支持IISR是在ISR中得到体现的,至于NKCallIntChain函数我们不必关心,它是一个内核函数。

  • 相关阅读:
    Eclipse / android studio 添加第三方jar包 步骤
    Android checkbox 自定义点击效果
    Android 程序打包和安装过程
    Android 基础
    (转)Genymotion安装virtual device的“unable to create virtual device, Server returned Http status code 0”的解决方法
    (转)eclipse 导入Android 项目 步骤
    微信开放平台注册 步骤
    Android Studio 初级安装
    数组
    作用域问题代码
  • 原文地址:https://www.cnblogs.com/zym0805/p/2136904.html
Copyright © 2011-2022 走看看