WinCE流驱动程序设计概述
基于WinCE的流接口驱动程序开发
是从 宏观上进 行了研究 , 如文献[ — 】 例 4 5 。本 文主要 结合 Ca — y
ma n开 发 板 上 L CD 显 示 屏 的 背光 控 制 流 接 口 驱 动 程 序 实 例 详
细分 析 了 WiC n E下 流 接 口驱 动 程 序 的 开 发 实 现 流 程 。
t a a i pl L h t sm e CD diply S s a ba l t tea cki sr m dr er u o c yman gh i r ns n a v PXA27 i gie t an y i a pl te 0 s vn o alss m y h pr e s oc s of W i o sr a nd ws CE te m it f c dr e , nera e v i r Key wor : ido CE.te dsW n ws sr am nera ier yman it f ce dr v , Ca PX A27 0
目前 , i Wn CE提 供 了 四 种 设 备 模 型 ,其 中 两 种 是 专 门 用 于 WiC 的模 型 , 外 两 种 外 部 模 型 来 自其 他 的 操 作 系统 。 基 于 nE 另 WiC 的 两 种 模 型 是 本 机 的 设 备 驱 动 程 序 和 流 接 口的 驱 动 程 nE 序 。 两种 外 部 模 型 用 于 通 用 串行 总 线 ( S 和 网 络 驱 动 器 接 口 U B) 标 准 ( DI)驱 动 程 序 。 其 中流 接 口驱 动 程 序 是 为 连 接 到 基 于 N S WjCE平 台 的外 围 设 备 而 设 计 的 , 些 外 围 设 备 包 括 S 卡 、 n 这 D 摄 像 头 、 印 机 等 。目前 针 对 流接 口驱 动 程序 的设 计 和 开 发 很 多 都 打
实验五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”)….)打开设备。
然后,文件系统判断打开的是文件还是设备。
最后,如果打开的是设备,就将控制权交回设备管理器。
Windows CE驱动程序
Windows CE驱动程序模型 CE驱动程程序模型
在Windows CE下,所有的驱动程序都以用户态下的 CE下 所有的驱动程序都以用户态 用户态下的 DLL文件形式存在。 DLL文件形式存在。 文件形式存在
编写Windows CE驱动程序用到的方法及工具与编写其 编写Windows CE驱动程序用到的方法及工具与编写其 他任何一个普通的DLL一样 一样。 他任何一个普通的DLL一样。
给操作系统和驱动程序带来了很大的灵活性。 给操作系统和驱动程序带来了很大的灵活性。操作系统 可在运行时动态地加载所需要的驱动程序, 可在运行时动态地加载所需要的驱动程序,可轻松实现外 设的即插即用 即插即用(Plug Play)。 设的即插即用(Plug & Play)。 驱动程序放在用户态而不是核心态来实现, 驱动程序放在用户态而不是核心态来实现,也增强了系 统的稳定性。驱动程序的崩溃不会影响到操作系统内核。 统的稳定性。驱动程序的崩溃不会影响到操作系统内核。 驱动程序放在用户态下可给驱动开发人员提供便利。 驱动程序放在用户态下可给驱动开发人员提供便利。
Device.exe 又称做设备管理器。负责加载和管理 又称做设备管理器。 Windows CE下绝大多数的设备驱动程序。 CE下绝大多数的设备驱动程序 下绝大多数的设备驱动程序。 GWES.exe负责加载一些与图形界面相关的 设备驱动。 GWES.exe负责加载一些与图形界面相关的I/O设备驱动。 负责加载一些与图形界面相关的I/O设备驱动 FileSys.exe在系统中负责管理 FileSys.exe在系统中负责管理Windows CE中的对象存 在系统中负责管理Windows CE中的对象存 储和文件系统。负责加载所有的文件系统驱动程序。 储和文件系统。负责加载所有的文件系统驱动程序。
基于WinCE的I 2C驱动程序设计
IC总线遵从 同步 串行 传输 协议 , z 即各 位 串行 ( 一位
接一位) 发送 , 由时钟 (l k 线 指示读 数 据( aa 线 的时 c c) o dt)
刻 。每个数据包前有一 个地址 , 以指示 由哪个器件来接收
式 的特点是专为各种 具有严 格 资源限制 的硬件 系统 所设 计的 。为 了将操作 系统 和硬 件设备连接起 来 , 联系硬件 和
US B等接 口以及 S / D MMC卡 。
¥ C 4 0 处理器 的 1C总 线可 以处 于下 面 4种 模 3 21 微 2
式下: 主接 收模 式 、 主发送 模式 、 接收模 式 和从 发送 模 从
维普资讯
技 术 纵 横
基于 W 的 1 iC nE 2 0驱动程序设计
■ 中 国地 质 大学 王 小 芳 王 典 洪 陈 飞
将操作 系统和相应 硬件 设 备连 接 起 来, 写联 系硬 件 和 软件 的驱 动程 序 至 关重 要 。本 文主要 讨 论 在 编
.
_
WiC n E操作 系统下 , 如何设 计 实现 ¥ C 4 0芯片具有 Ic接 口的驱动程序 ; 3 21 。 详细介绍 Wi E下, n C 流驱 动 程序的编写方 法, 同时将驱动通过 Pafr B i e 编译进操作 系统 , l om u d r t l 最后用动 态链接库 的方式提供给 用
通信线通过上拉电阻被拉升至 +5V。在控制 系统 中的每 个集成电路 可 以通 过 一个 C S缓 冲 器来 读 每一 条线 MO
路, 也可 以通过一个栅 极 开路 的 F T管 将 每一条 线 的电 E 平下拉 。因此 , 对每个芯片来说 , 每条线既是输入线 , 又是
基于WinCE的Nand Flash硬件及驱动程序设计
N n l h作 为一种 价格低 廉 , 写速 度快且 体积小 的存储 技术 , 手持 终端 的存储 应用 领域 中的竞争 a dFa s 读 在 力 日益 提升 。P A 5 X 2 5是 Itl 司专 为手 持设备 设计 的基 于 XSae构架 的高 性能处 理器 , 有丰 富 的外部 ne 公 cl 具 接 口, 作主频 高达 4 0MH 。Widw E是 微软公 司针对 个人 电脑 以外 的 电脑产 品所研 发 的嵌入 式 操作 工 0 z nos C
系统 ,以其 可裁减 性 、实 时性 以及 丰 富 的多媒 体 支 持 等优 势 ,已 经成 为嵌 入式 操 作 系统 主 流 平 台 之一 。
K K G 8 0 是三 星公 司生 产 的一款 N n ls , 者在 P A 5 9 8 OU M a dFah 笔 X 2 5及 WiC 42平 台基 础上 , 绍其 内部存 nE . 介
第2 7卷 第 2期
21 0 0年 6月
苏 州 科 技 学 院 学 报 ( 然 科 学 版) 自
J u n lo u h u Unv ri fS in ea d T c n lg ( trl in e o r a fS z o iest o ce c n e h ooy Naua e c ) y Sc
TO S P封 装 。其 内 部 由 8 1 2个 块 ( lc ) 成 , 个 块 分 成 6 9 Bo k 组 每 4页 ( a e , 页则 包 括 (k 6 ) ye , 中 P g)每 2 + 4 B ts其
6 B t 是空 闲区。C U访 问 N n ls 4 ye s P a dFah内部 的任 意字节 时 ,需 要至 少 1 2位 C lmnA des l ou d rs 和 9位 R w o
WinCE 6.0设备驱动程序基本知识
设备驱动程序基础
b)
混合驱动程序
同样使用两层的MDD/PDD模型,这意味着会持续使用MDD, 也就是对于所有的PDD来说都使用相同的MDD,但是这个 MDD还提供了额外的独特功能(这个功能是给定设备类型的 MDD/PDD实现的一种逻辑扩展)。
使用混合驱动程序的优点: 使用混合驱动程序的优点:与分层架构相同。
接上页... 接上页...
这种架构通常在下列情况中使用: 当某个设备类型没有可用的分层模型时; 当设备硬件是不常见的定制硬件时; 当没有可以重用的分层驱动程序代码时; 当使用MDD/PDD模型,但不能达到需要的效率水平时。 当使用MDD/PDD模型,但不能达到需要的效率水平时。 优点: 可以避免在各个层之间切换,并且能最大化使用硬件,这些都 优点: 带来了高效率。
XXX_Seek
— 调用SetFilePointer函数时调用此函数 调用SetFilePointer函数时调用此函数
实现流接口驱动程序
XXX_IOControl
— 调用DeviceIoControl函数时调用此函数 调用DeviceIoControl函数时调用此函数 — 提供了支持自定义驱动程序操作的机制 — 大多数驱动程序都具有的多用途函数 — 通过I/O控制代码来识别具体的操作 通过I/O控制代码来识别具体的操作 — I/O控制代码是每个设备特定的 I/O控制代码是每个设备特定的
设备驱动程序基础
GWES(图形、窗口以及事件子系统) GWES(图形、窗口以及事件子系统):
支持窗口、对话框、控件、菜单、以及其他和用户界面相关的资源。控 制窗口管理器和窗口消息管理器,包括键盘消息、鼠标消息、触摸屏消 息等等。 GWES(gwes.dll)模块会加载由本系统独占使用的设备驱动程序,也就 是下列以任何方式与用户界面相关联的驱动程序:键盘、视频适配器、 触摸屏、打印机、鼠标。
WinCE6.0下的SSI协议流接口驱动程序实现
WinCE6.0下的SSI协议流接口驱动程序实现
卓璐;陈富林;沈金龙
【期刊名称】《网络新媒体技术》
【年(卷),期】2013(000)002
【摘要】研究了如何实现S3C6410嵌入式处理器芯片下SSI通讯协议的驱动,以此来为SSI通讯设备提供底层软件支持。
本文的驱动程序运行在嵌入式操作系统WinCE6.0下,采用流驱动模型编写同时涉及WinCE6.0下的中断处理,最终经过开发板与编码器连接测试通过。
【总页数】4页(P57-60)
【作者】卓璐;陈富林;沈金龙
【作者单位】南京航天航天大学机电学院,南京210016
【正文语种】中文
【中图分类】TP311.13
【相关文献】
1.WinCE6.0下WM8976的音频驱动 [J], 张仲达;方正
2.带有WDM底层接口的NDIS微端口驱动程序实现方法的研究 [J], 贺鹏;李建东;陈彦辉
3.WinCE6.0下双模终端的USB转串口驱动开发 [J], 张旭;何维;田增山
4.ARM和WinCE6.0下nRF24L01的驱动设计 [J], 朱志斌;刘振来
5.WinCE
6.0下的SSI协议流接口驱动程序实现 [J], 卓璐;陈富林;沈金龙
因版权原因,仅展示原文概要,查看原文内容请购买。
WinCE.NET下USB OTG设备驱动程序设计
下USB OTG设备驱动程序设计孔旋,邓中亮北京邮电大学电子电子工程学院计算机应用技术专业,北京(100876)E-mail:kongxuan1982@摘要:本文介绍了USB OTG技术,分析了两用USB OTG设备驱动程序配置模型以及下设备驱动程序模型,并详细介绍了下pl2303的usb转串口桥接器芯片驱动程序的设计与实现。
关键词:USB OTG,,驱动程序1.引言USB,全称是Universal Serial Bus(通用串行总线)。
在1994年年底,由当时的康柏、IBM、Microsoft等多家公司联合发起成立的通用串行总线开发者论坛(USB Implementers Forum,简称USB IF)先后陆续推出了USB0.7、USB1.1、USB2.0规范,其理论传输数率最高可达480Mb/s。
最近,根据现有的USB接口在有线/无线,性能及应用规范上的不同,USB IF将USB接口分为5类,并发布了相应的标识,分别是:Wireless USB、Original USB、Hi-Speed USB、On-The-Go USB及Hi-Speed On-The-Go USB[1] 。
是微软公司向嵌入式领域推出的一款紧凑、高效的32位嵌入式操作系统,具有多任务、实时性、模块化及可伸缩性、强大的通信和多媒体能力等特点[2] ,在移动计算、工业控制和信息家电等诸多领域都有广泛的应用。
本文将通过工具Platform Builder实现TI OMAP850 PDA手机平台下USB OTG设备驱动程序,并实现基于OTG技术的一种应用——在无PC条件下,以PDA手机平台端为USB 主机端的数据通信。
B OTG技术2.1 OTG技术简介USB技术的发展,使得PC和周边设备能够通过较简单、可方便热插拔的方式连接在一起,通过USB总线,在PC的控制下进行数据交换。
但这种方便的数据交换方式,就在不久以前(10年以内),一旦离开了PC,各设备间无法利用USB接口进行操作,因为当时没有任何一种PC以外的其他设备能够充当PC一样的Host。
8wince之应用程序设计
嵌入式操作系统原理——Windows CE第八章应用程序设计内容概述•独特的Windows CE •Windows CE编程基础•Windows CE编程技术1 独特的Windows CE•微处理器多样化•CE不运行现有的程序•CE有严格的内存限制•CE硬件并不十分标准化•文件I/O的差别1.1 微处理器多样化•其它Windows平台是Intel x86兼容的微处理器•CE设备支持的微处理器包括:–ARM(包括Intel 的XScale)–SHx–MIPS–x861.2 CE不运行现有的程序•现有Windows程序必须重新编译才能在Wince上运行•有些API被删除,有些被代替,还增加了一些其它的API•字符集的区别,Windows 2000支持Unicode和ANSI,Windows 98只支持ANSI,WinCE使用Unicode•提供了新的针对特定平台的控件,如命令栏(提供的功能类似菜单和工具栏,以减少占用屏幕的空间),而某些标准控件却减少了其功能1.3 CE有严格的内存限制•Wince只有4G的虚拟内存空间•2GB是为操作系统保留的•应用程序的2GB分成了33个slot(槽)•每个槽32MB•每个槽对应一个进程1.4 CE硬件并不十分标准化•PC机组成:运算器、控制器、存储器、输入输出设备•各个CE设备的结构各不相同,而且通常没有鼠标、显示器(如果需要显示则大多使用触摸屏)但是Windows CE编程仍然是Windows编程,有相同的消息循环、相同的窗口,大部分相同的资源和控件等,仍然是事件驱动的编程模型2 Windows CE编程基础•Windows消息处理机制•创建Win32应用程序•Unicode•诊断输出APIs•文件I/O2.1 Windows 消息处理机制•操作系统发送消息给应用程序,应用程序响应相应的消息,进行消息处理Windows 产生一个消息发送消息到拥有窗口的应用程序的消息队列中应用程序预处理消息窗口过程处理该消息应用程序删除该消息并回叫Windows发送该消息Windows发送该消息,即调用适当的窗口过程Windows消息处理机制代码示例代码来源:Page101-108Programming Microsoft Windowss 3rd edition, Douglas Boling,Microsoft PressKeyTrac.h#define dim(x) sizeof(x)/sizeof(x[0])……//定义一个结构体,来表示消息和对应的处理函数struct decodeUINT{UINT Code;//消息//处理函数LRESULT (*Fnx)(HWND,UINT,WPARAM,LPARAM);};……//注册主窗口int InitApp(HINSTANCE);//创建主窗口HWND InitInstance(HINSTANCE,LPWSTR,int); //清理工作int TermInstance(HINSTANCE,int);//窗口过程LRESULT CALLBACKMainWndProc(HWND,UINT,WPARAM,LPARAM)//下面几个函数是相应的消息处理函数LRESULTDoCreateMain(HWND,UINT,WPARAM,LPARAM); LRESULT DoPaintMain(HWND,UINT,WPARAM,LPARAM); LRESULT DoKeysMain(HWND,UINT,WPARAM,LPARAM); LRESULTDoDestroyMain(HWND,UINT,WPARAM,LPARAM);KeyTrac.cpp#include <windows.h>#include "KeyTrac.h"#include <commctrl.h>//应用程序名(使用的是Unicode/ANSI通用形式)const TCHAR szAppName[ ]=TEXT(“KeyTrac”); //程序句柄HINSTANCE hInst;……TCHAR szMsgTxt[64];//消息及其处理函数结构体数组const struct decodeUINT MainMessages[ ]={WM_CREATE,DoCreateMain, WM_PAINT,DoPaintMain,WM_KEYUP,DoKeysMain,……WM_KEYDOWN,DoKeysMain, WM_SYSKEYUP,DoKeysMain, WM_DESTROY,DoDestroyMain};//程序的入口点是WinMainint WINAPI WinMain(HINSTANCE hInstance, //程序的句柄HINSTANCE hPrevInstance,//为了兼容Win16程序而设置,总为0LPTSTR lpCmdLine,//指向一个包含命令行文本的Unicode字符串int nCmdShow)/*确定了该程序主窗口的初始状态在Windows CE中,这个参数的值只允许有3种状态正常(SW_SHOW)隐藏//(SW_HIDE)可见却不是活动窗口(SW_SHOWNOACTIVATE)*/{MSG msg; //消息int rc=0;HWND hwndMain;//主窗口rc=InitApp(hInstance); //注册主窗口if(rc) return rc;hwndMain=InitInstance(hInstance,lpCmdLine, nCmdShow);//创建主窗口初始化if(hwndMain==0)return 0x10;int InitApp(HINSTANCE hInstance){WNDCLASS wc;wc.cbClsExtra=0;……wc.hInstance=hInstance;//句柄wc.lpfnWndProc=MainWndProc;//指定窗口过程函数wc.lpszClassName=szAppName;//程序名……if(RegisterClass(&wc)==0) return 1;//注册窗口类return 0; }{MSG msg; //消息int rc=0;HWND hwndMain; //主窗口rc=InitApp(hInstance); //注册主窗口if(rc) return rc;hwndMain=InitInstance(hInstance,lpCmdLine,nCmdShow); //创建主窗口初始化if(hwndMain==0)return 0x10;HWND InitInstance(HINSTANCE hInstance,LPWSTR lpCmdLine,int nShowCmd){HWND hWnd;hInst=hInstance;hWnd=CreateWindow(szAppName,TEXT("KeyTrac"),WS_VISIBLE,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);if(!IsWindow(hWnd))return 0;ShowWindow(hWnd,nShowCmd); /*使窗口的属性和主程序//指定的相同*/UpdateWindow(hWnd); /*强制Windows发送WM_PAINT消//息给刚创建的窗口*/return hWnd;} // InitInstance结束{MSG msg; //消息int rc=0;HWND hwndMain;//主窗口rc=InitApp(hInstance);//注册主窗口if(rc) return rc;hwndMain=InitInstance(hInstance,lpCmdLine,nCmdShow);//创建主窗口并初始化if(hwndMain==0)return 0x10;while(GetMessage(&msg,NULL,0,0)){/*开始接收操作系统消息,直到得到消息WM_QUIT时GetMessage函数返回0,退出循环*/TranslateMessage(&msg);/*将键盘消息转换成字符消息*/DispatchMessage(&msg);/*通知操作系统将消息发送到应用程序适当的窗口,事实上就是操作系统调用相应的窗口过程,在此程序中就是调用MainWndProc*/}return TermInstance(hInstance,msg.wParam); /*清理工作,如释放内存等*/}//窗口过程,由操作系统调用LRESULT CALLBACK MainWndProc(HWND hWnd,UINT wMsg,WPARAMwParam,LPARAM lParam){int i;for(i=0;i<dim(MainMessages);i++){//调用对应的消息处理函数if(MainMessages[i].Code==wMsg) return(*MainMessages[i].Fnx)(hWnd,wMsg,wParam,lParam );}return DefWindowProc(hWnd,wMsg,wParam,lParam);//调用系统的默认处理函数}int TermInstance(HINSTANCE hInstance,int nDefRC) {return nDefRC;} /*因为此程序比较简单,不需要做额外的清理工作;以下是消息处理函数,省略细节*/ LRESULT DoCreateMain(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM lParam) {……}LRESULT DoPaintMain(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM lParam) {……}LRESULT DoKeysMain(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM lParam) {……}LRESULT DoDestroyMain(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM lParam) {……}2 Windows CE编程基础•Windows消息处理机制•创建Win32应用程序•Unicode•诊断输出APIs•文件I/O2.2 创建Win32应用程序(eVC)2.2 创建Win32应用程序(eVC)Windows CE应用程序的类型•空项目已有源代码文件时选择,仅需要将这些文件放到一起进行编译链接构造应用程序•简单Windows CE 应用程序选择简单Windows CE应用程序可得到程序入口点WinMain。
WinCE.NET下的蓝牙的串口驱动程序设计
3 结束 语
软件分层开发 必须依照层 内I 内聚、层问低 删合原则 , 还 葵考 虑 程 序 的 口扩 腱忡 、 口 维 护 忡 和 n 蕈用 性 , I时 必 须 J , r 自 利十开发 行分 T等 等, eS o 40 作为微软 最新推 …的企 ’ : P thp , 业 级 开 发 的 地 例 , 这 方 面 都 有 所 考 虑 。 深 入 学 习 Pth p 的休系结构 ,我们 町以伙速搭 建 用程 序体系 eS o40
参 考文 献
构 , 从 开 发 …结 构 清 晰 的 企 业 级 用 程 序 。 口
S lev r ALO alDA qS reD / rce L。 何 若 紧 联 系 。 比 如 ,使 用 DA F c r 扶 取 C t oy类 实 例 , 用 C tg r 实 例 的 L at y米 o agr e 调 aeoy类
a d t er lv n u o i n n h ee a tf n t 。 o
系统采用 的足 s m u g公 州的 S 3 4 2 处 器,内 u sn C 24X 部集成 1包含两个 6 节 f 0的虮 F以T作 中断模 也 口 r 4 1 f l J ‘ , 以T作 D MA模式 ,最 高日 T作 l. K p J ’ 1 2 b s的 UA T。由 5 R 十要保 数据传输速率 ( 曼为数据接 收 ) 软 件 l 主 , 都 实现 R 2 2的软件 议, 设置 UA T rcv hf r S3 R eies ie 接收到 t 数 据 ( 为 )就 产 生 中 断 通 知 CP 读 取 数 据 ,将 数据 从 U UAR f Tf0到 b f r 搬 运 部 分 由 IR 内 核模 J 处 。 i uf 的 e S = ℃ 系统
流设备驱动wince
流设备驱动实际上就是导出标准的流接口函数的驱动,这是文档上面的定义。
在WinCE中,所有的流设备都导出流设备接口,这样WinCE中的Device Manager可以加载和管理这些流设备驱动。
流设备驱动的架构如图:首先我声明一下,这个图是我抄的,呵呵。
在WinCE启动的时候,OAL(OAL.exe)首先加载kernel.dll,然后kernel.dll加载device.dll,device.dll会加载devmgr.dll,devmgr.dll实际上就是Device Manager模块,他会负责流设备的加载,卸载和交互操作。
这个从图中可以看出的。
再来说说应用程序,一般应用程序要通过文件系统接口来访问设备。
首先调用CreateFile打开设备并获得相应的句柄,然后通过文件系统接口调用ReadFile或者WriteFile来访问相应的流设备驱动,或者通过DeviceIoControl 直接访问。
无论哪种方式,都是要通过Device Manager才能访问到相应的设备驱动,如上图。
不知道上面的架构解释清楚了没有,下面介绍一下流设备驱动的接口函数:1.DWORD XXX_Init(LPCTSTR pContext, DWORD dwBusContext):该函数用于初始化一个流设备驱动,在设备被加载的时候调用,调用成功后会返回一个句柄。
pContext:在Active注册表键路径下的一个字符串dwBusContext:不常用,这里可以设为02. BOOL XXX_Deinit(DWORD hDeviceContext):卸载一个设备驱动。
hDeviceContext:设备驱动的句柄,在XXX_Init调用时返回的3.DWORD XXX_Open(DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode):打开一个设备。
hDeviceContext:设备驱动的句柄,在XXX_Init调用时返回的AccessCode:访问权限代码,一般是只读或者只写或者读写ShareMode:共享模式,是否支持共享或者独享4.BOOL XXX_Close(DWORD hOpenContext):关闭一个设备。
windows ce 简介
外设
硬件
嵌入式操作系统发展
早期的硬件设备很简单,软件的编程和调 试工具也很原始,与硬件系统配套的软件 都必须从头编写。程序大都采用宏汇编语 言、C语言,调试是一件很麻烦的事。随 着系统越来越复杂,操作系统就显得很必 要。
在70年代的后期,出现了嵌入式系统的操 作系统。在80年代末,市场上出现了几个 著名的商业嵌入式操作系统,包括 Vxwork、Neculeus、QNX和Windows CE等,这些系统提供性能良好的开发环境, 提高了应用系统的开发效率。
鼠标、键盘 显示器
声卡 主板集成 主板集成或外 接卡
设备名称
引导代码 操作系统
嵌入式系统
PC
Bootloader引导,针 主板的BIOS引导,无 对不同电路板进行移植 须改动 WinCe、 Windows、Linux等, EmbeddedLinux等, 不需移植 需要移植 每个设备驱动都必须针 操作系统含有大多数驱 对电路板进行重新开发 动程序,或从网上下载 或移植,一般不能直接 直接使用 下载使用 需要移植 操作系统包括或第三方 提供
Windows CE与Windows系列有较好的兼 容性,无疑是Windows CE推广的一大优 势。从整体上来说为有限资源的平台设计 的多线程、完整优先权、多任务的操作系 统。它的模块化设计允许它对从掌上电脑 奥可视X1 到专用的工业控制器的用户电子设备进行 Windows 定制。操 作系统的基本内核需要至少 CE 6.0 200KB的ROM。
驱动程序
协议栈 开发环境 仿真器
借助服务器进行交叉编 在本机就可以开发调试 译 需要 不需要
嵌入式操作系统介绍
什么是嵌入式操作系统
嵌入式操作系统是一种支持嵌入式系统应 用的操作系统软件,它是嵌入式系统的重 要组成部分。
基于S3C6410的WinCE流式驱动开发
ZHANG . i g.YE T a . u De x n i n g o,ZHANG . n Aimi
(o C mmu iainT ann aeo e ea tf Hed u res X a h ao 50 , hn ) nct riigB s f n rl a a q a tr, u n u 7 1o C ia o G S
d v ri ie sa x mp e t n lz h r c s fte s e n e fc rv rde eo me t i r e sgv n a n e a l o a ay e t e p e so t a it ra e d ie v lp n . o h r m Ke r s:W iCE ;sr a i e f c rv r 3 41 y wo d n te m ntra e d e ;¥ C6 0;d v rd v lp n i i r e e eo me t
0 引言
在 嵌人式 系统 应用 开 发 中, 由于系 统 需求 千 差 万 别 , 品从 功能到外 观都 相差悬殊 , 往需要开 发 产 往 者 自行设 计硬件 系统 、 定制 软件 系统 、 开发设 备驱 动 程 序 。设 备驱 动程序 提供 了操作 系统和硬 件之 间的 接 口 , 既包含 特定操 作系 统相关 的代码 , 它 也包含 特 定 硬件 相关 的部分 … , 直在 开 发者 心 中笼罩 着 一 一
基于ARM与WINCE的RS485驱动程序设计
中图分类号 :P 3 T 3 T 2 ;H 9
文献标 志码 : A
文章编号 :0 14 5 (0 1 1- 3 7 0 10 — 5 12 1 )1 1 2— 5
De i n o 4 5 d i e a e n ARM n I sg fRS 8 rv r b s d o a d W NCE
范 忠 强 , 徐 平 , 周 曙 姜
(. 1 杭州电子科技大学 自 动化学院, 浙江 杭州 30 1 ; 10 8
2 杭州电子科技大学 生命信息与仪器工程学院, . 浙江 杭州 30 1 ) 10 8
摘要 : 随着工业设备控制要求 的1益复杂 , 3 嵌入式的工业控制系统成为必然趋势 。 由于 R 4 5具有 良好 的抗干扰性 、 S8 传输距离长和多 站能力等优点 , 在工业控制领域中应用最广泛 。为 了开发基于 A M R 9内核和 Wi o s E50系统 的 R 4 5驱动程序 , n w . d C S8 首先给出了硬 件 电路设计 , 接着 阐述 了 Widw E系统的驱动模 型以及 中断处理方法 ; nos C 然后详细描述 了 R 4 5 S 8 驱动程序的具体设计过程 , 包括驱 动程序 的结构设 计 、 关键函数设计 、 驱动程序 的注册和加载等。实验结果表 明, S 8 R 4 5驱动程序运行稳定可靠 。
W i d ws C s se , r t , e h r wa e d sg o 4 5 w s p e e t d;e o d y, e d v r mo e n n e r p a d i g meh d n n o E y t m f sl t a d r e i n fr RS 8 a r s n e s c n l t r e d la d it r t h n l t o s i i y h h i u n W i d wsCE s se wa n r d c d t idy, e RS 8 r e ’ e in p o e s w sg v n i e al i cu i g t e d ie ’ tu t r e in, n o y t m s i t u e ;h r l t 4 5 d i r Sd sg r c s a i e n d t i, l d n r r Ssr cu e d sg o h v n h v k yf n t n e i n t e r gsr t n a d la fd v r T e e p r n a e u t i dc t h t 4 5 d v rr n t by a d r l b y e u ci sd sg ,h e it i n d o r e . h x e i o ao o i me t l s l n i ae ta r s RS 8 r e u ssa l n ei l . i a Ke r s y wo d :W id w E 5 0;RS 8 n o sC . 4 5;s e m n e fc rv r n e r p t a it r e d e ;i tru t r a i
基于WinCE流接口模型的设备驱动设计
D N i,L in Q og a I GWe t Lag , 1 nl n 0 D i
i tra e d v r n e c r e ,UF e h oo y i u e o c n r l U B f p y, B f p y f r tme h d a d d ti d f i I tc n l g s s d t o to S o p US o p o ma t o n e al l l e
(. eate tfEet nca dEetcl gnei L nh uP t ce cl ol eo e nlg , azo 30 0 ,hn ; 1D p r n o l r i n l r a ier g,az o e ohmi lg Tc ooy L nh u70 6 C ia m co c i En n r aC e f h 2 oeeo Eetcl n ie ig Z ea gU i rt, a gh u3 02 , hn .C lg l ra gnen , h in nv sy H n zo 10 7 C i l f ci E r j ei a)
Ab t a t To e h n e fe i ii fe e y t m ,USB fo y d i e s d v lp d u e i CE. s r c : n a c x b l y o mb d s se l t pp rv r i e eo e nd r W n l NET,b s d o h tu tr fsr a i tra e d i e ,t e c aa trsis o o d me ha im fsr a a e n te sr cu e o te m ne c rv r h h r ce itc f la c n s o te m f
基于WinCE6.0的 LPC3250串口驱动程序开发
基于WinCE6.0 的LPC3250 串口驱动程序开发引言Windows CE 是一个开放的、可升级、可裁减的32 位实时嵌入式操作系统,具有可靠性好、实时性高、内核体积小的特点,广泛应用于工业控制、信息家电、移动通信、汽车电子、个人电子消费品等领域。
最新版本Windows Em-bedded CE 6.0 于2006 年11 月发布,其特点有:最大进程数量到32K,且每个进程有最大2 GB 的虚拟内存空间;将关键的驱动程序、文件系统和图形界面管理器移到了内核中,大大减少了CPU 在内核态和用户态间切换造成的性能损失等。
LPC3250 是NXP 半导体公司(由Philips 公司成立)推出的带有矢量浮点协处理器的ARM926EJ-SCPU 内核的微控制器。
它具有丰富的外围接口,包括7 个UART,其中4 个是标准UART,另外3 个是高速UART,都带有64 字节的接收和发送FIFO,最高可支持的速率达921 600 b/s。
为了实现低功耗,LPC3250 采用NXP 半导体先进的开发技术来优化内在功率,并使用增强型的软件控制结构使基于功率管理的应用得到优化。
在同时要求高性能和低功耗的嵌入式应用中,运行Win-dows CE 的LPC3250 平台将会有很好的市场前景,对于最常用到的串口的驱动开发显得尤为重要。
1 WindOWS CE 的串口驱动模型基于Windows CE 有两种驱动程序模型:本机设备驱动程序和流接口驱动程序。
串口驱动就属于分层的流接口驱动程序。
分层驱动程序将设备的驱动程序分为两层:平台相关驱动PDD(Platform Dependence Driver)层和模型设备驱动MDD(Model Device Driver)层。
PDD 层由特定于给定硬件设备或平台的代码组成,很多时候用户需要根据具体平台修改;MDD 层包含平台无关的代码,它通过实现一些操作系统预先定义的接口来实现某一类设备的通用功能,通常由微软提供。
windows ce RS232C串行口驱动程序设计
实验5 RS232C串行口驱动程序设计实验目的掌握RS232串行口设备驱动程序的编写方法,实现串行口的初始化、中断管理、发送与接收处理的程序设计技巧。
实验环境⏹操作系统:windows 2000以上版本,要求安装.NET Framework 1.1⏹软件工具列表:⏹Microsoft ActiveSyn 4.5;⏹Platform Builder 5.0;实验学时2学时,必做实验。
实验内容理解驱动程序的原理与功能,掌握流式接口驱动程序的结构、编写、加载及调试过程预备知识驱动程序是对底层硬件的抽象。
应用程序开发者不需要真正理解底层驱动的工作原理,他们只需要通过Windows CE提供的API函数,就可以直接与硬件进行交互。
例如,如果应用程序要对串口进行操作,只需要:1.在COMx上调用CreateFile( )2.调用WriteFile( ) 往串口写数据3.调用CloseHandle( ) 关闭串口对于其他类型的API也是一样的。
如果我们需要向显示器输出,我们只需要调用PolyLine( ), 或者MoveToEx( ), LineTo( )等函数,而不需要理解显示器的真正工作原理。
在Windows CE中,驱动就是一个简单的用户态动态链接库(DLL),DLL 会导出一些公共的接口,DLL被父进程(通常是device.exe或者gwes.exe)加载,然后,父进程通过DLL导出的接口调用DLL。
流式接口的驱动程序导出一系列大家熟知的接口。
还拿串口驱动当例子。
我们希望可以往串口读写数据,因此,我们希望驱动程序可以导出Open, Close, Read, 和Write接口。
此外,流式接口的驱动程序还导出如下函数:PowerUp, PowerDown, IO Control, Init, 和DeInit.实验步骤一.、编写流式接口的驱动程序1.打开Platform Builder。
2.利用Platform Wizard创建新的平台3.在Platform Builder中选择“File”->“New Project or File”,创建一个“Windows CE Dynamic link library”项目,项目的名称填写“My Driver”。
WinCE流驱动程序设计概述
Th sg fSte m n e f c ie iCE e De i n o r a l t r e Dr r orW n a v f
GU Z e g—h o, ANG Z —q a g N E W e —h a hn a W i in , I n u
( eat etfEet n sadE gne n N n n nv sy N n n 10 3 C i ) Dprm n l r i n n i r g, aj g U iri , aj g2 09 , h a o co c ei i e t i n
1 引 言
Wi E是 一 款 由微 软 公 司推 出 的 面 向嵌 人 式 n C 领域 的操 作 系统 , 广 泛应 用 于手 机 、 D 平 板 电 被 P A、
S 11 A 10的新一代嵌 入式应用 处理 器, 属于 8 _ r m系 列, 它拥有 T u b h m 压缩指令、4 6 位长乘法指令、 增强 型 D P指 令 等 先 进 特 性 , 集 成 了众 多 的外 部 接 S 并
驱动。其中流驱动由于接 口简单、 支持硬件设备最
多, 因而最 为 常用 。下 面 将结 合 D P A 5 B X 25开发 板
D IE SB i n 。例如音频设备 ( vD v 的加 RV R \u I” h Wae e ) 载信息 : f K Y— O A —M C IEi resi,hni E L C L A HN D vr u I H i B i
Wae e \ vD v ]
”Prfx = ”W AV ” e i”
中流驱动的一个简单实例 , 详细说 明其设计方法 。
2 流 驱 动 开 发 的 基 本 知 识
2 1 开发 WiC . n E驱动 的基本 工具
WinCE下的SPI键盘硬件及驱动程序设计
8 5 ¥ C2 1 0 1 3 40
协议 , 钟 信号 S K产生 同 步脉 冲, S 为输 入信 号, 时 C MIO
1 硬 件 设 计
系 统 的 核 心 C U 采 用 韩 国三 星 电 子 公 司 的 嵌 入 式 P ARM9系 列 芯 片 ¥ C 4 O 3 2 1 。该 芯 片 内部 集 成 了 S I IC、 P 、
所示 。
上 由 WiC n E操 作 系 统 实
现 ; 阵 键 盘 平 台 相 关 驱 矩
I形 口 擎 统G E) 图 窗 引 系 ( s w I
●
’ … , …
动 和矩 阵 键 盘平 台相 关 驱 备密切 相 关 , 由用 户 实 现 ; 图形 窗 口引 擎 系统 负 责 对
断 到 ¥ C2 1 。 随后 , 3 4 0通 过 S I 口读 取 8 5 3 40 ¥ C2 1 P 接 0 1发
l
P 0 O・ P 1 0. P 2 O.
P1 6
.
- , q
P15 ・
P14 .
P 10 .
出的 串行 信 号 , 转 换 为 具 体 的键 值 。具 体 的 8 5 并 0 1硬 件 代码可参考驱动程序的代码 。
维普资讯
l
t
Wi E 下的 S I n C P 键盘硬件及驱动程序设计
■ 华 北 电力 大 学 ( 定 ) 保 ■ 保 定 市 排 水 总 公 司
支l智 国 J
张 伟 丽
关键词
S I通 信 协 议 W iC P P nE DD 层
键 盘驱 动结 构分 为多 层 : 键盘 布局 管 理 器 和 当前平 台输
人语 言属 于 MDD层 , 本 基
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微 处 理 机M I CROPROCESS ORSW inCE 流驱动程序设计概述顾峥浩,王自强,聂文华(南京大学电子科学与工程系,南京210093) 摘 要:介绍了W inCE 操作系统下流驱动的设计方法,并在I ntel 公司的DBPXA255开发板下提供了关于8位数码管LED 的设计实例。
关键词:W inCE;流驱动;DBPXA255中图分类号:TP316.7 文献标识码:B 文章编号:1002-2279(2007)03-0081-03The D e s i gn o f S tream I n te rface D ri ve r fo r W i nC EG 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;DBPXA2551 引 言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 MS 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:0Prefix 的值代表设备的前缀名,用于标识与特定名称设备相关联的文件流访问接口,必须由三个大写字母组成。
在这里它的值为WAV ,那么设备的打开、关闭例程就为WAV_Open 和WAV_Cl ose 。
“D ll ”的值代表该设备驱动程序所在的动态库的名称,这里系统将在“wavedev.dll"中查找对作者简介:顾峥浩(1981-),男,江苏无锡人,硕士研究生,主研方向:W inCE 、L inux 下嵌入式开发及应用。
收稿日期:2005-03-02第3期2007年6月No .3Jun .,2007微 处 理 机W ave Dev 设备的操作例程。
“I ndex ”的值为索引值,用于区分流接口管理的设备。
同一个流接口可能会有超过一个的设备,这时就需要索引值来加以区分。
索引值跟在前缀后面,其值可以从1到9,第十个设备则用0代表。
这里,当调用CreateFile 函数打开此设备时,需要的文件名为”WAV1:”。
“O rder ”的值为该设备在引导期间的加载次序,为可选项。
2.4 流驱动设备概述流接口设备是以文件流的形式实现功能的设备。
对W inCE 系统而言,它是作为一个特殊文件存在的,用户可以通过文件操作函数如CreateFile 、ReadFile 、W riteFile 等来实现对设备的访问。
流驱动使用一个固定的流接口函数集,共10个函数,分别为XXX_I nit 、XXX _Deinit 、XXX _Open 、XXX _Cl ose 、XXX_Read 、XXX _W rite 、XXX _Seek 、XXX _I O Contr ol 以及可选的电源管理函数XXX _Power Up 、XXX _Po wer Down 。
其中XXX 为该设备在注册表中的Pre 2fix 值。
通过这些函数,驱动程序将操作系统对设备的文件操作重定向成该设备的I/O 操作,以实现对设备的控制和访问。
由此可见,此实现机制与L inux 操作系统的字符设备驱动有一定的相似之处。
2.5 ar m 系列下W inCE 的硬件I O 方式在ar m 系列平台中,W inCE 通过MMU 根据系统自带的OE MAddressTable 建立物理地址和虚拟地址之间的映射关系。
此后,系统就能通过虚拟地址的存取来间接访问硬件地址。
但是,OE MAddre 2ssTable 仅仅是将物理地址映射到系统的内核空间,即系统2G 以上的虚拟地址中,而处于用户空间的驱动程序无法对此进行直接访问。
这时,就需要使用V irtual A ll oc 函数在用户空间申请虚存,然后调用V irtual Copy 将内核空间的虚拟地址二次映射到本地用户空间中去。
然后,就能通过RE AD _REGI STER _ULONG 和WR I TE_REGI STER _ULONG 之类的宏进行硬件I O 存取了。
3 流驱动开发实例以下为在DBPXA255开发板下的一个简单流驱动实例。
DBPXA255中存在8个8位LED 数码管,可通过物理地址为0x0800_0040的控制寄存器和地址为0x0800_0010的数据寄存器来控制它们显示数字。
本实例的功能就是操作这两个寄存器,以实现对这8个LED 的操作。
通过该实例,可进一步了解W inCE 流驱动程序的设计方法。
此处限于篇幅,省略了介绍程序如何编译的Makefile 部分,读者可自行参阅W inCE 的帮助文档。
3.1 编辑注册表文件p latfor m.reg本实例使用的前缀名为LE D ,因此在该文件中添加信息如下:[HKEY _LOCAL _MACH I N E \D rivers \BuiltI n \LedDev\]"Prefix"="LE D ""D ll"="leddev .dll""I ndex"=dword:13.2 编辑p latfor m.bib 文件p latfor m.bib 文件的作用是将已知文件整合到内核镜像中去,只有这样,嵌入式设备运行时才能在本地系统中找到该文件。
因此,这里需要将驱动程序的动态库复制到内核中:leddev .dll $(_F LATRELE ASED I R )\leddev .dll NK SH其中NK 代表此文件将被复制到内核地址空间;SH 代表此文件为系统文件,且其属性为隐藏。
3.3 编写驱动程序3.3.1 初始化DWORD LED _I nit (LPCTST R pContext,LPCVO I D l pv Bus Context ){DWORD DevHandle =1;DE BUG MSG (1,(TEXT ("Now you are in the LE D _I nit ()\n")));LED_H W _I nit ();return DevHandle;}此函数在系统引导、设备初始化的时候被调用,其返回值为设备的上下文句柄,这里由于功能简单,因此并未使用该句柄,仅保证其返回值不为0。
DE 2BUG MSG 为一个宏,用于输出调试信息。
LED_H W _I N I T 为自定义函数,实现了具体硬件的初始化。
在这里,它主要是调用V irtual A ll oc 和V irtual Copy 两个函数将内核空间中关于LE D 寄存器的虚拟地址二次映射进本驱动的用户空间,以方便以后对这两个寄存器的访问。
同时,它还向LE D 控制寄存器写0,以打开LED 的电源。
3.3.2 逆初始化BOOL LED_Deinit (DWORD hDeviceContext ){DE BUG MSG (1,(TEXT ("Now you are in the LE D _Deinit ()\n")));LED_H W _DE I N I T ();return TRUE;・28・2007年 顾峥浩等:W inCE流驱动程序设计概述}此函数在卸载设备时调用,其传入参数h De2 viceContext为设备的打开句柄,即LED_I nit的返回值,此处并未使用。
LE D_H W_DE I N I T是自定义函数,功能为向LE D控制寄存器写入1,以关闭LE D 的电源,并调用V irtualFree释放在LE D_I nit函数中被分配的虚存空间。
3.3.3 设备打开DWORD LE D_Open(DWORD h DeviceContext, DWORD Access Code,DWORD Share Mode){DWORD OpenHandle=1;if(count==0)count++;elsereturn0;DE BUG MSG(1,(TEXT("Now you are in the LED_OPE N()\n")));return OpenHandle;}当应用程序使用CreateFile打开此设备时,就会调用此函数。