firch
驱动牛犊
驱动牛犊
  • 注册日期2003-12-03
  • 最后登录2004-03-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1369回复:3

为什么我的中断服务程序只运行一次?

楼主#
更多 发布于:2004-01-08 15:01
我采用硬中断+软中断的方式实现驱动与用户程序的通信,处理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\",重新再运行一次程序马上就退出了,必须把驱动模块卸掉后重新装载又能
再处理一次中断,这样几次后,系统就崩溃了.什么原因呢?
hometown
驱动大牛
驱动大牛
  • 注册日期2002-10-24
  • 最后登录2004-05-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-01-08 16:04
崩溃可能是你驱动有些问题,而只发一次中断是必须重安装,这在不同的UNIX之间是不一样的。你查一下MAN页,好好看一下
How fair and how pleasant art thou, O love, for delights!This thy stature is like to a palm tree, and thy breasts to clusters of grapes.I said, I will go up to the palm tree, I will take hold of the boughs thereof: now also thy breasts shall be as clusters of the vine, and the smell of thy nose like apples;And the roof of thy mouth like the best wine for my beloved, that goeth down sweetly, causing the lips of those that are asleep to speak.
firch
驱动牛犊
驱动牛犊
  • 注册日期2003-12-03
  • 最后登录2004-03-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-01-08 16:50
我的系统是 linux2.4.20
我如果把send_sig()去掉,在irq_handler_bh()加printk
中断接受正常.
重装中断?
能讲详细一点吗?
谢谢了...

[编辑 -  1/8/04 by  firch]
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
地板#
发布于:2004-01-12 18:08
在非bsd系统上,所有信号在捕获处理时(你的信号处理函数中)需要再设置一次,否则只能触发一次:)
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
游客

返回顶部