windriver
WinDriver 9.01 安装指南和使用说明
WinDriver 9.01 安装指南和使用说明第一部分 安装指南:1、双击名为keygen的图标,出现注册机的画面,见图1.1。
在User Name 下面的文本框中输入您自己的用户名(任意英文字母都可以)。
然后单击左下角的Generate按钮,可以在Your Serial下的文本框中看到生成的序列号。
选中这一串数字,复制(Ctrl+C)到剪切板中。
图1.12、双击名为windriverforwindows的图标,看到初始安装画面单击Next后看到关于License的说明单击I Agree后看到如图1.2所示画面。
图1.23、无需任何更改直接单击Next,看到图1.3所示画面。
图1.34、单击Browse选择要安装文件的目录后,单击Install。
程序进入自动安装状态,此时用户无需任何操作耐心等待安装完成后,出现如图1.4所示的画面。
图1.45、单击Finish图标。
此时可以看到图1.5所示的画面,同时桌面任务栏的右侧出现了黄色的警告三角及提示信息。
图1.56、单击上图中的Register Now图标,可以看到图1.6所示的画面。
图1.67、将刚才复制在剪切板中的数字粘贴到Please enter your license string下面的文本框中,单击文本框下面的Active license按钮,可以看到Current Active License下面出现了注册成功的提示信息。
单击OK即可完成注册,出现软件运行的起始画面了。
第二部分 使用说明:1、双击桌面上的图标打开WinDriver软件,每次打开软件都可以看到图2.1所示的对话框。
对于一个新的应用单击左面的New host driver project(新建一个主机驱动项目)就可以了。
如果用户已经建立了一个项目,请单击右面的Open an existing project(打开已经存在的项目)。
如果用户想在已经打开的软件中新建一个项目也可以单击工具栏左侧的图标按钮,同样会出现图 2.1所示的画面。
五分钟学会Windriver
选择硬件:• 从开始菜单里,选择WinDriver|Driver Wizard ,运行DriverWizard 程序。
DriverWizard 将会在你的机器上显示所有的即插即用设备。
• 对于即插即用设备: 从列表中选择你的硬件设备。
• 对于非即插即用设备: 从列表中选择 “ISA” (你的鼠标,键盘,内存等都是ISA 设备) 。
谁必须用WinDriver?1. 硬件开发者--用这个驱动程序向导来快速测试你的新硬件。
2. 软件开发者 --用这个驱动程序向导来 产生设备驱动代码驱动你的硬件。
用 WinDriver 工具来检测和调试你的驱动程序。
.WinDriver 支持哪个操作系统?1. WinDriver 现在支持 Windows 95, 98, NT, 2000, Windows CE, Linux, Solaris 和 VxWorks. 检查一下 RFTech网址看看在操作系统支持上是否有新的升级。
2. 利用WinDriver,你写一样的驱动程序将会运行在以上所有的平台上--只要重新编译即可运行。
学习WinDriver 的方式,请看 WinDriver 技术白皮书。
在哪获得更多深入的资料?1. 要想得到WinDriver 技术白皮书、更深入的资料和价值30天的免费使用,请看 KRFTech 网址:/dnload.html2. 完整的 WinDriver 指南可以从 /manuals.html 下载。
六步建立设备驱动程序:快速入门指南 安装:• 把硬件装置插入到PC机上 • 安装 WinDriver 。
PCI/ ISA 总线五分钟学会写设备驱动程序.检测 / 定义硬件:•Driver Wizard 将自动测试即插即用设备资源(I/O 范围, 内存范围以及中断)。
你可以手动定义寄存器。
•对于非即插即用设备: 你需要动定义硬件资源。
.. .BYTE MyCard_ReadStatusRegister (MyCard_HANDLE hMyCard){ BYTE data;MyCard_ReadWriteBlock(hMyCard, MyCard_StatusRegister_SPACE,MyCard_StatusRegister_OFFSET, &data, sizeof(BYTE), MyCard_MODE_BYTE);return data;测试硬件:在写驱动程序之前确信你的硬件工作正常是很重要的。
WinDriver教程
一、如何用windrive打开、关闭设备以及查看设备的信息1.所有有关的WD_API在安装后的相关目录下可以找到,建议打印出来,仔细看下。
2.打开、关闭设备与查看相应信息:HANDLE m_hPex;DWORD Bus,Slot,Fun,Interrupt;DWORD BaseAddrCS0,BaseAddrCS1,BaseAddrCS2,BaseAddrCS3;DWORD RangeAddrCS0,RangeAddrCS1,RangeAddrCS2,RangeAddrCS3;//打开设备:WD_LICENSE lic;m_hPex=WD_Open();if (m_hPex==INVALID_HANDLE_VALUE){str="INVALID_HANDLE_VALUE";}else{//重新注册wd,去除过期限制strcpy(lic.cLicense, "你的注册号");WD_License(m_hPex, &lic);}//检查WD版本WD_VERSION ver;BZERO(ver);WD_Version(m_hPex, &ver);if (ver.dwVer<WD_VER){str="Windriver Overdue";}WD_PCI_SCAN_CARDS pciScan;WD_PCI_SLOT pciSlot;BZERO(pciScan);//以PEX8311为例pciScan.searchId.dwVendorId = 0x10b5; pciScan.searchId.dwDeviceId = 0x86e1;WD_PciScanCards (m_hPex, &pciScan);if (pciScan.dwCards>0){pciSlot = pciScan.cardSlot[0];WD_PCI_CARD_INFO pciCardInfo;WD_CARD Card;BZERO(pciCardInfo);pciCardInfo.pciSlot = pciSlot;WD_PciGetCardInfo (m_hPex, &pciCardInfo);if (pciCardInfo.Card.dwItems!=0){Card = pciCardInfo.Card;}elsestr="Pcicard=0";}WD_CARD_REGISTER cardReg;//Card.Item[0]PC机基本端口操作//Card.Item[1]中断信息BZERO(cardReg);cardReg.Card = Card;cardReg.fCheckLockOnly = FALSE;WD_CardRegister(m_hPex,&cardReg);if (cardReg.hCard == 0){str="cardReg=0";}str="open successfully";//取得当前设备信息并显示Interrupt=Card.Item[1].I.Int.dwInterrupt);Bus=pciScan.cardSlot[0].dwBus;Slot=pciScan.cardSlot[0].dwSlot;Fun=pciScan.cardSlot[0].dwFunction;//CS0-CS3的地址映射信息BaseAddrCS0=Card.Item[2].I.Mem.dwPhysicalAddr;RangeAddrCS0=Card.Item[2].I.Mem.dwBytes;BaseAddrCS1=Card.Item[3].I.IO.dwAddr;RangeAddrCS1=Card.Item[3].I.Mem.dwBytes;BaseAddrCS2=Card.Item[4].I.Mem.dwPhysicalAddr;RangeAddrCS2=Card.Item[4].I.Mem.dwBytes;BaseAddrCS3=Card.Item[5].I.Mem.dwPhysicalAddr;RangeAddrCS3=Card.Item[5].I.Mem.dwBytes;else{str="Open Failed";WD_Close(m_hPex);}AfxMessageBox(str);注:Card.Item[0-5]就是DEVICE/IO/MEM映射的地方,这里得到的值和windrive wizard里看到的是一样的。
vxworks系统及函数详解
VxWork介绍及编程VxWork介绍及编程一.嵌入式操作系统VxWorks简介VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。
良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据一席之地。
它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。
在美国的F-16、FA-18 战斗机、B-2 隐形轰炸机和爱国者导弹上,甚至连1997年4月在火星表面登陆的火星探测器上也使用到了VxWorks。
实时操作系统和分时操作系统的区别从操作系统能否满足实时性要求来区分,可把操作系统分成分时操作系统和实时操作系统。
分时操作系统按照相等的时间片调度进程轮流运行,分时操作系统由调度程序自动计算进程的优先级,而不是由用户控制进程的优先级。
这样的系统无法实时响应外部异步事件。
实时操作系统能够在限定的时间内执行完所规定的功能,并能在限定的时间内对外部的异步事件作出响应。
分时系统主要应用于科学计算和一般实时性要求不高的场合。
实时性系统主要应用于过程控制、数据采集、通信、多媒体信息处理等对时间敏感的场合。
VxWorks的特点•可靠性操作系统的用户希望在一个工作稳定,可以信赖的环境中工作,所以操作系统的可靠性是用户首先要考虑的问题。
而稳定、可靠一直是VxWorks的一个突出优点。
自从对中国的销售解禁以来,VxWorks以其良好的可靠性在中国赢得了越来越多的用户。
•实时性实时性是指能够在限定时间内执行完规定的功能并对外部的异步事件作出响应的能力。
实时性的强弱是以完成规定功能和作出响应时间的长短来衡量的。
VxWorks 的实时性做得非常好,其系统本身的开销很小,进程调度、进程间通信、中断处理等系统公用程序精练而有效,它们造成的延迟很短。
用WinDriver编写设备驱动程序的几个问题
用 W iDrv r编 写 设 备 驱 动 程 序 的 几 个 问 题 n ie
马 捷 中
( 北 工 业 大 学 计 算 机 科 学 与工 程 系 西开发 widw 下 的驱 动程序 已成为 应用 系统 开发 的难 点 之 一 , n0s 因为 它 需要 熟悉 内部操 作 系统 和 D K编 程及 驱 动模 式 。 D
动程 序 。
关键 词
WiDie 设备 驱 动程序 多板 同机 nr r v
核心 编程
MaJe h n iz o g
( 刺 o o pt fC m u r e & 咖 , otws r o th u . i , i n 70 7 ) N r eenp t e  ̄ n  ̄ t X ' 10 2 h t yc y a
现在 可 以使 用 一 些驱 动开 发工具 如 WiDie 等 来编 程 , n r e 的 Wi r 直 接生 成用 户模 式下 的简 单 驱 动程 序 , 学 易懂 。本 nr r v " Di r Wi v z d可 a 易 文介 绍 了使 用 wi e 编写 驱 动程序 的 一些难 点 , 多板 同机 和核 心模 式编 程 等 , n vr D 如 在此 基础 上可 以编 写 实 用 的 Widw T设备 驱 no sN
st
—
7iDie 是 制 作 7i 59, T 下 的 驱 动 程 序 的 一 个 好 工  ̄ r r n v  ̄ 0 /8N r 具 。 它 支 持 I E S P IPu& l S A、 LA、C 、lg Pa y和 D A。 并 且 不 需 要 牵 涉 M 到 很 底 层 的 东 西 就 可 在 很 短 的 时 间 里 编 出 驱 动 程 序 。 使 用 Wi r e 的 优 点 是 : 发 者 并 不 需 要 熟 悉 任 何 内 部 操 作 系 统 或 n ir Dv 开 kre r r r n en l o - a g或 D K 及 任 何 驱 动 程 式 。 7iDi r 许 开 p ga i m D  ̄ re 允 n v 发 者 能在 自 己所 熟 悉 的 开 发 环 境 下 , 用 用 户 模 式 来 开 发 所 需 利 的 驱 动 程 序 , 使 用 VsaC C 如 i l/ ++、 ol d +B i e、 epi u B r n C+ ul rDlh 或 a d 任 何 Wi 2编 译 器 。 使 用 Wi r e 所 开 发 的 驱 动 程 序 均 可 用 n 3 n ir Dv 于 Widw X、 T 20 、 T E b de no s9 N /0 0 N m edd等 平 台 。
WinDriver教程
WinDriver 教程一、如何用windrive打开、关闭设备以及查看设备的信息1•所有有关的WD_API在安装后的相关U录下可以找到,建议打印出来,仔细看下。
2•打开、关闭设备与查看相应信息:HANDLE mJiPex;DWORD Bus, Slot, Fun, Interrupt;DWORD BaseAddrCSO, BaseAddrCSl, BaseAddrCS2, BaseAddrCS3:DWORD RangeAddrCSO, RangeAddrCSl, RangeAddrCS2, RangeAddrCSS:〃打开设备:WD_LICENSE lie:m_hPex=W_Open ();if (m_hPex==INVALID_HANDLE_VALUE) {str="INVALID_HANDLE_VALUE": }else//®新注册wd,去除过期限制strcpy(lic. cLicense,"你的注册号");W_License (m_hPex, &lic) ; }//检査WD版本WD_VERSION ver:BZERO(ver);ftT)_Version (m_hPex, &ver);if (ver. dwVer<ftT)_VER)str=^^Windriver Overdue";WD_PCI_SCAN_CARDS pciScan:WD_PCI_SLOT pciSlot:BZERO(pciScan);//以PEX8311为例pciScan. searchld. dwVendorld = 0xl0b5: pciScan. searchld. dwDeviceld = 0x86el: ftT)_PciScanCards (m_hPex, &pciScan) ; if (pciScan. dwCards>0)pciSlot = pciScan. cardSlotCO]:W_PCI_CARD_INFO pciCardInfo:W_CARD Card:BZERO(pciCardInfo);pciCardInfo. pciSlot = pciSlot:W_PciGetCardInfo (m_hPex, &pciCardInfo);if (pciCardInfo. Card. dwItems!=0)Card = pciCardInfo. Card:elsestir="Pcicard=O";WD_CARD_REGISTER cardReg://Card. Item[O]PC机基本端口操作//Card. ItemEl]中断信息BZERO(cardReg);cardReg. Card = Card:cardReg. fCheckLockOnly = FALSE:ftT)_CardRegister (m_hPex, &cardReg);if (cardReg. hCard == 0)str="cardReg=0";str=^open successfully";〃取得当前设备信息并显示Interrupt=Card. ItemEl]. 1. Int. dwinterrupt); Bus=pciScan. cardSlot[0]. dwBus:Slot=pciScan. cardSlot[0], dwSlot:Fun=pciScan. cardSlot[0]. dwFunction://CS0-CS3的地址映射信息BaseAddrCSO=Card. Item[2]. 1. Mem. dwPhysicalAddr:RangeAddrCSO=Card. Item[2]. 1. Mem. dwBytes:BaseAddrCSl=Card. Item[3]. 1. 10. dwAddr:RangeAddrCSl=Card. Item[3]. 1. Mem. dwBytes:BaseAddrCS2=Card. Item[4]. 1. Mem. dwPhysicalAddr:RangeAddrCS2=Card. Item[4]. 1. Mem. dwBytes:BaseAddrCS3=Card. Item[5]. 1. Mem. dwPhysicalAddr:RangeAddrCS3=Card. Item[5]・ I. Mem. dwBytes: elsestr=^Open Failed";W_Close (m_hPex);AfxMessageBox (str);注:Card. Item[0-5]就是DEVICE/IO/MEM映射的地方,这里得到的值和windrive wizard里看到的是一样的。
WinDriver_USB快速使用指南_11.0_
WinDriver 驱动程序开发工具快速使用指南五分钟教您如何撰写驱动程序WinDriver Version 11.0USBJungo 大中華代理商一、产品说明1. 谁需要使用WinDriver ?◎硬件研发人员:使用Driver Wizard即可快速测试您的新硬件◎软件研发人员:使用Driver Wizard即可产生出硬件驱动程序编码来驱动您的硬件,使用WinDriver程序工具即可测试以及除错您的驱动程序2. WinDriver支持哪些操作系统?◎Windows 8/ 7 / Vista / Server 2008 / Server 2003 / XP / 2000, WindowsCE (Windows Embedded Compact系列)4.x–7.x(包含Windows Mobile) Linux。
您可以从Jungo官网了解最新的支持操作系统◎Windriver所产生的驱动程序,可以不必修改任何代码,仅需重新编译即可支持上述的任一操作系统3. 我可以从哪里得到更深入的技术文件?◎WinDriver三十天免费,全功能测试版下载网址:/st/download.html◎欢迎从Jungo官网下载完整的WinDriver白皮书、使用手册、技术文件支持网址为/st/support/support_windriver.html二、使用WinDriver的七个步骤1.装置:a.接上您的USB设备b.安装WinDriver2.选择您的硬设备:a.开启DriverWizard:选择「Start」→「Programs」→「WinDriver」→「DriverWizard」(在Windows作业环境上)或者执行<Path to WinDriver>/wizard/wdwizard注:若您的操作系统是Windows 7 或者是Vista,您需要用管理员来驱动DriverWizardb.在窗口中点选「New host driver project」c.DriverWizard将会显示在您主机中所有即插即用的插卡,从清单中点选您的USB设备3.为您的设备进行下载INF档案( Windows ). 在Windows操作系统下,您需要先建立以及安装INF档案来注册您的USB设备以便使用WinDriver,若您未执行此动作,DriverWizard会提醒您需要安装INF档案。
VxWorks简介
➢ 完整且标准化的解决方案,提供了完整的移动IP支持,为新一代网络通讯设备提供了 包括LTE和WiMAX技术在内的4G或pre-4G能力
➢ 增加的多核处理器支持,包括i7、A9等 ➢ 对称多处理(SMP)性能改进和SMP内核资源预留
8
非对称多处理(AMP)增强功能,例如AMP自旋锁(spin lock)等,同时采用MIPC 2.0实现 了风河多操作系统内部进程通讯的重要升级,拥有了更高的性能阈值,为各种多核功能 打开了绿灯
降低功率消耗 multicore-aware工具
➢ 组态、建置、除错和模拟
强化4G网络能力,支持WiMAX和LTE (Long Term Evolution)应用
最新版本
7
2010年初的6.8通用平台VxWorks版本
➢ 提供了改进的操作系统原语(OS primitive)、USB支持和文件系统性能
全新的ARM小尺寸profile,能够构建更小内存需求的嵌入式应用 重要的开发工具生产效率改进,包括VxWorks内核Dump File与分析以及多内核和多操作
系统调试工具和用户工作流工具的改进等
9
2010年4月的VxWorks 653
➢ 面向安全关键级别,航空电子设备市场,如波音787 ➢ 基于Power Architecture架构(PowerPC)以及intel架构;严格的两级时间与空
3
两套系统
➢ VxWorks操作系统 ➢ Workbench开发环境
旧版:Tornado开发环境 Workbench版基于eclipse
Vxworks 特点
4
VxWorks 6.0
➢ 向后兼容,兼容5.X ➢ 存储保护技术 ➢ 基于标准流程的编程模式 ➢ 可根据客户需求定制的应用程序接口(API) ➢ 错误探测与报告机制 ➢ 可扩展的消息传递架构 ➢ 双模式Ipv6/Ipv4网络栈
WindRiver产品介绍
WindRiver产品介绍——Tornado集成开发工具介绍WindRiver公司的Tornado II开发平台极大地缩短了嵌入式开发者开发产品的时间。
Tornado II的一个部件——Tornado工具——包含了一个功能强大的核心套件和一些可选的交叉开发工具和组件。
Tornado II的其他集成部件包含VxWorks实时系统,一个在目标机处理器上执行的高性能的、可裁剪的实时操作系统和广泛的可选择的目标机到宿主机的通信连接。
Tornado II工具提供一个高度可视化和自动化的开发环境,加快了基于VxWorks的应用开发。
这样,不论对于初次使用还是有经验的开发者,使用Tornado II开发其应用是快速而简单的。
动态链接和加载Tornado允许开发者增量式地加载目标模块到目标系统。
动态链接和加载目标模块的能力作为Tornado结构的核心,使开发者避免了在宿主机上链接应用到内核,然后再下载整个可执行映像到一个静态环境的这样通常采用的步骤。
这样,就大大地缩短了每个编辑—测试—调试的周期。
此外,所有的模块都是共享的,而且在宿主机上不需要应用目标重新链接,这样可以调试、重新配置或增加目标模块到正在运行的VxWorks目标环境。
核心工具增强开发能力Tornado工具的一致性意味着所有的开发工具可以在任何开发阶段,在任何的目标系统资源支持下使用。
而且,整套Tornado开发工具不管目标机的连接策略(以太网、串口、仿真器或其它)或目标系统内存的大小如何对于开发者都是可获得的。
下面的开发和调试工具在每个Tornado工具包中都是可获得的。
应用开发的集成模拟器VxSim-Lite模拟器与其他核心Tornado工具是完全集成的,所以允许开发者立刻开始使用Tornado,而不依赖于BSP移植(如果需要的话)、操作系统配置和目标硬件。
通过集成模拟器,即使初次使用的用户在没有目标硬件的情况下也能够熟悉Tornado或各种可选的WindPower或第三方的工具,开始开发和调试代码。
利用windriver开发了个usb的驱动,写个开发心得
利用windriver开发了个usb的驱动,写个开发心得利用windriver 开发了个usb的驱动,写个开发心得项目组需要利用2440采集数字电视的采样数据,所以让我开发一个usb的数据采集系统,就两个要求1 速度要达到500kbyte/s以上2 稳定由于之前没有做过windows驱动的经验,所以花了3,4天时间读了读ddk的文档,期间还上chinapub找个本书,读了免费的第1章,按照他配置了vc的编译环境,呵呵。
然后就吧ddk下面的bulkusb源代码进行了修改,写好usb device的驱动,有些了个应用程序,测试一下,采集数据是ok了,但是发现有时候蓝屏,特别是采集100m左右,就会出现蓝品!这下没办法了,由于我本身就对windows内核编程不熟悉,有调试了大概3,4天确认问题可能处在电源管理方面,联系到自己对这方面不是很熟悉,而且时间紧迫,没办法转向windriver开发!我安装的是9.21版本(请到迅雷下载)。
1. 驱动的开发:a 这步开发比较简单,首先确认你的device固件正确能枚举成功,然后将device连接到pc usb ho st 端。
b 按照向导指引刷出你的设备进行配置,然后点击编译按钮生成代码。
这部分内容请参考安装文档的快速开发向导!2.应用程序开发:最主要的几个函数是,opendevice 和readwrite 函数:其实大家只要摘录向导生成代码的内容即可,这里贴一个我的static WDU_DRIVER_HANDLE hDriver = 0;static DRIVER_CONTEXT DrvCtx ;static BOOL DLLCALLCONVDeviceAttach(WDU_DEVICE_HANDLE hDevice,WDU_DEVICE *pDeviceInfo, PVOID pUserData){DRIVER_CONTEXT *pDrvCtx = (DRIVER_CONTEXT *)pUserData;DEVICE_CONTEXT *pDevCtx, **ppDevCtx;DWORD dwInterfaceNum = pDeviceInfo->pActiveInterface[0]->pActiveAltSetting->Descript or.bInterf aceNumber;DWORD dwAlternateSetting = pDeviceInfo->pActiveInterface[0]->pActiveAltSetting->Descript or.bAlt ernateSetting;TRACE("\nDeviceAttach: received and accepted attach for vendor id 0x%x, ""product id 0x%x, interface %ld, device handle 0x%p\n",pDeviceInfo->Descriptor.idVendor,pDeviceInfo->Descriptor.idProduct,dwInterfaceNum, hDevice);/* Add our device to the device list */pDevCtx = (DEVICE_CONTEXT *)malloc(sizeof(DEVICE_CONTEXT));if (!pDevCtx){ERR("DeviceAttach: failed allocating memory\n");return FALSE;}BZERO(*pDevCtx);pDevCtx->hDevice = hDevice;pDevCtx->dwInterfaceNum = dwInterfaceNum;pDevCtx->dwVendorId = pDeviceInfo->Descriptor.idVendor;pDevCtx->dwProductId = pDeviceInfo->Descriptor.idProduct;pDevCtx->dwAlternateSetting = dwAlternateSetting;OsMutexLock(pDrvCtx->hMutex);for (ppDevCtx = &pDrvCtx->deviceContextList; *ppDevCtx;ppDevCtx = &((*ppDevCtx)->pNext));*ppDevCtx = pDevCtx;pDrvCtx->dwDeviceCount++;OsMutexUnlock(pDrvCtx->hMutex);OsEventSignal(pDrvCtx->hEvent);/* Accept control over this device */return TRUE;}static VOID DLLCALLCONV DeviceDetach(WDU_DEVICE_HANDLE hDevice, PVOID pUserData) {DRIVER_CONTEXT *pDrvCtx = (DRIVER_CONTEXT *)pUserData;DEVICE_CONTEXT **pCur;DEVICE_CONTEXT *pTmpDev;BOOL bDetachActiveDev = FALSE;TRACE("\nDeviceDetach: received detach for device handle 0x%p\n", hDevice);OsMutexLock(pDrvCtx->hMutex);for (pCur = &pDrvCtx->deviceContextList;*pCur && (*pCur)->hDevice != hDevice;pCur = &((*pCur)->pNext));if (*pCur == pDrvCtx->pActiveDev){pDrvCtx->pActiveDev = NULL;pTmpDev = *pCur;*pCur = pTmpDev->pNext;free(pTmpDev);pDrvCtx->dwDeviceCount--;OsMutexUnlock(pDrvCtx->hMutex);if (bDetachActiveDev){/* When hDeviceUnusedEvent is not signaled, hDevice is possibly in use,* and therefore the detach callback needs to wait on it until it is* certain that it cannot be used.* When it is signaled - hDevice is no longer used. */OsEventWait(pDrvCtx->hDeviceUnusedEvent, INFINITE);}}DWORD DriverInit(WDU_MATCH_TABLE *pMatchTables, DWORD dwNumMatchTables, const PCHAR sDriverName, const PCHAR sLicense, DRIVER_CONTEXT *pDrvCtx) {DWORD dwError;WDU_EVENT_TABLE eventTable;/* Set Driver Name */if (!WD_DriverName(sDriverName))ERR("Error: Could not set driver name to %s, exiting\n",sDriverName);return WD_SYSTEM_INTERNAL_ERROR;}dwError = OsEventCreate(&pDrvCtx->hEvent);if (dwError)ERR("DriverInit: OsEventCreate() failed on event 0x%p: error 0x%lx " "(\"%s\")\n", pDrvCtx->hEvent, dwError, Stat2Str(dwError));return dwError;}dwError = OsMutexCreate(&pDrvCtx->hMutex);if (dwError){ERR("DriverInit: OsMutexCreate() failed on mutex 0x%p: error 0x%lx " "(\"%s\")\n", pDrvCtx->hMutex, dwError, Stat2Str(dwError));return dwError;}dwError = OsEventCreate(&pDrvCtx->hDeviceUnusedEvent);if (dwError){ERR("DriverInit: OsEventCreate() failed on event 0x%p: error 0x%lx " "(\"%s\")\n", pDrvCtx->hDeviceUnusedEvent, dwError, Stat2Str(dwError));return dwError;OsEventSignal(pDrvCtx->hDeviceUnusedEvent);BZERO(eventTable);eventTable.pfDeviceAttach = DeviceAttach;eventTable.pfDeviceDetach = DeviceDetach;eventTable.pUserData = pDrvCtx;dwError = WDU_Init(&hDriver, pMatchTables, dwNumMatchTables, &eventTabl e, sLicense, WD_ACKNOWLEDGE);if (dwError)ERR("DriverInit: failed to initialize USB driver: error 0x%lx ""(\"%s\")\n", dwError, Stat2Str(dwError));return dwError;}return WD_STATUS_SUCCESS;}VOID DriverUninit(DRIVER_CONTEXT *pDrvCtx){DEVICE_CONTEXT *pCur, *pTmpDev;if (pDrvCtx->hEvent)OsEventClose(pDrvCtx->hEvent);if (pDrvCtx->hMutex)OsMutexClose(pDrvCtx->hMutex);if (pDrvCtx->hDeviceUnusedEvent)if (hDriver)WDU_Uninit(hDriver);/* Release any remaining devices */ pCur = pDrvCtx->deviceContextList; while (pCur){pTmpDev = pCur;pCur = pCur->pNext;free(pTmpDev);}}DWORD OpenUsbDevice( void){DWORD dwError;WORD wVendorId = 0;WORD wProductId = 0;WDU_MATCH_TABLE matchTable; BZERO(DrvCtx);wVendorId = USE_DEFAULT;wProductId = USE_DEFAULT;/* use defaults */if (wVendorId == USE_DEFAULT)if (wProductId == USE_DEFAULT)wProductId = DEFAULT_PRODUCT_ID;BZERO(matchTable);matchTable.wVendorId = wVendorId;matchTable.wProductId = wProductId;dwError = DriverInit(&matchTable, 1, DEFAULT_DRIVER_NAME,DEFAULT_LICENSE_STRING, &DrvCtx);if (dwError){goto Exit;}/* Wait for the device to be attached */dwError = OsEventWait(DrvCtx.hEvent, ATTACH_EVENT_TIMEOUT); if (dwError){if (dwError==WD_TIME_OUT_EXPIRED){ERR("Timeout expired for connection with the device.\n""Check that the device is connected and try again.\n");}else{ERR("main: OsEventWait() failed on event 0x%p: error 0x%lx " "(\"%s\")\n", DrvCtx.hEvent, dwError, Stat2Str(dwError));}goto Exit;OsMutexLock(DrvCtx.hMutex);if (!DrvCtx.dwDeviceCount){OsMutexUnlock(DrvCtx.hMutex);return 1;}OsMutexUnlock(DrvCtx.hMutex);if (!DrvCtx.pActiveDev)DrvCtx.pActiveDev = DrvCtx.deviceContextList; OsEventReset(DrvCtx.hDeviceUnusedEvent);return 0 ;Exit:DriverUninit(&DrvCtx);return dwError;}void CloseUsbDevice( void){DriverUninit(&DrvCtx);}DWORD UsbRead(char *pBuffer , DWORD dwBufferSize , PDWORD pdwBytesTransferred){DWORD dwError ;WDU_DEVICE_HANDLE hDevice;OsMutexLock(DrvCtx.hMutex);hDevice = DrvCtx.pActiveDev->hDevice;OsMutexUnlock(DrvCtx.hMutex);dwError = WDU_TransferBulk(hDevice, 0x81,TRUE, 0, pBuffer,dwBufferSize,pdwBytesTransferred, TRANSFER_TIMEOUT);return dwError ;}3.驱动程序的发布:这个也比较简单,请参考自带文档usb manual 的11章节,其实就是用到了他的一个wdreg工具,我写了个批处理文件,想安装的直接点批处理即可!windriver开发驱动是比较方便,至于稳定性,现在正在测试,看来比较稳定!速度方面500kB是没问题!不过速度方面pc驱动固然有影响,device的firmware影响也是很大的,特别是双缓冲的ep,处理不当速度很难上去!。
风河系统公司(Wind River)
风河系统公司(Wind River)
设备软件优化(DSO)厂商风河系统公司(Wind River)日前宣布,将与Intel共同推广优化的嵌入式多核开发解决方案,具体包括研发、营销、技术服务和工程项目资源等方面的合作。
此次合作将首先面向航空与国防、网络基础设备、工业自动化、医疗影像等市场来推进。
此次合作将实施多项市场计划来推进嵌入式开发技术向多核架构的迁移,主要围绕以下四个方面:
专门针对嵌入式Intel处理器架构,优化Wind River VxWorks和Wind River Linux;
专门针对嵌入式Intel处理器架构,优化风河hypervisor技术,特别是充分发挥Intel VirtualizaTIon(VT)技术的全部潜能;
提升多核设备分析和性能调优开发工具的互操作性;
将Intel编译器和peRFormance primiTIves集成进入Wind River面向Intel处理器的多核软件平台。
风河公司首席市场官John Bruggeman表示:“由于软件和硬件厂商缺乏更高层次的合作,多核技术的发展和应用步伐已经遇到阻力。
风河和Intel 两家业界领先厂商已经走到一起,共同解决多核处理器软件开发应用中所遇。
windriver vx安装教程
windriver vx安装教程
驱动安装不成功主要原因: WIN7 64位系统对旧的硬件有80%的都不支持的。
XX总结以下5种方法可以在WIN7 64位系统安装成功的驱动安装方法。
如果你看视频后安装不成功,建议你换成WINXP或WIN732位系统,因为后面的几种方法需要请电脑专业人员才能搞明白如何安装的。
第1种方法,看XX视频配套光碟的安装方法。
本方法比较简单,一般正常无毒的WIN764位系统都可以用,只要你看着视频一步一步做OK了,过别电脑安装不成功的还可以参考后面的4种方法。
看视频之前,请大家看下面的图片关掉UAC,谢谢,认真- -点看一看(学单片机的基本功,做事不认真是学不会单片机的)。
win7如何关闭uac。
如何关闭Windows7 UAC?二种方法进入“UAC 设置界面”:
方法1:开始- >控制面板- >查看方式:大图标- >操作中心- +更改用户账户控制设置- >把滑块
移到最下面。
方法2:“开始"菜单-→点击“账户名称头像图标”- >更改用户账户控制设置- >把滑块移到最下面。
调出UAC界面后,只要把滑块拉到最下面,即把UAC功能关闭了,重新启动计算机后生效!。
windriver的pcie通信实例
windriver的pcie通信实例WindRiver是一个实时操作系统(RTOS)和嵌入式开发工具的供应商,它提供了用于嵌入式系统开发的工具和平台。
PCIe(Peripheral Component Interconnect Express)是一种高速串行总线标准,通常用于连接计算机内部的各种硬件设备,如显卡、存储控制器等。
在WindRiver环境中进行PCIe通信的示例需要考虑特定的硬件和系统配置,但以下是一个通用示例,演示如何在WindRiver环境中使用PCIe进行简单的通信。
请注意,以下示例仅用于演示目的,具体的硬件和驱动程序可能需要特定的配置和设置。
硬件准备:在WindRiver系统中,确保您的计算机或嵌入式系统具有PCIe 插槽,并且已连接PCIe设备,例如PCIe扩展卡。
安装和配置驱动程序:确保PCIe设备的驱动程序已经正确安装和配置。
这通常涉及加载相应的内核模块或驱动程序。
编写应用程序:创建一个WindRiver应用程序,用于与PCIe设备进行通信。
您需要使用WindRiver支持的编程语言(通常是C/C++)编写应用程序。
在应用程序中,您需要打开PCIe设备,发送和接收数据,以及执行其他PCIe相关的操作。
下面是一个简化的示例,演示如何使用C/C++编写一个WindRiver应用程序,以向PCIe设备发送数据:#include <stdio.h>#include <fcntl.h>#include <unistd.h>int main() {int fd;char data[] = "Hello, PCIe Device!";// 打开PCIe设备文件fd = open("/dev/pcie_device", O_RDWR);if (fd < 0) {perror("无法打开PCIe设备");return -1;}// 向PCIe设备发送数据write(fd, data, sizeof(data));// 关闭PCIe设备文件close(fd);return 0;}编译和运行:使用WindRiver编译工具编译您的应用程序,然后在WindRiver 环境中运行它。
Wind River VxWorks支援风力发电企业开发新一代控
Wind River VxWorks 支援风力发电企业开发新一代控全球嵌入式及行动应用软体厂商美商温瑞尔(Wind River)近日宣眩风力发电设备自动化产业领导者Bachmann 公司将裼VxWorks 即时作业系统与Wind River 专业服务为其新一代控制器系统添翼助航。
Bachmann 公司新一代系统名为M1 控制器系统,它以VxWorks 为标驶基础,其中包含了数位量和类比量I / O 系统模组、网路连接模组、现场总线模组、安全模组和处理器模组。
M1 系统主要被运用于风力涡轮机,但也可应用于各种对安全性和可靠性需求较高的智慧型设备。
M1 系统基于开放标剩具有高灵活性和可配置性的特点,可以满足使用者的特定需求。
有了VxWorks 的帮助,Bachmann 在端到端流程上有了突破。
而且,Bachmann 还在VxWorks 基础上开发了基于开放标实Run-Time 平_,这有助于在降低系统运行风险的同时实现集中化、整合化并有效地管理复杂度。
Wind River 充分利用开放标实牧榛钚院统杀拘б妫帮助企业满足了严格的即时确定性机制要求。
Bachmann 公司研发与自动化部门主管Martin Greif 表示:?在Wind River 的支援下,我们拥有了一个强大的基础,它不仅具备作业系统无关透明性,而且具备出色的安全可靠性,还带有丰富的中介软体集,构成了针对特定产业的预整合化平_。
不仅如此,Wind River 还为独立软体厂商(ISV)提供了产业生态共生体系和服务实践,帮助我们加快解决方案的建立和定制。
?Wind River 公司工业解决方案部门总监Alexander Damisch 说:?设备的扩展逐渐超越传统的嵌入式畴,进入智慧化阶段,我们的用户要在符合成本效益的前提下找到安全可靠的解决方案,并在低营运成本环境中保证产品上市时间,这是新的产业挑战。
Wind River 为Bachmann 公司提供的一套包括产品、服。
Windriver学习教程
WinDriver使用指南 Windriver是Jungo公司为驱动程序开发提供的一个工具,特别适合于初学者使用。
它把PC硬件系统的驱动程序开发进行了高度的集成和封装,开发者甚至不需要设计驱动程序,所需要做的工作几乎仅仅是保证设备的硬件和相应固件设计正确,然后进行应用程序的设计,而应用程序的设计也可以通过对Windriver产生的debug程序进行修改而得到。
有人认为使用Windriver开发驱动程序远远不够专业,这样看有一定道理,因为使用Windriver使开发者可以完全不用直接接触到PC操作系统对硬件设备操作的核心部分,还存在效率和灵活性等问题。
但是若要求每个初学者一接触到驱动程序设计就从专业开发的角度去考虑,显然是不切实际的,从易到难,在使用Windriver对驱动程序开发有了一定认识之后再去使用更专业的工具是一条非常务实的开发之路,而且,即使是对专业的开发者,Windriver仍然是一个很好且易用的调试工具。
下面对Windriver的使用做一个概括的介绍,以Windriver5.03版,Win2000系统,接口工作室(Interface Studio)的PDIUSBD12 USB开发板的调试为例。
关于Windriver的安装,和大多数软件的安装方法没什么区别,这里就不再敖述了。
假定PDIUSBD12 USB开发板的固件事先已经是设计正确(最低是已经能够正确完成枚举过程),将USB开发板的USB电缆连接主机。
1.启动Windriver,如下图所示。
图1 启动Windriver2.首先出现的是Windriver的欢迎界面,简要描述了Windriver的功能和开发步骤。
如图2所示。
图2 Windriver欢迎界面3.点击OK后出现了Windriver的主界面和一个对话框,如图3所示。
假设我们要设计一个新的驱动程序,直接点击OK。
图3 Windriver主界面4.接下来会在主界面前面出现一个Card Information对话框,显示了Windriver在本机上检测到的硬件设备,点击某一项,会在下面的文字框中显示该项的简要信息。
基于WinDriver的多路串行设备驱动开发
5510.3969/j.issn.1000-0755.2014.05.0140 引言XR17D158是在工业控制计算机中被广泛使用的一种PCI 转8路UART 接口芯片。
本文首先介绍Window 操作系统驱动程序和开发工具WinDriver 软件,并通过该软件完成XR17D158在Windows 系统下驱动程序的开发。
并以此为基础,提出了一种利用WinDriver 工具开发PCI 总线设备驱动程序的软件架构。
1 Windows 操作系统驱动开发Windows 操作系统以其友好的用户图形界面和强大的功能在工业控制计算机领域广泛使用。
但是Windows 对系统底层操作进行了屏蔽,限制应用程序直接访问硬件资源,应用程序需要调用设备的驱动程序访问硬件资源,而开发Windows 环境下的驱动程序,需要对操作系统内核的运行机制有深入的了解。
美国Jungo 公司的WinDriver 驱动程序工具包使程序设计人员不需要掌握Windows 操作系统内核的相关内容,只需要调用WinDriver 提供的接口函数就可以直接访问系统硬件资源,减轻了设计人员的开发难度。
WinDriver 同时支持PCI/CardBus/ISA/ISA PnP/EISA/CompactPCI 和USB 等多种总线结构。
基于WinDriver的多路串行设备驱动开发冯 毅(中航工业第631研究所,陕西 西安)摘 要:工业控制计算机中广泛使用串行接口UART 与外围设备进行通信,同时,Windows 操作系统以其友好的UI 界面被广泛采用。
文中阐述了UART 设备的工作原理,并利用Jungo 公司的WinDriver 软件实现了Windows 操作系统下一种PCI 转多路UART 设备的驱动开发。
关键词:WinDriver ;PCI 转UART ;驱动程序Development of Multi-channels UART Device Driver Based on WinDriverFeng Yi(Aeronautics Computing Technique Research Institute, A VIC, Xi'an, Shaanxi)Abstract: Universal Asynchronous Receiver and Transmitter (UART) device is widely used to carry out communications with peripheral device applied in industry control computers. Meanwhile, Windows operating system is widely used because of its friendly Use Interface (UI). This article introduces the working principle of UART device, and uses device, WinDriver software from Jungo to implement the driver development of a device which converts from PCI to UART..Key words: WinDriver; PCI to UART Device; driver programWinDriver 驱动程序的体系结构如图1所示。
windriver的license序列
windriver的license序列Windriver License SequenceWindriver是一家专注于提供嵌入式系统开发工具和服务的公司,其产品广泛应用于汽车、航空航天、国防、通信等领域。
为了保护公司的知识产权和客户的合法权益,Windriver的软件产品需要授权许可才能使用。
一、Windriver License序列的特点Windriver的License序列是其授权许可的一种表现形式,具有以下几个特点:1.唯一性:每个License序列都是唯一的,每个客户只能获得一个与其购买的产品相对应的License序列。
2.合法性:所有的License序列都是经过Windriver正式授权,具有法律效应。
3.可追溯性:每个License序列都有相应的购买记录和授权信息,方便客户进行追溯和管理。
4.安全性:Windriver的License序列采用了加密技术,防止未经授权的访问和使用。
二、如何获取Windriver License序列客户可以通过Windriver的官方网站或授权渠道购买其产品,并在购买过程中提供相应的信息以获得License序列。
客户在获得License序列后,需要将其与相应的软件产品进行关联,以便进行合法使用。
三、使用Windriver License序列的注意事项在使用Windriver License序列时,客户需要注意以下几点:1.遵守许可协议:客户需要仔细阅读并遵守Windriver的许可协议,确保其使用行为符合协议规定。
2.保护License序列:客户需要妥善保管其License序列,防止未经授权的复制、传播和使用。
3.定期更新:为了确保软件的正常运行和安全性,客户需要定期更新其License序列。
4.合规性:客户在使用Windriver产品时需要遵守相关法律法规和行业标准,确保其行为合规。
Newtec与WindRiver协作研发5G卫星通信方案,实现网络编排、虚拟化和网络切片是关键
Newtec与WindRiver协作研发5G卫星通信方案,实现网络编排、虚拟化和网络切片是关键2月22日,卫星通信设备与技术研发和生产公司Newtec宣布将与Winder River协作,利用其Titanium云虚拟化平台开发5G解决方案,推动了5G卫星通信市场的创新。
3GPP已定义了一种基于服务的体系结构,其中灵活性和动态调整是满足性能和成本需求的关键驱动因素。
该体系结构定义了可以由其他服务触发的网络功能,利用了虚拟化和网络切片。
Wind River完备的网络功能虚拟化(NFV)软件平台基础设施将帮助Newtec Dialog 多业务平台超越这些5G需求。
Titanium云平台提供了成功构建和部署运行多个虚拟机的虚拟网络所需的特性。
Newtec产品管理副总裁表示,NFV有望提供更低成本的、高度灵活可伸缩的基础设施,同时使客户能够在全世界任意地方都能获得更好的服务。
Newtec的Dialog多业务平台与Wind River的Titanium云平台相结合,将使客户和业务提供商能够快速扩增/缩减业务,应对不断变化的需求;还可以简化体系结构,增强对5G而言至关重要的伸缩性。
Titanium云平台将用于Newtec新的5G卫星基础设施解决方案中。
Titanium云具有服务可靠性高、超低延迟和低成本部署等特点,对实现可扩展的卫星通信基础设施非常关键。
Newtec已经和欧洲航天局(ESA)和多个业内公司签署了一项联合声明,开展试验演示卫星通信在5G环境下的使用,实现卫星通信与5G的集成和互通。
将演示使用卫星实现的相关功能、性能和收益。
第一阶段是利用现有的空间和地面段资产,并尝试利用最新发展,包括新的LEO和MEO星座。
卫星5G的许多用例需要与地面移动网络紧密协作,而NFV/SDN 技术正成为地面移动网络的关键技术,卫星体系架构也必须要利用网络编排、虚拟化和切片功能,提供真正的无缝连接服务。
将Wind River的Titanium云平台整合到其产品中是Newtec在5G领域迈出的又一步。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于WinDriver的ARINC429总线接口板卡驱动程序设计2008-11-4 11:50:00易小青王倩栾春旭供稿摘要:WinDriver是一套功能强大的驱动程序开发包,使用WinDriver开发Windows下的驱动程序不需要熟悉DDK编程及驱动模式,可以简化开发设备驱动程序的过程,缩短开发周期。
本文在介绍一种ARINC429 总线接口板卡体系结构的基础上阐述了利用WinDriver开发设备驱动的步骤和方法。
关键字:WinDriver; ARINC429; 设备驱动程序Design of device driver for ARINC-429 bus interface card using WinDriver kitYi Xiaoqing,Wang Qian,Luan ChunxuAbstracts: Design of device driver for ARINC-429 bus interface card using WinDriver kit WinDriver device driver toolkit has powerful function. Using WinDriver to develop the driver under Windows not to need to be familiar with the DDK programming and the actuation pattern . It can also predi gest the process of developing of device driver and reduce the development cycle. This paper introd uces the steps and methods of developing device drive with WinDriver on the basis of the architectu re of ARINC-429 bus interface card.Keywords: WinDriver; ARINC429; Device driver programming0 引言在现代军、民用飞机上,系统间需要传输大量信息。
随着数字技术的发展和微型电子计算机的出现,越来越多的航空电子设备已采用了数字化技术。
美国航空无线电公司(ARINC)制定的ANINC429 数字信息传输规范成为在航空电子设备之间传输数字信息的航空运输工业标准。
该标准克服了模拟传输所导致的成本高、传输线多、可靠性差的缺点,提高了信息传输精度。
针对实现ARINC429数据传输的总线接口板研究已经有很多,但在设计完硬件电路后,直接面临的一个大问题便是开发其驱动程序。
如何在涉及较少系统内核知识的前提下快速开发出高质量、高可靠性的驱动程序是是迫切要解决的问题。
美国Jungo公司的WinDriver开发包因其简洁高效、不涉及操作系统底层编程且有很好的兼容性成为编写驱动程序的一种好工具,本文将给出基于WinDriver用户模式的ARINC429总线接口板卡驱动程序的设计方法。
1 ANINC429总线接口卡结构设计1.1 ARINC429规范概述ARINC429总线是美国航空无线电公司(ARINC)制定的民用航空数字总线传输标准,规定了使用该总线的航空电子设备的信息量流向ARINC429基本数据字的格式。
ARINC429是一种单向广播式数据总线,传输介质由双绞屏蔽电缆组成。
ARINC429 数字信息传输规范阐述了通过一对屏蔽双绞线(数字数据总线)从一个端口向其它系统和设备以串行方式传输数字数据信息的方法。
信息传送的速率是:高速传输的位速率为100Kb/s±1%,低速传输的位速率为12. 0~14.5Kb/s±1%。
ARINC429规定数据传输采用双极性归零码(如图1所示),即调制信号由“高”、“零”和“低”状态组成。
双极性归零码的基本信号波形中携带了位同步信息,位同步是由零状态变至“高”或“低”状态的这一状态变化来识别。
字同步是以传输周期间至少四位的时间间隔为基准,紧跟该字间隔后要发送的第一位起点即为新字的起点。
图2所示为一个ARINC429数据字格式。
图1 ARINC429数字信息传输格式图2 ARINC429数字字格式1.2ARINC429通信模块原理本ARINC429数据总线通信模块的主要功能有:完成两路ARINC429接收数据的串并转换和并串转换;支持中断方式、查询方式接收发送数据从ARINC429数据总线的通信协议出发,机载设备之间通信或与检测设备通信首先应通过一个发送器发送数据,把这些数据转换为符合ARINC429数据总线规范的数据在数据总线上传输,到了目标设备时又通过它的接收器把这些数据转化为设备能识别的数据格式。
1.3 一种ARINC429总线接口卡结构设计本文介绍的插卡采用CPLD技术,可实现两路PXI总线与ARINC429总线的通讯,且基于可编程芯片的特点,还可扩展为多路接收与发送,电路简单、器件少、可靠性高。
硬件电路总体分为了四个部分:(1) CPCI/PXI接口芯片;(2) CPLD芯片;(3) FIFO芯片;(4)电平转换电路。
其基本框图如图3所示,该模块可完成两路ARIN C429数据发送、接收,支持12.5K,25K,50K,100K四种传输速率,支持中断方式、查询方式接收、发送数据。
2 基于WinDriver的ARINC429总线接口卡驱动程序设计2.1WinDriver开发工具概述WinDriver是美国Jungo公司出品的、用于编写硬件驱动程序的一种工具软件,主要针对ISA插卡、PCI插卡和USB这些硬件的设备驱动程序进行开发。
通过运行DriverWizard能为插卡产生基本的驱动程序框架,具备设备检测、配置寄存器读写、自定义寄存器读写、I/O和Memory空间访问等功能。
使用自己熟悉的编译器和编程语言添加代码,便能得到满意的设备驱动。
因为Windriver把所有繁杂的底层操作都封装在一个内核模块中,而提供给用户标准的Windriver API 函数来实现硬件访问。
如此将驱动开发的繁杂工作变成了仅仅是调用硬件操作的标准API函数,大大简化了驱动开发者的工作,加快了开发周期。
2.2基于WinDriver的ARINC429驱动程序设计WinDriver编程有两种模式,一种是用户模式,这种模式利用软件自身提供的驱动程序Windrvr.vxd和Wind rvr.sys,用户所面对的是驱动程序给出的用高级语言封装好的相应功能接口,不需要对操作系统内核了解太多。
另一种模式是核心插入用KernelPlugIn方式进行编程,是真正意义上的驱动程序,该模式适宜于用户对速度有特殊要求的情况。
在本文中采用用户模式。
以本文设计的ARINC429卡为例,利用WinDriver8.01版开发驱动样本包括以下步骤:1)安装、配置插卡到PC机;2)运行Driver Wizard,在设备列表中选择显示插卡名的一项,运行“Generate.INF file”选项为该设备命名为A429,则会产生A429.INF文件;3)继续运行Driver Wizard,选择VC编译环境产生驱动样本;4)用产生的.INF文件,按常规步骤安装硬件驱动,由Windriver提供的内核文件接管设备;5)在开发环境中,移植驱动样本中的API函数代码,编写具体的功能代码,建立用户模式的驱动程序;6)打包发布驱动程序。
WinDriver的驱动样本产生两个重要文件:A429_lib.c和A429_diag.c。
前者是设备的应用程序级API函数文件,用户可以直接调用这些标准API函数实现对硬件的操作和访问,属于用户模式的驱动程序。
后者是利用上述A PI函数访问硬件的样本程序文件(控制台程序),通过对该文件的分析可以学到如何调用API函数编写简单的驱动程序。
结合两个文件分析后得出如下几个函数非常重要:1) DeviceFindAndOpen (),获得驱动程序(指Windrvr.vxd或Windrvr.sys)的句柄,在驱动程序开始时必须调用。
2) DeviceClose (),释放驱动程的句柄,在程序结束时调用。
3) DiagIntHandler(),中断处理函数,用户加代码实现当中断信号到来时,对硬件的控制处理。
4) A429_IntEnable(),中断使能,以DiagIntHandler作为参数调用该函数后才能进入到对中断进行处理的函数。
5) A429_IntDisable(),中断无效函数,屏蔽中断信号。
6) WDC_WriteAddr32(),按照参数中给的地址,往寄存器中写数。
7) WDC_ReadAddr32(),从寄存器中读数。
本驱动软件为在Windows2000系统平台下基于WinDriver采用VC语言编制的驱动软件的DLL动态库,主要完成初始化和数据的收发功能,并检验数据的正确性。
具体功能有输入端口选择、发送/接受FIFO复位、数据传输率设定与获得、奇偶校验设置与获得、发数据前判断发送FIFO是否空及收数据前判断接受FIFO中是否有数等。
要实现这些功能需要导入文件A429_lib.c并结合硬件设计的定义适当调用上述7个函数并封装将能实现这些功能的函数作为导出函数供测试程序直接调用。
下面是设计的函数与其功能的对应关系1) void*A429_Open(),对DeviceFindAndOpen()的封装,获得驱动程序的句柄。
2) int A429_Close(void*hDev),以上面函数返回的句柄作为参数,退出驱动程序。
3) void A429_SetCheck(BYTE chan, BYTE check),chan:通道号,根据chan的值设置对应端口的校验值保存在变量check中。
4) void A429_SetSpeed(BYTE chan,BYTE boud),设置对应端口的数据发送速率,保存在变量boud 中。
5) void A429_ResetSendChan(BYTE chan),将chan对应的发送端口复位。
实现代码即是调用WDC _WriteAddr32(),其地址参数值根据硬件设计的定义传递。
6) void A429_ResetReceiChan(BYTE chan),复位与chan对应的接收端口。
7) void A429_ResetAll(),对所有发送和接受端口复位。
8) BYTE A429_SendChanIsBusy(BYTE chan),检查与参数值对应的发送端口是否忙,返回值为0代表空闲状态,为1则忙。