文档库 最新最全的文档下载
当前位置:文档库 › wince流驱动的编写

wince流驱动的编写

wince流驱动的编写
wince流驱动的编写

wince流驱动的编写

驱动程序:

就WINCE来讲,驱动程序抽象后的本质:向一定规则的框架中添加相应的代码,框架是指留给操作系统的一个接口;代码是指针对正确的硬件在正确的时间向正确的寄存器写入正确的值。

接口函数的调用顺序:

XXX_Init()

XXX_Open()

XXX_IOControl()

XXX_Read()

XXX_Write()

…..

XXX_Close()

流驱动的建立:

一个流驱动程序至少需要包含.cpp、 .def 、Makefile 、sourse、 .reg、 .bib .cpp是驱动源码,其中包含了所需要的头文件的调用、驱动代码和驱动接口。

.def提供驱动接口,内容大致如下:

LIBRARY GPIOdriver

EXPORTS

xxx_Close

xxx_Deinit

xxx_Init

xxx_IOControl

xxx_Open

xxx_PowerDown

xxx_PowerUp

xxx_Read

xxx_Seek

xxx_Write

makefile的内容大致如下:!INCLUDE $(_MAKEENVROOT)\makefile.def。sources的内容包含:

RELEASETYPE=PLATFORM

TARGETNAME=生成动态库的名称

TARGETTYPE=DYNLINK

TARGETLIBS= $(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \

INCLUDES= $(_TARGETPLATROOT)\src\inc; \

$(_COMMONOAKROOT)\inc; \

$(_PUBLICROOT)\common\oak\inc;$(_PUBLICROOT)\common\sdk\inc;$(_PUBLIC ROOT)\common\ddk\inc; \

..\..\inc

SOURCES= \

xxxDriver.cpp

.reg文件,包含如下代码:

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\驱动名]

"Prefix"="前缀"

"Dll"="xxxdriver.dll"

.bib文件,包含以下代码:

驱动动态库文件 $(_FLATRELEASEDIR)\ 驱动动态库文件 NK SH

我做mydrivers GPIO驱动的过程:

1. 在BSP包的Drivers目录下新建一个名为“mydrivers”的目录,并进

入到该目录下。

2. 新建txt记事本文件,命名为makefile,打开加入以下内容:!INCLUDE

$(_MAKEENVROOT)\makefile.def,然后将.txt扩展名去掉,使其变为无扩展名的文件。

3. 仍然在mydrivers文件夹内,仍然新建txt文件,命名为mydrivers,

加入以下内容后将其扩展名更改为.def文件:

LIBRARY mydrivers

EXPORTS

GIO_Close

GIO_Deinit

GIO_Init

GIO_IOControl

GIO_Open

GIO_PowerDown

GIO_PowerUp

GIO_Read

GIO_Seek

GIO_Write

4. 仍然在mydrivers文件夹内,仍然新建txt文件,命名为sources,加入以下内容后将其扩展名删除,使其成为无扩展名文件:

RELEASETYPE=PLATFORM

TARGETNAME=mydrivers

TARGETTYPE=DYNLINK

DLLENTRY=DllEntry

TARGETLIBS= \

$(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \

MSC_WARNING_LEVEL = $(MSC_WARNING_LEVEL) /W3 /WX

INCLUDES= \

$(_TARGETPLATROOT)\src\inc; \

$(_COMMONOAKROOT)\inc; \

$(_PUBLICROOT)\common\oak\inc;$(_PUBLICROOT)\common\sdk\inc;$(_PUBLIC ROOT)\common\ddk\inc; \

..\..\inc

SOURCES= \

mydrivers.cpp

5. 仍然在mydrivers文件夹内,建立mydrivers.cpp和mydrivers.h

6. 以上出现了多次mydrivers,这些地方要命名一致,在写def文件时,GIO 只能是三个字母,这里注意!

7. 以上工作完成后,mydrivers文件夹下的工作就完成了,然后打开E:\WINCE500\PLATFORM\TQ2440\FILES目录,以记事本打开platform.reg文件,添加如下代码:

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\mydrivers]

"Prefix"="GIO"

"Dll"="mydrivers.dll"

注意GIO 与mydrivers.dll要与前面的命名一致!另外要注意,.reg文件中有很多IF与END的配套使用,添加代码时不要放在这些中间了

8. 同样在FILES目录下打开platform.bib文件,加入以下代码:mydrivers.dll $(_FLATRELEASEDIR)\mydrivers.dll NK SH

9.打开PB平台,选择打开工作区,打开feng2440.pbxml文件(注:直接双击feng2440.pbxml文件打开,有可能会导致后面的编译错误),在PB的左侧选择FileView选项(我这里默认就是这个选项),这里有树形结构的文件夹目录,打开PLATFORM,TQ2440,drivers,然后会看到你刚刚建立的mydrivers文件,右击,选择Build Current Project,就会对刚刚建立的流驱动进行编译,编译通过。

10.点击菜单栏Build OS---Build and Sysgen corrent BSP,对.pbxml文件进行编译。编译完成后生成NK.nb0和NK.bin等镜像文件。

11.打开VS2005,新建项目,编写mydrivers驱动的应用程序编写时要在mydriversDlg.h 头文件中添加GPIO的控制字的定义:

#define IO_CTL_GPIO_1_ON 0x01

#define IO_CTL_GPIO_2_ON 0x02

#define IO_CTL_GPIO_3_ON 0x03

#define IO_CTL_GPIO_4_ON 0x04

#define IO_CTL_GPIO_ALL_ON 0x05

#define IO_CTL_GPIO_1_OFF 0x06

#define IO_CTL_GPIO_2_OFF 0x07

#define IO_CTL_GPIO_3_OFF 0x08

#define IO_CTL_GPIO_4_OFF 0x09

#define IO_CTL_GPIO_ALL_OFF 0x0a

然后要在对话框函数中设置文件句柄;

class CmydriversDlg : public CDialog

{

// 构造

public:

HANDLE mydrivers; //设置文件句柄

接着在mydriversDlg.cpp 实现文件中的CmydriversDlg 消息处理程序中添加上获取mydrivers设备句柄的语句:

mydrivers = CreateFile(L"GIO1:",GENERIC_READ | GENERIC_WRITE, 0,NULL,OPEN_EXISTING,0,NULL );

最后便是添加按钮的响应函数,即LED的控制函数,编译、生成exe文件。

12.将已生成的NK.nb0通过DNW发送到实验板上,将生成的exe文件复制到实验板wince系统中。

13.在wince中运行应用程序对实验板上的四个LED进行控制。

实验成功,第一个流驱动编写完毕。

实验五WinCE中的驱动程序开发

WinCE中的驱动程序开发 一.实验目的 1、熟悉WinCE中流式接口驱动程序的12个接口的功能。 2、掌握流式驱动程序的工作过程。 3、能够编写出流式接口的驱动程序。 二.实验内容 使用VS2005的智能设备应用程序开发方法,进行网络通信的编程,并通信多线程技术实现服务器与客户端之间的文件传输。 三.实验设备及工具 硬件:PC机一台; 软件:Windows XP操作系统,VS2005开发环境,WinCE 6.0开发环境,或Windows Mobile 5.0 SDK 四.实验步骤及说明 (1)写出流式接口驱动程序的12个接口,及每个接口的功能。 答:见教材515页 (2)写出流式驱动程序的工作过程。 答:第一步:加载驱动程序,主要有两种加载方式:(1)当系统启动时,设备管理器搜寻注册表的HKEY_LOCAL_MACHINE\Drivers\BuiltIn键下面的子键,并逐一加载该子键下的每一个驱动,此过程称为BusEnum;(2)应用程序可调用ActivateDeviceEx()函数动态地加载驱动程序。 第二步:设备管理器从注册表的dll键值中获取驱动程序所在的DLL文件名。 第三步:设备管理器调用LoadDriver()函数把该DLL加载到自己的虚拟地址空间中。 第四步:设备管理器在注册表的HKEY_LOCAL_MACHINE\Drivers\Active下,记录所有已经加载的驱动程序。 第五步:设备管理器调用驱动程序中的COM_Init函数,并把上一步中添加的注册表项的完整路径作为COM_Init函数的第1个参数传入驱动程序内。 第六步:在COM_Init中,通常须对硬件进行一些最基本的初始化操作。 通过以上的操作完成流式驱动程序的加载任务。 对驱动程序的操作: 第一步:应用程序使用该设备。首先,应用程序调用CreateFile(TEXT(“COM1”)….)打开设备。然后,文件系统判断打开的是文件还是设备。最后,如果打开的是设备,就将控制权交回设备管理器。 第二步:设备管理器调用驱动程序的COM_Open()函数打开设备。 第三步:COM_Open()函数把打开设备的结果返回给设备管理器。 第四步:设备管理器把SMP_open()的返回结果,返回给应用程序的CreateFile()函数调用。 通过第七步到第十步,设备已被成功打开,接下来可对设备进行读/写和控制操作。下面将以从设备中读取数据为例。 第一步:应用程序使用CreateFile()调用返回的句柄,调用函数ReadFile(),向设备发送读请求。

wince6.0_开发环境搭建

Window CE6.0开发平台搭建详解 2011年08月29日 Windows CE6.0的开发无非两大方面:操作系统开发和应用程序开发,操作系统开发包括系统的定制,驱动开发和其他需要完成的底层工作。应用程序开发主要是与实际应用结合紧密的程序开发。 要搭建这样的开发环境,至少要包括两部分,一个是硬件平台,一个是软件平台,在Windows CE6.0的开发中,微软公司把这些开发软件集成到了vs2005中。 Windows CE6.0开发环境需要安装的软件比较多、比较大,至少要10GB的空间,而且有着严格的安装顺序要求,一旦其中某一个环节出错,都会导致软件运行出现故障,为确保安装顺利,请仔细阅读本文,按照步骤一步一步进行安装。 一、所需安装软件 1、Visual Studio 2005 2、Visual Studio 2005 Service Pack 1 3、MSDN 4、platform builder for Windows Embedded CE6.0 5、Windows Embedded CE 6.0 Platform Builder Service Pack 1 6、Windows mobile 6的sdk 二、所用磁盘空间 在安装之前,请检查电脑的磁盘空间,VS2005和Windows Embedded CE6.0均是比较大 的软件,要占硬盘好10G多的空间,建议不要装在C盘,但是我装Windows Embedded CE6.0的时候,发现不能更改安装路径,没办法,只能把Windows Embedded CE6.0装在 C盘。 三、安装顺序 1.安装Visual Studio 2005 最好选择自定义安装方式,把不用的一些组件都删掉,这样会节省不少的磁盘空间。WINCE6.0的Platform Builder不像WINCE5.0是独立的,而是作为VS2005的插件,以后建立和定制OS、编译调试全部在VS2005里完成。 2.安装Visual Studio 2005 Service Pack 1

WINCE驱动开发中几个内存分配函数比较

【转】LocalAlloc,VirtualAlloc,malloc,new的异同首先明白几个概念:虚拟内存是从硬盘置换出来的,堆本身就是内存,程序运行时,可用内存=物理内存+虚拟内存。虚拟内存一般用文件来保存数据,虚拟内存的出现主要是因为以前内存不够(16M的内存刚出来的时候可是天价啊),磁盘相对便宜一些,所以聪明的系统设计者就把设计了虚拟内存,在程序运行的时候把那些很久没有被访问过的(可能以后也不会用到)内存映射到文件里面去(以后需要的时候再读进内存),把内存腾出来给真正需要执行的代码和数据,这样看起来可用内存就比物理内存多了。 HeapAlloc()是堆分配内存函数,查看c,c++的malloc,new函数的代码,可以看到就是对HeapAlloc()函数的封装,在堆上可以动态分配内存。 1. 首先我们来看HeapAlloc: MSDN上的解释为:HeapALloc是从堆上分配一块内存,且分配的内存是不可移动的(即如果没有连续的空间能满足分配的大小,程序不能将其他零散的空间利用起来,从而导致分配失败),该分配方法是从一指定地址开始分配,而不像GloabalAlloc是从全局堆上分配,这个有可能是全局,也有可能是局部。函数原型为: LPVOID HeapAlloc( HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes ); hHeap是进程堆内存开始位置。 dwFlags是分配堆内存的标志。包括HEAP_ZERO_MEMORY,即使分配的空间清零。 dwBytes是分配堆内存的大小。 其对应的释放空间函数为HeapFree。 2. 再看GlobalAlloc:该函数用于从全局堆中分配出内存供程序使用,函数原型为: HGLOBAL GlobalAlloc( UINT uFlags, SIZE_T dwBytes ); uFlags参数含义 GHND GMEM_MOVEABLE和GMEM_ZEROINIT的组合 GMEM_FIXED 分配固定内存,返回值是一个指针 GMEM_MOVEABLE 分配活动内存,在Win32中,内存块不能在物理内存中移动,但能在默认的堆中移动。返回值是内存对象的句柄,用函数GlobalLock可将句柄转化为指针 GMEM_ZEROINIT 将内存内容初始化为零 GPTR GMEM_FIXED和GMEM_ZEROINIT的组合

WinCETouchPanel驱动详解

WinCEWinCEIWinCE Touch Panel 驱动详解 WinCE中的Touch Panel驱动是由GWE模块来管理的,Touch Panel驱动接收用户的触摸信息,并将其转换为屏幕上的坐标信息,传给GWE模块。在WinCE中, Touch Panel 驱动是分层的,分为MDDg和PDD层,这和其他WinCE设备驱动是一样的。MDDI由微软提供,用户只需要实现MD床口PDD层间的DDSI函数就可以了。如图 WinCE中的GWE模块负责加载和管理Touch Panel驱动,Touch Panel的MDD 层向上提供DDI接口,PDD层是针对硬件的实现,对MDD g提供DDSI接口。文档收集自网络,仅用于个人学习 1 Touch Panel驱动中的数据结构 ⑴ TOUCH _P ANEL_SA MP LE_FLAGS 用于描述一个采样点的信息,这些信息被定义在一个枚举结构中: enum enu mTouch Pan elSa mp leFlags { TouchSa mp leValidFlag = 0x01, TouchSa mp leDow nF lag = 0x02, TouchSa mp lelsCalibratedFlag = 0x04, TouchSa mpleP reviousDow nF lag = 0x08, TouchSa mp lelg nore = 0x10, TouchSa mp leMouse = 0x40000000 }; TouchSampleValidFlag :—个有效的采样值 TouchSa mp leDow nF lag:第一次按触摸屏时,返回该flag

WinCE驱动开发流程

wince驱动开发学习笔记 嵌入式技术/walking_man 发表于2007-03-20, 20:03 首先是wince驱动的分类问题。按照书上讲的说CE下驱动分成单体驱动和分层驱动,而看到另一种说法是本机驱动和流式驱动。经过microsun大哥的指点,把这两种分类法分开了。在这里引用一下:“单体与分层只是从代码的形式上做的分类.分层驱动代码上分为PD D与MDD,一般的微软已经实现了MDD,可能也实现了PDD,我们只需要对PDD做些修改就能使用,比如音频的驱动,显示的驱动。单层驱动是把PDD与MDD写在一起,没有做严格的区分,通常这种驱动比较简单,比如:ATADISK。 至于本地驱动和流式驱动是从驱动与系统其它模块(调用者)的接口 形式上做的分类.其实,本地驱动这个名称不大恰当,可能叫专用驱动或其它名字更为合适.它是指调用它的模块给它有特定的接口,比如电源驱动和通用LED驱动。而串口,网卡等就是流接口驱动程序. 所以,一个驱动程序可以是单体的流式驱动,例如:ATADISK.也可以 是分层的流式: 如OHCI ” 按照我的理解,单体和分层是驱动实现方式上的分类,而本地和流式则是驱动模型上的分类,所谓本地驱动就是操作系统有保留专门的接口,所谓流式是指编写的DLL文件里可以导出各种流式接口函数。 第二点:驱动的功能属性。设备驱动程序是操作系统内核和硬件的接口,操作系统定义了一组标准的接口,编写驱动的过程也就是实现这些接口。从应用程序到具体硬件间有如下这些环节起作用:

应用程序-调用OS函数-操作系统-驱动接口-驱动程序-硬件操作函数-硬件。在wince里驱动都以用户态的DLL存在,需要通过进程加载到slot里。共有三类系统进程用来加载:Device.exe,GWES.exe,File Sys.exe.绝大多数设备驱动都是通过Device.exe加载的。需要注意的是,不同的OS保留的设备驱动接口是不一样的,如桌面windows 和wince就不同。 第三点:wince下设备的初始化分为两个阶段:Device.exe的初始化;外设的枚举和加载。其流程是:上电-启动bootloader-启动N K-启动注册表init键(Device.exe启动)-初始化数据结构,I/O,电源管理等-加载BusEnum.dll(总线枚举器)-枚举注册表下Driver/buil din的所有子键。这里的枚举过程就是循环调用ActivateDeviceEx()函数加载驱动的过程。在OS启动完毕后,我们可以用PB的Remot e Registry Tool查看H_L_M/drivers/active包含的子键,看哪些驱动随启动而加载。 第四点:流接口驱动的概念。暴露流式接口函数的驱动即是流驱动,它把外设抽象成一个文件。过程是:应用程序使用文件API 对设备进行访问,OS接受API调用FileSys.exe,转到device.exe,调用流接口,与硬件交互。所谓流接口函数有十个,包括XXX_Init、XXX_Deinit、XXX_Open、XXX_Close、XXX_Read、XXX_Write、XXX_P owerUp、XXX_PowerDown、XXX_Seek、XXX_IOControl,在wince5.0中 增加le了XXX_PreClose,XXX_PreDeinit.而我们在应用程序里对应的文件A PI有CreateFile、DeviceIoControl、 ReadFile、 WriteFile,CloseHan dle,SetFilePointer. 第五点:编写流驱动的步骤。有两种实现途径:1。写DLL,做

Wince6.0驱动开发

Wince6.0驱动开发 (1) 在WINCE600\PLATFORM\LPC32XX \SRC\DRIVERS目录下新建一个目录MyDriver. (2) 在MyDriver目录下新建5个文件。 a) MyDriver.c 实现流接口函数的具体代码。 b) MyDriver.h 为MyDriver.h的头文件。 c) MyDriver.def 定义导出的函数名称。 d) makefile 与其它驱动的相同,不用改。 e) sources 链接和编绎文件。 (3) 前缀定义为MYD (4)文件内容完成后,在平台的“解决方案”的界面下,寻找FLATFORM\LPC32XX\src\drivers\MyDriver,然后单击鼠标右键,在弹出的菜单中选择“Build”,开始编绎驱动,完成后,在WINCE600\PLATFORM\LPC321XX\target\ARMV4I\retail下可找到MyDriver.dll. (5) 驱动加载的方法:手动,自动。 这里介绍自动加载的方法: a) 在MyDriver目录的位置找到dirs文件,在该文件中插入一行mydriver (都为小写),并在上一行后加“\”。 b) 在平台的“解决方案”的界面下,寻找FLATFORM\LPC32XX\Parameter Files\platform.bib.打开此文件,在相关位置添加mydriver(_FLATRELEASEDIR)\mydriver.dll NK SHK SHK指明该文件的属性,S—系统文件,H—隐藏文件,K—在内核中的位置固定。 c) 在Platform.req文件中相关位置添加程序如下: ;MyDriver [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\MYD] “Prefix”=”MYD”

开发wince驱动步骤

开发wince驱动步骤: software:VS20005+wince6.0+BSP hardware:AT91SAM9261开发板(MCUZONE)1在vs2005新建一个驱动工程DemoDrv。

2编写好所有DemoDrv的源文件,例如“.cpp”or“.c”or“.REG”文件,特别注意source文件编写,然后单独编译DemoDrv看有无错误,这样避免全部编译NK导致时间太久。然后立即看到编译结果。若编译成功,会在$:\WINCE600\PLATFORM\AT91SAM9261EK\target目录有相应的DemoDrv.dll文件。(在实现文件“.c”需添加串口抛出信息以便调试)在如图所示:

3在目录$:\WINCE600\PLATFORM\AT91SAM9261EK\FILES找到配置文件:platform.reg 和platform.bib文件。 platform.bib文件添加: IF BSP_AT91SAM9261EK_DemoDrv DemoDrv.dll$(_FLATRELEASEDIR)\DemoDrv.dll NK SHK ENDIF BSP_AT91SAM9261EK_LED platform.reg文件添加: IF BSP_AT91SAM9261EK_DemoDrv #include"$(_TARGETPLATROOT)\SRC\DRIVERS\DemoDrv\DemoDrv.reg" ENDIF BSP_AT91SAM9261EK_LED 添加后分别保存。 4在$:\WINCE600\PLATFORM\AT91SAM9261EK\CATALOG目录下at91sam9261ek.PbcXml 文件打开: 添加文件: Item:ADENEO:BSP_AT91SAM9261EK_ DemoDrv Driver DemoDrv Driver for AT91SAM9261EK boards DemoDrv Driver for AT91SAM9261EK boards BspSpecific BSP_AT91SAM9261EK_DemoDrv Cpu:ARMV4I DemoDrv.dll Device Drivers\DemoDrv 保存文件 5新建NK工程文件或者手动方式更改之前NK工程文件,例如之前工程文件:E:\BSP\BSP\trunk\sample9261\Wince600\AT91SAM9261EK_ARMV4I\PBInitEnv.bat添加 set BSP_AT91SAM9261EK_DemoDrv=1

WinCE流驱动程序设计概述

微 处 理 机 M I CROPROCESS ORS W inCE 流驱动程序设计概述 顾峥浩,王自强,聂文华 (南京大学电子科学与工程系,南京210093) 摘 要:介绍了W inCE 操作系统下流驱动的设计方法,并在I ntel 公司的DBPXA255开发板下提供了关于8位数码管LED 的设计实例。 关键词:W inCE;流驱动;DBPXA255中图分类号:TP316.7 文献标识码:B 文章编号:1002-2279(2007)03-0081-03 The D e s i gn o f S tream I n te rface D ri ve r fo r W i nC E G U Zheng -hao,WANG Zi -qiang,N I E W en -hua (D epart m ent of Electronics and Engineering,N anjing U niversity,N anjing 210093,China ) Abstract:This paper intr oduces the strea m interface driver of W inCE,and p resents a sa mp le driver f or the Hex LED s of I ntel ’s DBPXA255. Key words:W inCE;Strea m interface driver;DBPXA255 1 引 言 W inCE 是一款由微软公司推出的面向嵌入式 领域的操作系统,被广泛应用于手机、P DA 、平板电 脑以及各种工控领域中。由于嵌入式设备硬件平台的多样性,针对不同的硬件编写驱动程序,从而使W inCE 上层屏蔽底层硬件的多样性就显得尤为重 要。 W inCE 的驱动按类型分有四种,分别为本地驱动(Native device driver )、流驱动、US B 驱动和网络驱动。其中流驱动由于接口简单、支持硬件设备最多,因而最为常用。下面将结合DBPXA255开发板中流驱动的一个简单实例,详细说明其设计方法。 2 流驱动开发的基本知识 2.1 开发W inCE 驱动的基本工具 驱动程序属于板级支持包(BSP )开发的一部分,可以使用微软的Platfor m Builder 工具进行设计。该工具将驱动编译成动态库,并整合到CE 系统中去。如果成功,则会得到一个NK .bin 的文件,此文件即为按照你的硬件平台定制的内核镜像,将其下载到嵌入式设备中就可以运行W inCE 了。笔者使用的是其.Net 版本。2.2 DBPXA255开发板 PXA255是I ntel 公司推出的取代Str ong AR M S A1110的新一代嵌入式应用处理器,属于ar m 系 列,它拥有Thumb 压缩指令、64位长乘法指令、增强型DSP 指令等先进特性,并集成了众多的外部接口,支持L inux 、W inCE 、Pal m OS 、Sy mbian OS 等主流嵌入式操作系统。DBPXA255开发板基于该型处理器,添加了一些外设如触摸屏、声卡接口等,在嵌入式开发中有着广泛的应用。2.3 W inCE 设备驱动程序的加载 大部分W inCE 驱动程序在系统引导的时候被设备管理器加载,加载信息被放在注册表的特定子键中,一般被设定为“HKEY _LOCAL _MACH I N E \DR I V ERS\BuiltI n ”。例如音频设备(W ave Dev )的加载信息: [HKEY _LOCAL _MACH I N E \D rivers \BuiltI n \W ave Dev\] "Prefix"="WAV ""D ll"="wavedev .dll" "I ndex"=dword:1"O rder"=dword:0 Prefix 的值代表设备的前缀名,用于标识与特 定名称设备相关联的文件流访问接口,必须由三个大写字母组成。在这里它的值为WAV ,那么设备的打开、关闭例程就为WAV_Open 和WAV_Cl ose 。 “D ll ”的值代表该设备驱动程序所在的动态库的名称,这里系统将在“wavedev.dll"中查找对 作者简介:顾峥浩(1981-),男,江苏无锡人,硕士研究生,主研方向:W inCE 、L inux 下嵌入式开发及应用。收稿日期:2005-03-02   第3期 2007年6月     No .3 Jun .,2007

用Labview开发WINCE应用程序

用Labview开发WINCE应用程序 概述 这几年安装Windows CE系统的单板电脑开始在工控行业里普及。用VS2005/VS2008开发Windows CE系统的应用程序可以像开发PC机的应用程序一样。现在我们还可以选择LabVIEW开发Windows CE系统的应用程序。这样我们就可以很容易开发出漂亮而且专业的界面。如仪表,波形显示等。Labview 2009安装和激活Touch Panel Module后即可支持Windows CE。推出的WINCE工业单板电脑系列有4.3寸,5.6寸,7寸,8寸,10.4寸,15寸均支持Labview开发。 图1 安装Windows CE系统的单板电脑 1.用Labview 2009开发WinCE应用程序 需要安装的工具包括了:USB驱动程序、Microsoft ActiveSync 同步软件、Labview 2009、和LabVIEW 2009 Touch Panel Module。随光盘附带有丰富的例子:串口、波形图等。 1.1.准备步骤 1.1.1.安装USB驱动程序 Wince 单板电脑首次与PC机(一般是桌面电脑)相连时,会提示需安装USB驱动程序。以后可跳过这步。将PC机与Wince 单板电脑通过USB口相连,当PC机提示发现新硬件时,找到附带光盘中的USB驱动文件夹中WINCE下面的wceusbsh 文件。 1.1. 2.安装工具软件步骤 1.Microsoft ActiveSync 4.2同步软件;

2.开发工具: ①安装Labview 2009开发系统平台; ②安装触摸屏面板模块(LabVIEW 2009 Touch Panel Module); 1.1.3.重点提示 以上工具安装完成后,当WinCE运行并与开发机通过USB 相连时,ActiveSync 会自动启动,要求建立合作关系,如下图 1.1: 图 1.1 按默认设置即可,完成后如下图 1.2所示: 图 1.2

嵌入式WinCE的视音频网络传输设计

Computer Science and Application 计算机科学与应用, 2011, 1, 160-163 doi:10.4236/csa.2011.13031 Published Online December 2011 (https://www.wendangku.net/doc/5915767395.html,/journal/csa) The Embedded Design of Audio Network Transmission Based on WinCE Operating System* Wenfeng Li1, Juming Li1, Keqiang Xu2, Jun Lu3 1College of Communication and Information Engineering, Xi’an University of Science & Technology, Xi’an 2Xi’an Mount Zhong Nan Information Technology Ltd, Xi’an 3Shijiazhuang Institute of Career Academy, Shijiazhuang Email: liwenfeng@https://www.wendangku.net/doc/5915767395.html,; {lijuming2008, lujun07}@https://www.wendangku.net/doc/5915767395.html,; glen_xu@https://www.wendangku.net/doc/5915767395.html, Received: Oct. 14th, 2011; revised: Oct. 25th, 2011; accepted: Nov. 9th, 2011. Abstract: In order to solve the heavy equipment and hard to build fast networking problems in mine emer- gency rescue communication network, a portable network terminal equipment is designed in this paper. It uses WinCE system and TCP/IP network protocols, including WinCE transplantation, network transmission and WinCE embedded application development. A mutually for the client server network communication is realized, and the real-time transmission of underground video, audio, environmental parameters acquisition information is achieved. Finally the embedded terminal and the PC host combined joint debugging are conducted. Test data indicate that audio network transmission is efficient, and the software code is with good encapsulation and portability. Keywords: Mine Emergency Rescue; Network; TCP/IP; WinCE 嵌入式WinCE的视音频网络传输设计* 李文峰1,李举名1,徐克强2,陆军3 1西安科技大学通信与信息工程学院,西安 2西安终南信息技术有限公司,西安 3石家庄理工职业学院,石家庄 Email: liwenfeng@https://www.wendangku.net/doc/5915767395.html,; {lijuming2008, lujun07}@https://www.wendangku.net/doc/5915767395.html,; glen_xu@https://www.wendangku.net/doc/5915767395.html, 收稿日期:2011年10月14日;修回日期:2011年10月25日;录用日期:2011年11月9日摘要:为了解决矿山应急救援通信网络设备沉重、快速组网困难的问题,本文设计了一种便携式网络终端设备。其采用WinCE系统和TCP/IP网络传输协议,包括WinCE移植工作,网络传输和WinCE 嵌入式应用程序的开发。实现了一种互为客户端服务器的网络通信,完成了井下视频、音频、环境参数采集信息的实时传输。最后将嵌入式终端和PC主机结合起来进行了联合调试。大量测试数据表明视音频网络传输高效,软件代码具有良好的封装性,可移植性。 关键词:矿山应急救援;网络传输;TCP/IP;WinCE 1. 引言 近年来,我国矿山事故频繁发生,例如塌方、透水、煤矿起火、瓦斯爆炸等,对矿工生命构成威胁,并使国家遭受重大经济损失。为此,国家煤矿安全监察局成立了矿山救援指挥中心。预示着国家对矿山救援设备及救援人员素质的要求有进一步的提高[1]。本文源于井下现场信息记录仪研发项目,旨在设计一款专用于矿山应急救援通信的便携式设备,实现井下移动通信、视频传输、语音双向传输、人员定位以及瓦斯粉尘监控信息传输。方便灾后救援人员快速展开救援工作。网络通信是整个系统设计的关键基础,本文重点阐述软件平台搭建和网络通信的实现。 *基金项目:国家科技部2009年度科技型中小企业技术创新基金(09C26226115674);2010年西安市科技创新支撑计划(CY100850);陕西省教育厅自然科学专项(08JK354)。

在wince应用程序中直接访问硬件

平台:wince5.0.0OK2440-III BSP 直接在wince下操作硬件可以避免烧写NK,避免繁琐的驱动调试,用来验证硬件好坏非常有用,是系统起来后调试外设的很好的手段。 一、在平台 wince平台是比较成熟的平台,驱动比较好调试,驱动和应用的写法可以一模一样,甚至可以采用EVC来开发流驱动,效果不错。 在上直接访问硬件有如下方法: 1、直接访问uncached虚拟地址,成功案例如下: //-GPB for LCD backlight control 0xB16000XX is uncached Address#define rGPBCON(*(volatile unsigned *)0xB1600010)//Port B control#define rGPBDAT(*(volatile unsigned *)0xB1600014)//Port B data#definerGPBUP(*(volatileunsigned*)0xB1600018)//Pull-upcontrolB下面的代码在EVC下成功控制了背光。 // test is OK ---the backlight is controlled void CSPI_wifi_testDlg::OnButton3() { // TODO: Add your control notification handler code here// setting GPB1out [3:2]=01 rGPBCON& rGPBCON| rGPBDAT| }=~(1<<3); =(1<<2);

=(1<<1);// backlight on // backlight off //rGPBDAT&=~(1<<1); 2、使用MmMapIoSpace以及MmUnmapIoSpace访问 其实MmMapIoSpace以及MmUnmapIoSpace就是用VirtualAlloc和VirtualCopy实现的,下面地址有一篇文章详细介绍 MmMapIoSpace以及MmUnmapIoSpace成功访问硬件案例: void CDlgDemoDlg::OnButton1() { // TODO: Add your control notification handler code here//unsigned char *gpio_base; unsigned int *gpio_base; OutputDebugString(L"TestDrv - LedDrive1\n"); //PUCHAR ioPortBase; PHYSICAL_ADDRESS PortAddress = {0x, 0};//LowPart=0x;HighPart=0;gpio_base =(unsigned int *)MmMapIoSpace( PortAddress, 0x04,FALSE );//获得内存,4字节大小。 *gpio_base = 0x0585FF87; }//直接访问硬件 //释放内存 MmUnmapIoSpace(gpio_base,0x04); 3、用VirtualAlloc和VirtualCopy访问硬件

基于WinCE的I2C驱动程序设计

基于WinCE的I2C驱动程序设计 摘要:将操作系统和相应硬件设备连接起来,编写联系硬件和软件的驱动程序至关重要。本文主要讨论在WinCE操作系统下,如何设计实现S3C2410芯片具有I2C接口的驱动程序;详细介绍WinCE下,流驱动程序的编写方法,同时将驱动通过Platform Builder编译进操作系统,最后用动态链接库的方式提供给用户使用。 关键词:WinCE 流驱动 I2C总线驱动程序 引言 随着以计算机技术、通信技术和软件技术为核心的信息技术的迅速发展,嵌入式系统在各行业得到了广泛的应用,极大地推动了行业的渗透性应用。嵌入式系统是“以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统”,由嵌入式硬件和嵌入式软件两部分组成。嵌入式软件包括嵌入式操作系统和嵌入式应用软件。Microsoft的桌面操作系统已经为人们熟悉和使用,嵌入式的操作系统Windows https://www.wendangku.net/doc/5915767395.html,也日益风行。Windows https://www.wendangku.net/doc/5915767395.html,是Microsof t推出的功能强大的紧凑、高效、可伸缩的32位嵌入式操作系统,主要面对各种各样的嵌入式系统和产品。该系统所具有的多线程、多任务、完全抢占式的特点是专为各种具有严格资源限制的硬件系统所设计的。为了将操作系统和硬件设备连接起来,联系硬件和软件的驱动就显得很重要。 下面主要针对三星公司ARM9内核的芯片S3C2410进行分析,介绍在Windows https://www.wendangku.net/doc/5915767395.html,系统下进行底层设备驱动开发的方法并提供I2C通信的实例。 1 I2C通信协议及S3C2410芯片介绍 I2C(Inter Integrated Circuit)总线是1980年由Philips公司推出的。 I2C总线用两条线(SDA和SCL)在总线和装置之间传递信息,在微控制器和外部设备之间进行串行通信或在主设备和从设备之间进行双向数据传送。两条通信线通过上拉电阻被拉升至+5 V。在控制系统中的每个集成电路可以通过一个CMOS缓冲器来读每一条线路,也可以通过一个栅极开路的FET管将每一条线的电平下拉。因此,对每个芯片来说,每条线既是输入线,又是输出线。 I2C总线遵从同步串行传输协议,即各位串行(一位接一位)发送,由时钟(clock)线指示读数据(d ata)线的时刻。每个数据包前有一个地址,以指示由哪个器件来接收该数据。 S3C2410是一款基于ARM920T的16/32位RISC微处理器,主要用于手持设备,拥有高性价比,低功耗等特点,也是目前市面上出现较多的嵌入式开发板的处理器之一。芯片拥有16 KB的指令和数据缓存器,有存储管理单元(MMU)、LCD控制器、3个串口、4路DMA、4个时钟定时器、8路10位的A/D转换;支持I2C、I2S、SPI、主从USB等接口以及SD/MMC卡。 S3C2410微处理器的I2C总线可以处于下面4种模式下:主接收模式、主发送模式、从接收模式和从发送模式。处理器对I2C进行的操作,主要是对下面的几个寄存器进行读/写: ◇ IIC控制寄存器,IICCON(物理地址0X54000000,内存映射后的虚拟地址);

WinCETouchPanel驱动详解

WinCEWinCE1WinCE Touch Panel驱动详解 WinCE中的Touch Panel驱动是由GWES模块来管理的,Touch Panel驱动接收用户的触摸信息,并将其转换为屏幕上的坐标信息,传给GWES模块。在WinCE中,Touch Panel驱动是分层的,分为MDD层和PDD层,这和其他WinCE设备驱动是一样的。MDD层由微软提供,用户只需要实现MDD和PDD层间的 DDSI函数就可以了。如图 WinCE中的GWES模块负责加载和管理Touch Panel驱动,Touch Panel的MDD 层向上提供DDI接口,PDD层是针对硬件的实现,对MDD层提供DDSI接口。 1 Touch Panel驱动中的数据结构 (1) TOUCH_PANEL_SAMPLE_FLAGS 用于描述一个采样点的信息,这些信息被定义在一个枚举结构中: enum enumTouchPanelSampleFlags { TouchSampleValidFlag = 0x01, TouchSampleDownFlag = 0x02, TouchSampleIsCalibratedFlag = 0x04, TouchSamplePreviousDownFlag = 0x08, TouchSampleIgnore = 0x10, TouchSampleMouse = 0x40000000 }; TouchSampleValidFlag:一个有效的采样值 TouchSampleDownFlag:第一次按触摸屏时,返回该flag TouchSampleIsCalibratedFlag:采样的x和y坐标值不需要再被校验

WinCE系统下的驱动开发知识

WinCE第三方驱动安装之二——CAB安装包制作 Microsoft Windows CE是紧凑的,高效的操作系统,它被广泛的应用在从手持电脑到专门的工业控制器或消费用电子产品等各种嵌入工业产品中。英创公司ARM9系列工控主板预装了正版Windows CE5.0操作系统,并对板上所有硬件资源提供了完备的驱动支持。随着WinCE操作系统的广泛应用,越来越多的在PC上使用的硬件设备提供了对WinCE系统的支持,如3G模块,Wi-Fi等。 第三方驱动一般以两种形式提供,一是动态链接库(*.dll)加对应的注册表文件(*.reg),另一种是可直接安装的CAB文件(*.cab)。与动态链接库加注册表文件形式的驱动相比,CAB文件安装十分方便,不需要了解繁杂的WinCE INF文件格式或REG文件格式。本文介绍通过WinCE CAB Manager工具将以动态链接库usbser.dll和注册表文件usbser.reg 形式提供的USB转串口驱动程序压缩为可直接在英创主板上安装的CAB压缩包的方法。 1、打开WinCE CAB Manager,选择File->New,运行New Cabinet wizard(CAB新建向导),选择“next”直至完成如图1。

2、在CAB Information上点击右键,选择Properties(属性)选项(如图2),打开CAB 包属性设置对话框,如图3。 3、在CAB Properties对话框中(如图3),填写Company Name(公司名称)和Application Name(CAB包名称)。 4、切换至CAB Properties->Installation Directory对话框,设置CAB包默认安装路径,此处设置为NandFlash\USBDriverDll目录,如图4。

如何用Labview开发工业wince平板电脑的应用程序

如何用Labview开发工业wince平板电脑的应用程序 1楼度娘 2楼

图1 安装Windows CE系统的平板电脑 这几年安装Windows CE系统的平板电脑开始在工控行业里普及。用VS2005/VS2008开发Windows CE系统的应用程序可以像开发PC机的应用程序一样。现在我们还可以选择LabVI EW开发Windows CE系统的应用程序。这样我们就可以很容易开发出漂亮而且专业的界面。如仪表,波形显示等。Labvi ew 2009安装和激活Touch Panel Module后即可支持Windo ws CE。广州市微嵌计算机科技有限公司https://www.wendangku.net/doc/5915767395.html,,推出的WINCE工业平板电脑系列有5.6寸,7寸,8寸,10.4寸均支持Labview开发。 1. 用Labview 2009开发WinCE应用程序 需要安装的工具包括了:USB驱动程序、Microsoft ActiveS ync 同步软件、Labview 2009、和LabVIEW 2009 Touch Pan el Module。随光盘附带有丰富的例子:串口、波形图等。 1.1. 准备步骤 1.1.1. 安装USB驱动程序

Wince 平板电脑首次与PC机(一般是桌面电脑)相连时,会提示需安装USB驱动程序。以后可跳过这步。将PC机与 Wi nce 单板电脑通过USB口相连,当PC机提示发现新硬件时,找到附带光盘中的USB驱动文件夹中WINCE下面的 wceusbs h 文件。 1.1. 2. 安装工具软件步骤 1. Microsoft ActiveSync 4.2同步软件; 2. 开发工具: ①安装Labview 2009开发系统平台; ②安装触摸屏面板模块(LabVIEW 2009 Touch Panel Modul e); 1.1.3. 重点提示

wince流驱动入门讲解

第一章驱动的准备 1. 驱动程序完成以下功能: 对设备初始化和释放; 把数据从内核传送到硬件和从硬件读取数据; 读取应用程序传送给设备文件的数据和回送应用程序请求的数据; 检测和处理设备出现的错误。 2. 整个硬件系统资源在驱动程序面前是赤裸裸的,驱动可以使用所有系统资源,编写驱动程序时我们必须格外小心驱动代码的边界条件,确保它们不会损坏整个操作系统。 3. WinCE毕竟是一个嵌入式系统,有其自身的特殊性,为了提高运行效率,所有驱动皆为动态链接库,驱动实现中可以调用所有标准的API。而在其他Windows系统中可能的驱动文件还有.vxd,.sys和动态链接库。 4. Windows支持的驱动: 1)虚拟设备驱动程序(V irtual Device Driver):Windows3.1(Windows95/98/Me) 2)内核模式驱动程序(Kernel Mode Driver):Windows NT 3)Win32驱动程序模型(Win32 Driver Mode):从Windows98开始使用。 其中WDM是目前主流,然而在WinCE系统中,由于硬件资源有限和嵌入式系统的特点,对其的支持非常有限。 第二章WINCE驱动 1.WINCE驱动模型 目前Windows CE提供了4种设备模型,其中2种专门用于Windows CE 模型,另外2种模型来自于其它的操系统,如图1所示:

图1 Windows CE 各种驱动模型的关系 2.我们的工作 为了帮助开发者快速地开发Windows CE 驱动程序,微软在Platform Builder 中提供了大量的驱动程序例源代码,同时,芯片厂商或OEM 厂商有时也提供一些设备的驱动程序源代码,这些驱动程序源代码在多数情况下可以直接拿来使用,但是在少数情况下需要开发者根据自己的设备硬件特性做一些移植的工作,修改例源代码,重新编译和调试驱动程序。移植工作虽然没有像开发一个全新的驱动程序那样富有挑战性,但它仍具有相当大的难度,其原因如下: 移植工作仍然要求开发者具有良好的软、硬件基础,熟悉驱动程序的基本开发和调试方法,并要求具有一定的开发环境和测试手段。 移植工作仍然需要了解驱动程序的架构,需要确切知道驱动程序对外暴露哪些接口,微软提供了哪些接口,还必须实现哪些接口等。 对于同一设备的驱动程序,其源代码往往位于Platform Builder 多个不同的安装目录,移植工作首先需要找出所移植驱动程序的所有源代码的位置。 移植工作需要在所移植驱动程序的所有源代码中区分出与硬件有关的代码和独立于硬件的代码,熟悉每个软件模块的大致功能,找出需要更改的与特定硬件有关的代码,并详细分析这些代码。 大部分驱动程序的代码放在目录%_WINCEROOT%\public\COMMON\oak\drivers\下,这些驱动程序都是与平台无关的。此外,对于不同的平台,在BSP 目录中也有一些驱动程序的代码,它们在%_WINCEROOT%platform\\src \drivers\中,这些驱动都是与平台相关的。 移植工作所修改的源代码有可能仅仅只有几十行甚至几行代码,但在修改之前却需要花费大量的时间了解驱动架构、熟悉驱动接口、分析源程序代码、找出需要修改的位置。本质上讲,移植与从头开发一个驱动的差别仅仅在于少写了很多程序。省去了编写这部分程序外部驱动模型 流接口驱动程序 本机驱动程序 NDIS 驱动程序 USB 驱动程序 设备管理器 GWES 系统引导时间 设备加载时间 应用程序加载时间 基于Windows CE 的驱动模型

相关文档