« | July 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | |
| 公告 |
☆★☆★☆★☆★☆★☆ 生活的点点记录,以及一些体会...........
喜欢是淡淡的爱,爱是深深的喜欢.
时间会见证一切.......................
欢迎大家指出错误,共同进步..........
期待中..............................
☆★☆★☆★☆★☆★☆ |
Blog信息 |
blog名称: 日志总数:162 评论数量:312 留言数量:0 访问次数:940553 建立时间:2005年5月17日 |

| |
[wince study]WINCE驱动程序快速入门及经验点滴(转) 文章收藏
oceanblue 发表于 2008/5/8 13:30:52 |
在CE中,最简单的驱动程序莫过于一个内置(Built-in)设备的流接口驱动。对于一个不支持热拔插的设备,最方便的做法就是为其实现一个内置的流接口驱动。这种驱动只需要做以下工作:
1.实现一个动态库,其中实现以下函数: DWORD xxx_Init( LPCTSTR pContext, LPCVOID lpvBusContext); DWORD xxx_Deinit( DWORD hDeviceContext ); DWORD xxx_Open(DWORD hDeviceContext,DWORD dwAccess, DWORD &nbs |
|
[wince study]Exception Process in WinCE & ARM(转 文章收藏
oceanblue 发表于 2008/5/8 12:39:21 |
今天INTEL的Application Engineer特地纠正了“中断向量表”的说法,应该叫Exception Vector.按我理解,应该只有IRQ和FIQ算做interrupt吧,像reset和几个abort叫做exception的确更合适些。
一般而言, 硬件的异常产生后,CPU将跳转到0x00000000地址访问中断向量表(normal exception vectors), 但ARM920T / ARM9 / ARM10 系列的CPU支持把中断向量表放到高地址0xFFFF0000(high exception vectors). 该跳转地址的决定因素为协处理器的CP15:BI13. 即CP15:BIT13 = 0时, 跳转到低地址; CP15:BIT13 = 1时, 跳转到高地 |
|
[wince study]OEMAddressTable介绍 文章收藏
oceanblue 发表于 2008/5/8 11:10:24 |
一般在ARM架构的CPU上,物理地址都是统一编址的,寻址空间为4GB(32Bit CPU)。也就是说,针对一个ARM的处理器,它可以访问的物理空间是4GB。在WinCE中,ARM中的4GB物理地址空间将被映射为512MB的虚拟内存空间。 OEMAddressTable就是一个4GB物理地址空间到WinCE Kernel中的512MB虚拟地址空间的映射表。
在BSP中,会定义OEMAddressTable来描述系统中可访问的物理空间及对应的虚拟地址空间,还有大小。这个表会在WinCE系统开始启动的时候传给MMU,具体到BSP中应该是在OAL中的startup.s中,OEMAddressTable的起始地址会被放到r0寄存器中,然后就跳转到KernelStart里面,KernelStart会用OEMAddressTable完成MMU得初始化。当WinCE启动以后,就只能访问虚拟地址空间了。
举个例子,比如我们要开发一个Flash的驱动程序,那么首先我们知道这个flash所接的片选对应的物理起始地址是多少(假如是0x60000000),大小 |
|
[wince study]wince源码分析中断之map.c 文章收藏
oceanblue 发表于 2008/5/8 9:39:50 |
wince学习手记 OAL是位于WindowsCE内核与目标设备硬件之间的一个代码层,用于实现windowCE与目标设备硬件之间的通信。为了实现内核与硬件之间最基本的通信功能,OEM必须实现一些必要的功能,同时为了适合不同的硬件配置与操作系统功能,OEM有必要的选择实现一些其他的功能。 在OAL开发过程中,OEM需要实现下列主要功能或函数: .Startup函数; .调试串口; .OEMInit函数; .系统计时器; .中断处理; .内核的输入/输出(ioctl); .KITL。 下面给出微软公司提供的各个功能的函数。 /***************************中断处理****************************/ ./platform/Common/src/common/intr/base/map.c The file implement simple t |
|
[wince study]WinCE BSP中OAL层中的OEMIoControl介绍 文章收藏
oceanblue 发表于 2008/5/8 9:05:51 |
在WinCE的BSP中的OAL部分,会有一个ioctl.c或者oemioctl.c文件,里面主要定义了一个叫OEMIoControl(..)的函数。可以说OEMIoControl是一个很有用的WinCE内核输入/输出函数。
在WinCE5.0中,应用程序和驱动程序可以通过调用KernelIoControl(..)函数来访问WinCE内核,导致调用OEMIoControl函数,这样应用程序和驱动程序就可以访问到OAL中的资源了。但在WinCE6.0中,提供了更好的安全性,应用程序能够访问OEMIoControl中的case受到了限制,只有下面的这些case是可以让应用程序访问的:
IOCTL_HAL_GET_CACHE_INFO IOCTL_HAL_GET_DEVICE_INFO IOCTL_HAL_GET_DEVICEID IOCTL_HAL_GET_UUID IOCTL_PROCESSOR_INFORMATION
如果用户在应用程序中试图访问其他的case,肯定会返回失败的。在WinCE6.0中,驱动程 |
|
|