摘要: 映射硬件寄存器当然PAGE_NOCACHE是必须加的。TransBusAddrToStatic函数负责将物理地址映射到ISR能够访问的静态虚拟地址空间中,当出现中断共享时,ISR要负责访问硬件设备的某一个寄存器来判断中断源,所以将寄存器的物理地址映射到静态虚拟地址空间中是必要的(ISR只能访问静态的虚拟地址空间)。所谓静态虚拟地址空间是指在OEMAddressTable中定义的虚拟地址空间(当然是... 阅读全文
posted @ 2010-08-23 17:49 温子祺 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 函数SerInit接着调用函数Ser_InternalMapRegisterAddresses转换IO地址并且映射地址,Ser_InternalMapRegisterAddresses在内部调用系统提供的HalTranslateBusAddress(Isa, 0, ioPhysicalBase, &inIoSpace, &ioPhysicalBase)函数将与总线相关的地址转换为系... 阅读全文
posted @ 2010-08-23 17:48 温子祺 阅读(350) 评论(0) 推荐(0) 编辑
摘要: 在这里顺便提一下可安装ISR,读者在我以前发表的关于OAL的文章中可以了解到OEM在OEMInit函数中关联IRQ和SysIntr,当硬件设备发生中断时,ISR会禁止同级和低级中断,然后根据IRQ返回关联的SysIntr,内核根据ISR返回的SysIntr唤醒相应的IST(SysIntr与IST创建的Event关联),IST处理中断之后调用InterruptDone解除中断禁止。在OEMInit中... 阅读全文
posted @ 2010-08-23 17:47 温子祺 阅读(344) 评论(0) 推荐(0) 编辑
摘要: SysIntr由CE在文件Nkintr.h中预定义,用于唯一标识中断设备。OEM可以在文件Oalintr.h中定义自己的SysIntr。常见的预定义SysIntr有SYSINTR_NOP(中断只由ISR处理,IST不再处理),SYSINTR_RESCHED(重新调度线程),SYSINTR_DEVICES(由CE预定义的设备中断ID的基值),SYSINTR_PROFILE、SYSINTR_TIMIN... 阅读全文
posted @ 2010-08-23 17:46 温子祺 阅读(330) 评论(0) 推荐(0) 编辑
摘要: Windows CE下的串口驱动程序能够处理所有I/O行为类似串口的设备,包括基于16450、16550 UART(通用异步收发芯片)的设备和一些采用DMA的设备,常见的有9针串口、红外I/O口、Modem等。在%_WINCEROOT%\Public\Common\OAK\Drivers\Serial目录下,COM_MDD2子目录包含新的串口驱动MDD层函数代码。COM16550子目录包含串口驱动... 阅读全文
posted @ 2010-08-23 17:45 温子祺 阅读(444) 评论(0) 推荐(0) 编辑
摘要: (1)IO接口是XSCale处理器的外部设备,对于一般的单片机,可以直接操作硬件,即通过直接读写IO端口来访问硬件.而对于WICNE操作系统,它屏蔽了用户应用程序对硬件访问的权限,只有内核应用程序才可以访问硬件资源.如果要直接访问某一址的物理内存(对于ARM核的MCU,IO端口地址通常被映射到物理内存中,内存和IO统一编址)可以采用内存映射方法,将该硬件寄存器映射到普通的内存空间,像操作内存地址一... 阅读全文
posted @ 2010-08-23 17:41 温子祺 阅读(989) 评论(0) 推荐(0) 编辑
摘要: /****************************************************作 者:温子祺*联系方式:wenziqi@hotmail.com***************************************************/1:在options文件允许#define KITL_SERIAL_UART0或者允许#define KITL_SERIAL_... 阅读全文
posted @ 2010-08-23 13:36 温子祺 阅读(234) 评论(0) 推荐(0) 编辑
摘要: /****************************************************作 者:温子祺*联系方式:wenziqi@hotmail.com***************************************************/例子1:PB6.0通过Clear SysGen产生的TOC编译信息。Found pTOC at 0000156cNo impo... 阅读全文
posted @ 2010-08-23 13:17 温子祺 阅读(391) 评论(0) 推荐(1) 编辑
摘要: 网上不少介绍三星24x0系列的BINFS启动方式实现,有些内容上描述的不是非常全面下面就WinCE6上的BINFS实现,从基本原理到修改BSP,再到如何烧录启动做一个较全面的讲解一 BINFS到底是什么?其实BINFS就是MS给CE做的一种存放系统镜像的一个文件系统。一说文件系统,大家可能比较头大。那么这么说,其实就是一个结构体(说是文件系统确实比较勉强,结构体可能更合适),里面有记录各模块的起始... 阅读全文
posted @ 2010-08-23 10:12 温子祺 阅读(893) 评论(0) 推荐(0) 编辑
摘要: CheckSum是一种用于检查数据文件有没有发生变化的方法,对于一些重要的数据文件为了检查传输过程过程中有没有数据的损坏或丢失,常常会用到CheckSum算法。WinCE中经常用到CheckSum的地方就是对即将烧写进Flash中的image文件进行校验,和烧写完对写入的数据进行完整性检查,一般这里的image有OSimage和UT的bin文件两种。CheckSum的原理是把一个文件以二进制的方式... 阅读全文
posted @ 2010-08-23 10:12 温子祺 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 执行cebuild.bat批处理文件。cebuild.bat调用sysgen.bat批处理文件。sysgen.bat调用cesysgen.bat批处理文件,cesysgen.bat负责在*.wce文件中搜索用户选择的特征,然后形成一系列环境变量。之后PB会显示这些变量,下面几个步骤就是显示收集的变量。产生SYSGEN变量。每个SYSGEN变量对应一个特征。产生CE_MODULE、COREDLL_C... 阅读全文
posted @ 2010-08-23 10:10 温子祺 阅读(1664) 评论(0) 推荐(0) 编辑
摘要: 在这里只是对OEMIoControl中比较常用的case说一说。看看PB的文档就知道OEMIoControl函数可以包含很多case而且被分了类。下面就我个人接触到的和比较常用的做个说明:1. IOCTL_HAL_INIT_RTC:对应OALIoctlHalInitRTC函数,该case用于重新原始化RTC。在系统冷启动的时候,内核会调用它来配置时钟。dwIoControlCode:IOCTL_H... 阅读全文
posted @ 2010-08-23 10:08 温子祺 阅读(496) 评论(0) 推荐(0) 编辑
摘要: 2 OAL层中断程序汇总关于WinCE的中断处理,OAL中主要是实现了ISR部分,一般IST会在设备驱动中实现。架构如图:硬件中断产生以后,会导致内核ISR的运行,然后由OAL中的ISR来处理相应的中断,最后导致相对应的IST运行完成真正的中断处理。所以在WinCE中,中断处理由ISR和IST共同完成。ISR主要完成中断源的确定,屏蔽该中断并返回给内核相对应的系统中断号,ISR应该尽量短小。IST... 阅读全文
posted @ 2010-08-23 09:37 温子祺 阅读(495) 评论(0) 推荐(0) 编辑
摘要: 1.总体了解流程首先描述wince5.0 (2440BSP)的中断流程:流程1.创建事件aà创建线程ISTà用InterruptInitialize〈系统中断号绑定线程IST〉à线程IST进入等待事件a状态(挂起状态)。流程2.外部引发中断à OEMInterruptHandler<屏蔽中断à把物理中断转换成系统中断,其他... 阅读全文
posted @ 2010-08-23 09:35 温子祺 阅读(1043) 评论(0) 推荐(1) 编辑