阅读:1369回复:3
为什么我的中断服务程序只运行一次?
我采用硬中断+软中断的方式实现驱动与用户程序的通信,处理SAA7146的GPIO口产生的中断.
在硬件驱动程序中: void irq_handler_bh(){ .... send_sig(SIGUSR1,task,1); } 在用户程序中: void sig_handler() { .... 读芯片fifo上的数据到内存; count ++; .... } main() { .... action.handler=sig_handler; sigaction(SIGUSR1,&action,NULL); while(1){ .... } } 按理说,程序应该无限循环等待硬件中断,但程序运行后,sig_handler运行一次后程序就退出了, 并打印\"用户定义中断1\",重新再运行一次程序马上就退出了,必须把驱动模块卸掉后重新装载又能 再处理一次中断,这样几次后,系统就崩溃了.什么原因呢? |
|
沙发#
发布于:2004-01-08 16:04
崩溃可能是你驱动有些问题,而只发一次中断是必须重安装,这在不同的UNIX之间是不一样的。你查一下MAN页,好好看一下
|
|
|
板凳#
发布于:2004-01-08 16:50
我的系统是 linux2.4.20
我如果把send_sig()去掉,在irq_handler_bh()加printk 中断接受正常. 重装中断? 能讲详细一点吗? 谢谢了... [编辑 - 1/8/04 by firch] |
|
地板#
发布于:2004-01-12 18:08
在非bsd系统上,所有信号在捕获处理时(你的信号处理函数中)需要再设置一次,否则只能触发一次:)
|
|
|