`
buliedian
  • 浏览: 1237567 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

WinCE 5.0边做边学(6)

阅读更多

在学习驱动程序之前,我们还有很多东西要了解。想来想去,可能最重要的还是中断了,所以,这次我们花点时间来了解一下在Windows CE中的中断机制。
凡是学过计算机原理的人都知道中断是什么东西,所以这些基本知识我们就不再详述了,我们下面就先看一下CE对中断的整体处理流程,以方便从全局上有个整体的认识。
下图是CE中中断处理的流程图示




我们分布来解释上图中的流程:
1、硬件设备向Kernel发送中断异常的代码,如果检测到这个中断异常,就会被Kernel层的异常处理所截获;
2、中断服务调度程序会调用OAL例程中的OEMInterruptDisable函数,这个函数会通知硬件在处理完这一中断前关闭特殊的中断,但其他的中断仍然处于开放状态;
3、中断服务例程ISR被调用以决定如何来处理这一中断;
4、Kernel接收到ISR的返回值以得知如何处理这一中断。它的响应结果之一是忽略掉这一中断不作处理(SYSINTR_NOP),另一结果是准备执行IST。
5、Kernel引发中断服务调度程序来唤醒中断服务线程去工作。IST是常规的Win32线程,一旦启动后,它会创建必要的EVENT然后等待该EVENT被激发。中断服务调度通过调用PulseEvent函数来激发EVENT,从而唤醒IST线程运行;
6、当唤醒以后,IST会对中断进行必要的处理如将数据移动到缓冲区或其他有意义的事;
7、如果需要的话,IST会借助于I/O支持例程访问硬件设备;
8、当IST处理完成后,它会调用InterruptDone函数通知Kernel;
9、Kernel调用OEMInterruptDone函数完成此次中断的处理过程,OAL例程通知硬件设备重新启用中断。
以上就是中断在CE中简要的处理过程。这其中还涉及到几个函数的使用,包括:
1、供OAL调用的ISR函数
HookInterrupt函数在OEMInit函数中被调用以关联IRQ和ISR;
UnhookInterrupt函数用来终止IRQ和ISR的关联。
2、供驱动程序调用的IST函数
InterruptInitialize函数用来将EVENT对象和逻辑中断号关联并允许中断;
InterruptDone函数用来通知中断处理的结束;
InterruptDisable函数被驱动程序调用以关闭中断同时取消被InterruptInitialize初始化的EVENT对象。
下面我们再分别来看一下最重要的两部分,ISR和IST。
ISR属于OAL层,通常是用汇编语言编写的,它可以将CPU寄存器中的数据移动到内存缓冲区中,但是它不能做更多的工作,其中一个原因就是它不能访问到用户态的存储区,它要把这些工作交给IST来完成。它做的另一项工作是进行物理中断号和逻辑中断号的映射。一个物理设备比如键盘在一种平台上可能产生4号中断,在另一种平台上可能产生15号中断,经过ISR以后,它就会把这一物理中断转换成CE中标准的SYSINTR_KEYBOARD逻辑中断。Kernel就会根据这个逻辑中断值找到对应的EVENT从而唤醒IST。
ISR有两种,一种是单ISR模式, 即全局只有一个ISR,它适用于不支持多中断的CPU,在这种情况下,OAL会提供一个OEMInterruptHandler的命令ISR。另一种是多ISR模式,即CPU有多个硬件中断的情况,OAL通过HookInterrupt函数为每一个中断调用ISR。
IST是驱动程序中的用户态线程,它来执行中断的处理工作。在启动后它会空闲等待EVENT的激发状态,激发后处理真正的中断处理过程,最后调用InterruptDone函数标识中断处理完成。它通常通过CeSetThreadPriority函数设置在较高的优先级状态。
以上是对中断的简要了解,在WINCE5的驱动程序中,很大的变化就是把很多过程化的东西变成了面向对象的方式,即进行了以类为基础的封装,这样代码变得非常层次化,如果你想了解以上这些中断在具体驱动程序中的实现,建议还是先来看看CE4中的代码,似乎更明显一些。
好了,此次的内容不多,但是较空洞,最好配合查阅驱动程序的源程序如串口的,键盘的,比如键盘的驱动中就有非常明显的IST,很容易看到它是如何设置优先级的,如果等待EVENT的,如何处理键盘消息的以及如何完成中断的,代码附后,这样才能加强理解。即使自己写驱动,也不一定完全从头编写,在以在别人的架构上修改以缩短开发周期。
BOOL
KeybdIstLoop(
PKEYBD_IST pKeybdIst
)
{
SETFNAME(_T("KeybdIstLoop"));

UINT32 rguiScanCode[16];
BOOL rgfKeyUp[16];
UINT cEvents;

DEBUGCHK(pKeybdIst->hevInterrupt != NULL);
DEBUGCHK(pKeybdIst->pfnGetKeybdEvent != NULL);
DEBUGCHK(pKeybdIst->pfnKeybdEvent != NULL);

SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST);

wait_for_keybd_interrupt:
if (WaitForSingleObject(pKeybdIst->hevInterrupt, INFINITE) == WAIT_OBJECT_0)
{
cEvents = (*pKeybdIst->pfnGetKeybdEvent)
(pKeybdIst->uiPddId, rguiScanCode, rgfKeyUp);

for (UINT iEvent = 0; iEvent < cEvents; ++iEvent) {
(*pKeybdIst->pfnKeybdEvent)(pKeybdIst->uiPddId,
rguiScanCode[iEvent], rgfKeyUp[iEvent]);
}
// cEvents could be 0 if this was a partial scan code, like 0xE0

InterruptDone(pKeybdIst->dwSysIntr_Keybd);
}

goto wait_for_keybd_interrupt;

ERRORMSG(1, (TEXT("KeybdIstLoop: Keyboard driver thread terminating.\r\n")));
return TRUE;
}

分享到:
评论

相关推荐

    WinCE 5.0边做边学

    《WinCE 5.0边做边学》是一本深入浅出地介绍Windows CE 5.0操作系统开发和应用的教程。Windows CE是微软推出的一个嵌入式操作系统平台,广泛应用于掌上设备、工业控制、车载系统等领域。本书旨在帮助读者通过实践...

    WINCE5.0应用程序

    在Windows CE 5.0(简称WINCE5.0)平台上进行应用程序开发,开发者通常会利用Visual Studio 2005(VS2005)作为集成开发环境(IDE)。这个平台提供了丰富的工具和资源,使得开发者能够创建高效、可移植的嵌入式应用...

    WinCE5.0中文模拟器SDK

    **WinCE5.0中文模拟器SDK详解** WinCE5.0中文模拟器SDK是针对Windows Embedded Compact 5.0(原名Windows CE)开发的一个重要工具,它为开发者提供了一个在桌面环境下模拟Windows CE设备运行环境的平台。这个模拟器...

    WinCE 5.0 软件合集(内置25个程序)

    内置25个WinCE5.0程序,包括系统工具,媒体播放、游戏、计算器等 这些的程序都是由通过网络收集的 程序能都在WinCE5.0上完美运行(分别在WinCE5.0模拟器和装有WinCE5.0的导航仪上成功运行)

    WinCE5.0模拟器.rar_win ce_win ce 5.0 模拟器_电脑模拟_电脑车操作_车机

    《WinCE5.0模拟器:打造车机操作体验的电脑仿真平台》 Windows CE(简称WinCE)是微软公司开发的一种嵌入式操作系统,它主要用于小型设备,如掌上电脑、车载信息娱乐系统等。在本文中,我们将深入探讨WinCE5.0...

    WinCE5.0中文模拟器SDK(VS2005) Part2

    目前权限只能上传45MB大小的文件,只能分包压缩上传了,需要用的请将两个压缩包都下载下来再解压缩。

    嵌入式系统/ARM技术中的WinCE 5.0边练边学(5)(6)

    工欲善其事,必先利其器    对于实时系统,如何调试是一个很难解决的问题,包括对系统内核的调试,对驱动程序的调试,对应用程序的调试等。对于应用程序,通常各集成开发环境都提供了常规的单步跟踪等调试手段。...

    WinCE5.0模拟器(win7)

    WinCE5.0模拟器是针对Windows CE 5.0操作系统设计的一款软件工具,它允许开发者在Windows 7系统上模拟运行WinCE5.0环境,以便进行应用程序开发、测试和调试。Windows CE是一个嵌入式操作系统,广泛应用于各种设备,...

    wince5.0下的一些小游戏

    在Windows CE 5.0(简称WinCE5.0)操作系统上,有一系列小游戏可供用户娱乐。Windows CE是微软开发的一个嵌入式操作系统,广泛应用于各种设备,包括车载信息系统、手持设备等。在这个环境下,由于硬件限制和系统特性...

    WinCE5.0模拟器(中文).rar

    WinCE5.0模拟器是基于Windows Embedded Compact 5.0操作系统的一个开发和测试工具,它允许开发者在桌面PC上模拟Windows CE系统的行为,以便在实际硬件设备部署之前进行应用程序的开发、调试和测试。这个“WinCE5.0...

    WinCE5.0中文模拟器VS2008

    《深入理解WinCE5.0中文模拟器与VS2008开发环境》 Windows CE 5.0,作为微软推出的嵌入式操作系统,广泛应用于各种小型设备和嵌入式系统中。为了方便开发者在Windows平台上进行WinCE应用的调试和测试,微软提供了...

    wince5.0环境下播放器

    在Windows CE 5.0(简称WinCE5.0)环境下,开发和运行多媒体播放器是一项重要的任务。这个操作系统主要用于嵌入式设备,如手持设备、车载系统等,因此一个功能完善的播放器对于提升用户体验至关重要。标题提到的...

    wince5.0.rar_OK2440 bsp_ok2440_wince5_wince5.0 _wince5.0 bsp

    本资源包“wince5.0.rar_OK2440 bsp_ok2440_wince5_wince5.0 _wince5.0 bsp”是针对OK2440开发板的WinCE5.0 BSP(Board Support Package)更新版,旨在为开发者提供更加稳定和高效的平台支持。 首先,让我们深入...

    WinCE5.0manual.rar_wince5_wince5.0

    本资料主要针对WinCE5.0的操作系统特性、开发环境以及应用编程进行详细介绍,旨在帮助开发者深入理解和应用这一平台。 一、WinCE5.0概述 Windows CE 5.0是微软的实时操作系统(RTOS)系列之一,具有轻量级、可裁剪...

    WINCE5.0 的应用开发环境

    ### WINCE 5.0 应用开发环境的搭建与配置 #### 1. 引言 Windows CE 5.0(简称WINCE 5.0)是微软针对嵌入式设备推出的操作系统之一,其提供了强大的开发工具和丰富的API接口,支持多种处理器架构。为了在开发环境中...

    WinCE5.0笔记本工具、软件及游戏

    WinCE5.0,全称为Windows Embedded Compact 5.0,是微软开发的一款嵌入式操作系统,主要用于掌上设备、工业设备以及车载信息娱乐系统等。这个标题提及的"WinCE5.0笔记本工具、软件及游戏"显然是针对运行WinCE5.0系统...

    wince 5.0 setup PB5.0开发环境的应用

    Windows CE 5.0(简称WinCE 5.0)是一种嵌入式操作系统,由Microsoft公司开发,广泛应用于各种智能设备和嵌入式系统中。它提供了基础的系统内核、设备驱动支持以及应用程序框架,使得开发者能够创建定制化的、高性能...

    eboot.rar_2410 wince 5.0_eboot S3C24_wince 5.0 ebo_wince5.0 _wi

    标题中的“eboot.rar_2410 wince 5.0_eboot S3C24_wince 5.0 ebo_wince5.0 _wi”提到了几个关键概念,分别是“eboot”,“S3C2410”,“Windows CE 5.0”(wince5.0)。这表明我们正在讨论基于ARM9处理器S3C2410的...

    wince5.0.rar_wince5.0

    这个压缩包文件“wince5.0.rar_wince5.0”显然包含了关于WinCE 5.0驱动开发的相关资料,特别是驱动开发流程的介绍,对于想要学习或已经在从事WinCE 5.0驱动程序开发的工程师来说非常有价值。 驱动程序是操作系统与...

    WinCE 5.0边练边学(5)(6)

    工欲善其事,必先利其器    对于实时系统,如何调试是一个很难解决的问题,包括对系统内核的调试,对驱动程序的调试,对应用程序的调试等。对于应用程序,通常各集成开发环境都提供了常规的单步跟踪等调试手段。...

Global site tag (gtag.js) - Google Analytics