什么是WDM?

什么是WDM?,第1张

1根光纤上承载多个波长(信道)系统。

WDM是在1根光纤上承载多个波长(信道)系统,将1根光纤转换为多条“虚拟慧游”纤,当然每条虚拟纤独卜则立工作在不同波长上,这样极大地前弊销提高了光纤的传输容量。由于WDM系统技术的经济性与有效性,使之成为当前光纤通信网络扩容的主要手段。

WinCE系统在驱动设计上有一个很方便的功能,就是原始设备制造商(OEMs)和独立硬件开发商(IHVs)可以自主开发设备驱动程序来支持他们的硬件。因此,在动手进行触摸屏驱动程序开发之前,深入了解WinCE系统驱动方式是非常有必要的。

(1)从驱动加载方式上的分类

要编写WinCE驱动程序首先要确定它是属于哪类驱动。一般来说,WinCE平台上使用的设备可分为两类:内建设备和可安装设备。因此,从驱动加载方式上WinCE可分为内建设备驱动(Built-In

Driver)和可加载驱动(Loadable Driver)。

WinCE系统可直接使用内建设备,因为内建设备驱动程序是与WinCE的核心组件紧密相连的,也就是内建设备驱动程序是被静态地链接到GWES(Graphics

Windowing and Events

Subsystem)的。这些驱动对应的设备通常在系统启动时,在GWES的进程空间内被加载,主要是与显示和输入有关的驱动。

因为它们不是以独立的DLL形式存在,所以要求每一个内建驱动程序都必须与设备驱动程序接口(DDI)的特定接口保持一致。内建设备包括显示、触摸屏、音频、串行埠、LED、电池和PC卡插座等。内建驱动程序一般设计为动态链接库,但有两个例外:电池和LED驱动程序由于小而设计为静态库。它们一般储存在ROM或闪存内。

可加载设备是指可与平台连接和分离的第三方接口设备,可由用户随时安装和卸载。这种外围设备的驱动也被称为流驱动,樱并举这些驱动可以在系统启动时、或者启动后的任何时候由设备管理器动态加载。通常这类驱动是以DLL动态链接库的形式存在,加载后的这些驱动程序也只能以用户态的角色运行。在WinCE中典型的可加载驱动有:PCMCIA

driver(脊碧PCMCIA.dll)、Serial driver(SERIAL.dll)、ATAFLASH driver(ATA.dll)、Ethernet

driver(NE2000.dll,SMSC100FD.dll)。

与内建驱动程序不同的是,所有可加载流驱动程序都共享一个公用接口,而且功能也与应用程序所用的文件API中的功能匹配。因此,控制可加载设备的流接口驱动程序一般由应用程序存取。也就是说,流接口驱动程序是由一个特殊文件来将设备功能展现给应用程序的,该文件可被打开、读取、写入和关闭。通常只有OEMs才会对内建设备驱动程序进行修改,其它自由设备生产商由于只提供附加的硬件设备,对内建设备驱动程序不会有过多涉及。

(2)从驱动程序层次上分类

WinCE最大的好处是具有可定制性,当它自带的驱动程序不能满足用户的要求时,用户可以自己编写相应的驱动程序。因此按照结构分,WinCE驱动程序又可分为分层的驱动程序和不分层的驱动程序。分层的驱动程序由两个设置好的层组成:上层是模型设备驱动程序(Model

Device Driver, MDD),下层是依赖平台的驱动程序(Platform Dependent Driver, PDD)。

分层的驱动程序中的MDD通常是无需修改可直接使用,MDD的作用是链接PDD层并定义它希望调用的函数接口:设备驱动程序提供器接口(Device

Driver Service Provider Interface,

DDSI)。同时MDD又把不同的函数集提供给WinCE内核,这些函数叫做设备驱动程序接口(Device Driver Interface,

DDI)。不分层的驱动程序是把PDD与MDD写在一起,没有做严格的区分,蔽宴通常这种驱动比较简单,比如ATADISK。简单的说,内建驱动和加载式流驱动是从驱动与系统其它模块(调用者)的接口形式上做的分类;而不分层和分层是从驱动实现方式上的分类。

在开发过程中,MDD层驱动是不需要被修改的。但和MDD层驱动不同的是,PDD层驱动必须被修改成和特定硬件相匹配的代码。程序员可以自己开发一个PDD程序,但多数情况下建议开发者在Platform

Builder提供的样例驱动程序上进行修改。在Win CE系统中触摸屏驱动是一种分层驱动。

2.触摸屏驱动程序的设计和实现

嵌入式设备触摸屏按其技术原理可分为五类:矢量压力传感式、电阻式、电容式、红外线式和表面声波式。其中电阻式触摸屏在嵌入式系统中用的较多,电阻式触摸屏可分为四线、五线、七线等几种。一般来说,WinCE触摸屏驱动的设计和实现有以下几个步骤:

(1)配置和初始化触摸屏

触摸屏驱动在初始化过程会调用TouchPanelEnable函数,该函数调用的DDSI函数为DdsiTouchPanelEnable和DdsiTouchPanelDisable。这两个DDSI接口函数是驱动实现的关键所在,分别用于打开和关闭触摸屏硬件。但是为了降低功耗,这两个函数其实可以不真正 *** 作硬件,而只是实现软件上的控制。

同时,在初始化时还需要进行这几个配置和初始化:一是创建事件hTouchPanelEvent和hCalibrationSampleAvailable,前者是在正常状态下当有触摸笔按下或者按下后需要定时采集数据时被触发;而后者是在校准状态下当有校准数据输入时被触发。二是检查初始化所需的中断gIntrTouch(触摸屏中断)和gIntrTouchChanged(定时器中断),并将这两个中断关联到事件hTouchPanelEvent。三是创建一个ISR线程TouchPanelpISR,用于等待和处理触摸屏事件hTouchPanelEvent,它也是整个驱动程序中唯一的事件源。

(2)校准触摸屏基准参数

完成前面繁琐的工作后,驱动程序的各种功能就都已经准备就绪了,现在就可以实际 *** 作触摸屏幕了。但一般来说,电阻式触摸屏需要校准,也就是说在驱动启动过程中MDD层要调用相应的DDSI函数来读取注册表中的校正数据校正触摸屏。理想情况下,校准程序只要在嵌入式设备初次加电测试过程中运行一次就可以了,参考值会被存储在非易失性存储器中,以免让用户在以后的加电启动期间再做校准。不过,高质量的触摸屏驱动程序是应该要向用户提供一种进入校准例程的途径,从而在由于温度漂移或其它因素造成校准不准确时进行重新校准。

在理想情况下,校正触摸屏基准只需两组原始数据,即在屏幕对角读取的最小和最大值。但在实际应用中,因为许多电阻式触摸屏存在明显的非线性,如果只在最小和最大值之间简单的插入位置数值会导致驱动程序非常的不精确。因此,在WinCE中需要获取多个校准点,常用的校准点数量为5个。

方法是:①首先驱动程序在函数DdsiTouchPanelGetDeviceCaps

中设置校准点的个数;②是系统在TouchDriverCalibrationPointGet中获取每个校准点的屏幕坐标;③是在屏幕界面的校准点坐标处显示一个位置符号,用户需要精确地在位置符号按下触摸屏;④驱动程序通过TouchPanelReadCalibrationPoint函数读取相应的触摸屏坐标值;⑤然后再开始下一个校准点,直到循环设定的次数后将采集到的触摸屏坐标值和校准点屏幕坐标送到TouchPanelSetCalibration函数中进行处理,该函数将产生校准基准参数。校准完成之后,触摸屏便可以开始正常的 *** 作了。

(3)判断屏幕是否被触摸

一旦完成了触摸屏硬件设置、初始化和基准参数校准后,接下来就需要用一种可靠的方法来判断屏幕是否被触摸了。WinCE提供了屏幕是否被触摸的检测机制,而且当触摸事件发生时还可选择是否中断主处理器。判断屏幕是否被触摸的驱动程序的函数名叫WaitForTouchState()。当屏幕被初次触摸时唤醒主机的中断,称为PEN_DOWN中断。这样做可以让驱动程序在屏幕没有被触摸时中断自己的执行,而不消耗任何CPU资源,而一旦用户触摸屏幕,驱动程序就被唤醒并进入转换模式。

当被唤醒后就有一组模数数据等待转换并产生中断信号。中断是硬件与软件打交道的重要方法,所以大多数驱动程序都涉及到中断处理。就中断处理而言,WinCE采用了一种独特的方法。它将中断处理分为两步:中断服务例程(ISR)和中断服务线程(IST)。具体来讲就是把每个硬件的设备中断请求(IRQ)

和一个ISR 联系起来,当一个中断发生并未被屏蔽时,内核调用该中断注册的ISR。因为ISR 运行于内核模式,所以应该被设计得尽可能的短,ISR

的基本职责是引导内核调度和启动合适的IST。IST 在设备驱动程序软件模块中编写,它从硬件获取或向硬件发送数据和控制代码,并进一步处理设备中断。

WinCE触摸屏驱动程序是采用中断方式对触摸笔的按下状态进行检测,当检测到触摸笔按下时产生的中断,就会触发一个事件通知一个工作线程开始采集数据。同时,驱动将打开一个硬件定时器,只要检测到触摸笔仍然在按下状态,将定时触发同一个事件通知这个工作线程继续采集数据,直到触摸笔抬起后关闭该定时器。简单的说,就是驱动程序会同时采用触摸屏中断和定时器中断这两个中断源。目的在于不仅可以监控触摸笔按下和抬起状态,而且可以检测触摸笔按下时的拖动轨迹。触摸屏中断的两个逻辑中断分别是:SYSINTR_TOUCH是用于触摸笔点击触摸屏时产生相应的中断;SYSINTR_TOUCH_CHANGE则用于触摸笔离开时产生相应的中断。

(4)获得稳定的、去抖动的测量数据

在进行触摸屏程序开发时,一定要注意原始的触摸测量数据经常会有一些噪声和偏差,这是正常的。一般来说,只有用户紧紧压住电阻触摸屏才能得到两个连续的读数,然而我们会发现当触控笔或手指按上或离开触摸屏时,读数的变化要比保持稳定压力时大得多。这是因为用户是以机械的方式连通二个平面电阻-触摸层,当用户按压和释放触摸屏时,在很短的一段时间内触摸屏的电气连接均处于临界状态。这时,我们需要丢弃这些读数直到系统稳定下来,否则提交的触摸位置读数会产生大幅跳跃,导致严重的失真或触摸位置漂移。

这时就需要进行折衷考虑,这也是触摸屏驱动设计的关键所在。如果我们要求较窄的稳定窗口,那么驱动程序将无法跟踪快速的“拖曳” *** 作;如果加宽稳定窗口,就可能面临着许多风险,这些风险包括接收到不精确的触摸数据,或上面描述处于临界状态的层连接结果。这时,就需要通过实验来确定适合系统的最佳值。

在正常情况下,当屏幕被触摸时驱动程序应会得到每个稳定的读数,并利用简单的线性插值法将原始数据转换成像素坐标。读取触摸点的坐标是由DdsiTouchPanalGetPoint()函数实现的。另外,在每个转换过程的前后,驱动程序必须检查并确认屏幕仍处于被触摸状态。因为我们不希望采集到实际上是处于“开路状态”的稳定读数。因此,在读取触摸数据时,我们需要对原始数据进行去抖动处理,然后确定屏幕被触摸时是否有稳定的读数;如果不稳定就要继续读取数据并进行去抖动处理,直到得到稳定的数据为止。

最后,触摸屏驱动程序应将触摸状态和位置变化信息发送给更高层的应用软件,以完成一次完整的触摸 *** 作。

在开发视频监控系统应用软件时,大家往往把关注的焦点集中于数字音/视频的编解码的实现上,而忽略了视频监控系统应用软件的整体架构。当然视频监控的核心也是在于 音视频编解码上,佰锐的Anychat SDK 主要就是在音视频领域这块,长期研究音视频即时通讯,对于音视频处理模块(采集、编解码)、流媒体管理模块(丢包重传、抖动平滑、动态缓冲)、流媒体播放模块(多路混音、音视频同步)以及P2P网络模块(NAT穿透、UPnP支持)等多个子模块,封装了底层的硬件 *** 作(音视频采集、播放)、封装了流媒体处理(编解码、网络传输)等非常专业和复杂的技术,为上层应用提供简单的API控制接口,可以在极短的开发周期,以及极少的人力资源投入下为客户的现有平台增加音视频即时通讯、多方会议的功能。AnyChat SDK可以让企业越过复杂的底层技术实现,而把主要精力投入项目的业务逻辑处理上,加快项目开发进展,从而为企业赢得市场先机。

视频监控系统中,一个优秀的音/视频编解码算法固然很重要,但其中是整个视频监控系统应用软件的一个重要组成部分。视频监控系统应用程序还涉及到如何搞笑地输入/输出数字音/视频数据,这些数据又如何与音/视频编解码算法协调、配合,以及视频监控系统应用软件各个模块之间如何协调工作。本文主要阐述软件开发方法,说明层次化软件开发方法优越性。

                

传统的软件开发方法

  传统的软件开发方法是一种线性的程序流程,首先以功能模块对整个程序进行模块化,然后选择ASM或C语言,从零开始编写各个子模块,最后编写一个主循环,将这些子模块线性地顺序循环执行。

   互联网是个神奇的大网,软件定制也是一种模式,这里提供最详细的报价,如果你真的想做,可以来这里,这个手技的开始数字是一八七中间的是三儿零最后的是一四二五零,按照顺序组合起来就可以找到,我想说的是,除非你想做或者了解这方面的内容,如果只是凑热闹的话,就不要来了。

传统的软件开发方法的优点是:整个程序的控制流、数据流完全由编程者掌握,程序直观、易理解。但其缺点是:各个子模块之间紧密耦合,修改某一子模块,将可能影响整个程序,也即其代码的重复使用弯薯率不高,导致相似系统之间程序的移植性差;由于程序顺序、循环执行,在算法对数据进行处理前,需要花大量时间来等待输入/输出数据就绪,导致CPU的利用率低,同样,简单的顺序、循环执行,只能管理和调度单一任务,不能实现多任务的管理和调度。

              

倡导的DSP软件开发方法

为了加速DSP软件开发,一套完善的、规范的、标准化的DSP软件开发方法称之为DSP软件技术。它是以DSP/BIOS实时多任务 *** 作系统为核心,以层次化结构为基础的一种软件开发方法,其优点是

软件结构层次化:各层之间均采用标准的API,修改某一层不会影响其它层,提高了代码的重复使用率,改善和提高相似系统之间的程序移植性;

应用层;

设备驱动层;

硬件设备层;

以DSP/BIOS实时多任务内核为主控,使CPU得利用率最大化;

DSP/BIOS负责程序的管理和调度;

DSP/BIOS可对程序的控制流、数据流及程序执行效率进行实时分析。

缺点是:整个程序的控制流渣搭、数据流由埋梁者DSP/BIOS来管理,程序将不再直观和易理解。豪宅DSP/BIOS提供了实时分析模块,可全程实时分析控制流、数据流及程序执行效率。

              

层次化的设备驱动程序模型

一个设备驱动程序开发包,为设备驱动程序设计一个层次化的模型,称为IOM模型,IOM模型将设备驱动程序分为2层,上层为与硬件无关的层称为类设备驱动程序,负责管理设备实例、同步和I/Q请求串行化等 *** 作。与硬件五官的下层称为迷你设备驱动程序,负责对实际的设备进行初始化或必要的控制 *** 作。

             

类设备驱动程序

类设备驱动程序是设备驱动程序的上层抽象,时期与特定设备无关,DDK为每一类的类设备驱动程序定义了一组标准的API函数,应用程序均只能通过此组API函数来调用设备驱动程序,从而使应用程序与设备驱动程序分离。

DDK定义了3大类的类驱动程序:SIO、PIP和GIO。

SIO:流I/O接口,由SIO和DIO组成,PIO负责缓冲器管理、信号同步以及底层迷你驱动程序接口。

GIO:通用I/O,允许进行块读块写,设备驱动程序开发者可以用其来实现新的、专用的类设备驱动程序。

DDK中已完整地实现了SIO和PIP类设备驱动程序,使用SIO和PIP类设备驱动程序的设备驱动程序开发者无需再编写任何类设备驱动程序代码。而对于使用GIO类设备驱动程序的设备驱动程序开发者来说,DDK已为GIO实现了一组基本的API函数,所以开发者只需通过宏定义来调用此组API函数,实现自己专用的类设备驱动程序。

迷你设备驱动程序

迷你设备驱动程序时设备驱动程序的底层抽象,与特定设备有关,对硬件设备进行实际 *** 作,DDK为迷你设备驱动程序规定一组标准的API函数,类设备驱动程序通过这些标准化了的API函数来调用迷你设备驱动程序,而对设备驱动程序开发者来说,只需为特定的函数体。在此组API函数的特定的函数体中,用户则可以通过调用CLS/BSL库来对设备的具体硬件进行初始化和相关的控制 *** 作。

             

为什么要用IOM设备驱动程序模型

IOM设备驱动程序模型是层次化了的设备驱动程序,层次化设计通过使层之间的接口标准化,并且只有相邻层之间才可相互调用,来有效地将上层应用程序与下层具体的硬件设备的 *** 作细节分离。所以,当更换其中的某些硬件外设时,通常只需修改底层的迷你驱动程序,而上层应用程序的修改则可最小化,从而提高上层应用程序的通用性、可重复使用性和可移植性。

IOM模型的设备驱动程序中包含什么

在程序设备是用来完成数据输入/输出的、完整的数据链路,有时单个外设并不一定称为设备,如:音频输入/输出设备。它是由DSP片商McBSP+IIC+DMA+中断+片外Codec等片上/片外外设器件构成。在这样一个数据链路中,单独的一个片上/片外外设并不能完成数据真正的输入/输出,不能称为设备。那么设备室如何来完成相应的数据输入/输出?

首先,需要对构成设备的各外设进行初始化,设置它们的工作方式,这些外设才能正确 *** 作。另外,外设的某些功能需要外设 *** 作过程中动态调节,如:A/D转换器的采样率可能需要应用程序动态地调整;UART器件的波特率可能需要应用程序动态地调整;外设所对应的中断、DMA/EDMA通道等也可能要由应用程序根据需要动态来修改。所以设备驱动程序必定有设备初始化函数、和某些相关的设置函数。

其次,需要对其进行读/写 *** 作,即完成外设最基本的输入/输出功能。应用程序一般是成批地处理数据,而外设往往一个接一个地输入/输出数据,二者之间需要缓冲器来进行缓存,设备驱动程序的输入/输出函数完成外设的时间读/写 *** 作,将数据存入/读出缓冲器,应用程序则在缓冲器可用时,进行相应的处理。由此可见,缓冲器是在应用程序与设备驱动程序之间来回切换的,不同的应用所需的缓冲器的大小不同,而且为了避免数据的覆盖,可能需要用多个缓冲器来进行切换。缓冲器的大小、缓冲器的个数、缓冲器由驱动程序管理还是由应用程序管理可根据应用的需要灵活安排。外设的读/写 *** 作并非随时可以进行,必须满足一定条件,此条件一般用于作为中断信号或标志信号,另外,为了提升输入/输出的效率,往往需要用DMA/EDMA配合工作,驱动程序往往会中断、DMA/EDMA相关联。

最后,驱动程序输入/输出的数据必须由应用程序来处理,应用程序只有在数据就绪时,才能对缓冲器进行读/写 *** 作,就存在驱动程序与应用程序同步的问题,同步一般有二种方式,一种是“阻塞”,另一种带回调函数的非“阻塞”。二种不同的同步方式,实际对应“阻塞”方式时,选用软件中断型线程。

                    

结语

采用IOM模型来开发底层设备驱动程序,要比传统的软件开发更复杂,整个程序的控制流和数据流更不直观和不易理解,但掌握这样的软件开发方法,那么在下一个项目中已开发完的程序的继承性和可移植性将得到充分发挥,在我们今后的软件开发中,将起到事半功倍的作用。如今市场竞争越来越激烈,如何在有限的时间内完成项目,满足客户的需求成为企业决策者所需要面对的现实。Anychat可以为您节约开发时间,缩短项目开发周期;节省开发费用,减少人力资源投入;平台自主开发,提升企业综合竞争力;产品跨平台,应用领域广阔;API接口丰富,方便与第三方业务集成;专业技术支持,性能稳定可靠。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12219158.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存