Window CE 驱动开发流程(Windows CE.5.0系统、pxa270平台)

 以Windows CE.5.0系统、pxa270平台为例:

 

一.中断添加

1.要使用中断必须先注册中断 D:/WINCE500/PLATFORM/MAINSTONEIII/src/inc/bsp_cfg.h参照wince自带的中断注册即可。注册值不能大于SYSINTR_FIRMWARE+23。

 

2.将硬件中断变为系统中断 D:/WINCE500/PLATFORM/MAINSTONEIII/src/kernel/oal/intr.c 其中函数OALIntrStaticTranslate是实现硬件中断转换为系统中断的函数。可以参照别的中断产生的方法写你自己的中断。

 

3.中断设置与初始化 D:/WINCE500/PUBLIC/csp_pxa27x/oak/oal/common/intr/common/oem.c中的OEMInterruptEnable与OEMInterruptDisable函数,参照别的中断设置写自己的中断。 可以在OEMInitInterrupts添加对中断的初始化,也可以在后面的中断处理线程(IST)中添加。

 

 

二. 中断处理线程

1.创建线程CreateThread

2.创建事件CreateEvent

3.中断与事件绑定InterruptInitialize

4.while()

1)等待中断事件发生 WaitForSingleObject

2)确认有一个来自操作系统的事件

3)在尽可能短的时间内处理中断

4)调用 InterruptDone

---------------------------------------------------------------------------------------------

DWORD WINAPI ThreadIST( LPVOID lpvParam )

{ DWORD dwStatus; // 检查运行标志

while( g_fRun )

     { dwStatus = WaitForSingleObject(g_hevInterrupt, INFINITE);

        if( dwStatus == WAIT_OBJECT_0 )

        { // 在此处理中断 //

            g_dwInterruptCount ++; // 完成中断 //

            InterruptDone( g_dwSysInt );

         }

      } return 0;

} ---------------------------------------------------------------------------------------------

 

三. 驱动文件DLL 用Platform Builder 新建一个Dll工程,在程序中添加流接口的一些标准函数:

XXX.Init() 

XXX_Deinit()

XXX_IOControl()

XXX_Open()

XXX_Close()

XXX_PowerDown()

XXX_PowerUp()

XXX_Read()

XXX_Seek()

XXX_Write()

在XXX.Init里完成初始化,包括IST的创建等,此函数由系统自动调用。其它函数根据实际需要添加内容。

然后添加一个.def文件用来配置dll所要导出的函数。

LIBRARY dllname EXPORTS

XXX_Init

XXX_Deinit

XXX_IOControl

XXX_Open

XXX_Close

XXX_PowerDown

XXX_PowerUp

XXX_Read

XXX_Seek

XXX_Write

最后将它们编译成DLL文件。

 

 

四. 添加驱动到系统

       将驱动dll拷贝D:/WINCE500/PBWorkspaces/PXA270/RelDir/MAINSTONEIII_ARMV4I_Release目录下。然后在D:/WINCE500/PLATFORM/MAINSTONEIII/files/Preject.bib中添加:

MODULES ; Name Path Memory Type ;

-------------- --------------------------------------------- -----------

dllname.dll $(_FLATRELEASEDIR)/dllname.dll NK SH

其主要功能是在make image的时候把dllname.dll文件添加到系统内核中去。

接下来还要在projiect.reg中添加:

[HKEY_LOCAL_MACHINE/Drivers/BuiltIn/dllname] "Prefix"="XXX" "Dll"="dllname.dll"

使系统在启动时加载驱动。当然也可以直接建立一个bib文件和reg文件,只要将它们放到platform的release目录下就行了。 上述也可以通过编写cec文件来实现。

 

 

 

(*********************编写流驱动的步骤。有两种实现途径:

1。写DLL,做成Project,加入到OS里。

2。改BSP,把驱动写在BSP里,再选择那个BSP做OS。

****第一种方法步骤是在PB中新建一个DLL项目,编写一些输入函数,寄存器,外设的声明,写DLLENTRY函数;实现流接口函数;编写DLL的导出函数文件.DEF;为驱动程序写入注册表项,还需要修改bib文件。

 

****第二种方法就是在platform/BSP/drivers下新建一个目录,然后在drivers目录中的dirs文件中加入新建的目录名。在新建的目录下,新建你的源代码文件,在其中实现DLL函数。新建名称分别为sources, makefile, ***.def的文件;修改platform.reg和platform.bib文件

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/josh915/archive/2009/01/08/3734867.aspx)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值