admin管理员组文章数量:1122852
WinCE
WinCE--中断服务线程IST(详解)
转载▼ 转自:.html中断服务线程负责处理中断大部分的工作。Wince5.0下IST为用户态线程,而在wince6.0下,IST的加载空间会和加载驱动程序的载体相同,也就是说载体为内核态IST就为内核态。
编写处理中断驱动程序的两个步骤:
一、进行中断初始化。
二、 编写中断服务线程。
下面我们来具体介绍这两步的细节:
一、进行中断初始化。
1、
2、
3、
4、
5、
6、
void InitialInterrupt( void )
{
// Create an event 创建事件
// Have the OAL Translate the IRQ to a system irq 获取IRQ的系统中断号
// Create a thread that waits for signaling 创建挂起的中断服务线程
// Set the thread priority – arbitrarily 5
// Initialize the interrupt 创建IRQ与事件之间的关联
// Get the thread started 启动IST线程
}
需要注意的是,对 InterruptInitialize 的调用仅采用 SYSINTR 值和事件作为
参数。内核不知道或者不关心将要等待该事件的线程。这样,就可以建立多种应用程序和驱动程序体系结构。应用程序的简单主循环可以初始化中断,然后立即
等待该事件。中断只能与一个事件关联,并且该事件不能用于对
WaitForMultipleObjects 的调用中。我们将观察一个简单的为中断提供服务的
线程。这是大多数实现中的标准解决方案。
二、编写中断服务线程
1、
2、
3、
4、
5、
6、
7、
DWORD
{
{
// Do all interrupt processing to complete the interaction做关于中断的相应处理,用户实现
// with the board so we can receive another interrupt.
}
未理解下面一段话的真正含义!!!????????????????
该示例读取一个 ULONG 寄存器以确定中断状态。您只需用您的代码替换该代码
段。非常关键的一点是,要使 IST 处理尽可能地简单。如果将来需要处理来自
该设备的数据:
* 在 IST 中尽可能快速地从该设备获取数据。
* 创建一个事件,以通知某个优先级较低的线程完成该工作。
* 通过 InterruptDone 从该 IST 中立即返回。
* 让优先级较低的线程进一步处理数据。
* 在 IST 与优先级较低的线程之间放置 FIFO 以处理溢出。
本文标签: wince
版权声明:本文标题:WinCE 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1730782102a1516646.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论