WinCE 6.0中断驱动详解:ISR与IST协作与PWRBUTTON驱动示例

需积分: 10 2 下载量 17 浏览量 更新于2024-09-10 收藏 56KB DOCX 举报
在Windows CE 6.0中,中断驱动程序设计是关键的一部分,特别是在嵌入式系统中。该平台的中断处理过程主要由中断服务例程(ISR)和中断服务线程(IST)组成。ISR作为内核层的低级别处理程序,负责最基本的中断响应,例如接收中断请求(IRQ)和系统中断(SYSINTR),并配置微控制器的中断控制寄存器。这部分功能在OEM适配层(OAL)中实现。 中断处理的核心任务则交由IST来完成,它们位于驱动或应用程序中,与普通的线程共享相同的优先级管理系统。ISR与IST之间的通信通过事件对象进行,IST会在自己的线程中创建一个事件对象,并使用`WaitForSingleObject()`函数等待ISR的通知。当外部中断发生时,ISR会调用相应的中断服务,例如`OEMInterruptHandler()`,获取中断类型并触发与之关联的事件,这样IST就能够响应并执行中断处理的具体操作。 值得注意的是,与一些传统的嵌入式操作系统不同,如uC/OS,WinCE 6.0采用异常向量表而不是中断向量表来管理中断。这里有两个主要的异常处理器,IRQHandler和FIQHandler,通常使用IRQHandler来处理外部中断。这种设计虽然可能牺牲一定的实时性,但提供了更大的灵活性,使得IST可以根据具体需求进行更复杂的中断处理。 举例来说,以DEVICEEMULATOR的PWRBUTTON驱动为例,这是一个流驱动,允许动态加载和卸载,但需对代码进行适当调整以避免潜在问题。在驱动初始化函数`PBT_Init()`中,可以看到对中断处理的初步设置,包括启动中断服务线程和初始化中断相关的资源。 总结来说,WinCE 6.0的外部中断驱动设计注重了中断处理的模块化和灵活性,通过事件对象实现ISR与IST之间的协调,使得嵌入式设备能够高效地响应外部中断事件。这对于理解嵌入式系统开发,尤其是使用Windows CE平台的开发者来说,是一项重要的知识点。