免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2605 | 回复: 6

linux中断驱动的编写疑问 [复制链接]

论坛徽章:
0
发表于 2010-04-02 09:47 |显示全部楼层
最近在写一个linux下面与中断处理相关的程序。

由于是从单片机,arm转过来的,很多思维还是逃不出以前的想法。

比如单片机时的中断处理:
void irq  interrupt(void)
{
         data_flag = 1;
         rxbuf[data_len++] = data;
}

在主循环中
while(1)
{
        if(1 == data_flag)
        {
                  data_flag = 0;
                  data_process();
         }
}

如果是在linux下面的驱动呢?

linux中断方面的驱动我写过一些,基本上都是采用socket/poll的方式或者send_sig_info之类的传递信号给应用层的方式,除了这2种方式之外,其他的方式还有哪些?
这些方式中哪种的实时性比较好?占用内核时间短?效率比较高?
请高人赐教。

论坛徽章:
0
发表于 2010-04-02 12:44 |显示全部楼层
个人建议, 主循环你的功能可以是现在workqueue 或者tasklet里面,中断里面只需要唤醒或调度一下workqueue 就行,CPU会在后面适当的时间去执行workqueue 或者tasklet的, 具体的函数操作可以参照 linux kernel development 的第七章,讲的很清楚。 tasklet 效率稍高一些,不过对于一般的应用workqueue 也是足够的。

评分

参与人数 1可用积分 +18 收起 理由
yidou + 18 nod

查看全部评分

论坛徽章:
0
发表于 2010-04-02 13:51 |显示全部楼层
回复 2# dreamfly281


    谢谢兄弟的答复。
   
   我的表达有点问题,让兄弟误解了。我在写一个与DSP通讯的hpi驱动,DSP更新数据后通过一个硬件中断脚来通知主芯片。

   现在使用的就是tasklet,问题不在中断编程本身。
   主要问题是:
   (1)由于采用poll/select方式,感觉占用内核进程的时间比较多?
   (2)利用send_sig_info应该不会有这个问题,但是效率可能会低些。
   (3)除了上述2种方式外,还有哪些其他的方式?

论坛徽章:
0
发表于 2010-04-02 17:02 |显示全部楼层
信号量或者完成量

论坛徽章:
0
发表于 2010-04-05 20:57 |显示全部楼层
你说的是把消息传递给应用层吧? 用POLL 就可以了,效率高

论坛徽章:
0
发表于 2010-04-08 09:35 |显示全部楼层
我也在做arm-dsp的hpi驱动,但是感觉基础不好,调试不通。现在单单的几个字节的数据传输都没完成。不知兄台能不能提供些信息。有没有完整的步骤?

论坛徽章:
0
发表于 2010-04-08 14:37 |显示全部楼层
(1)由于采用poll/select方式,感觉占用内核进程的时间比较多?
=====================================
不会占用内核进程的, 你可以看看内核中 poll/select 的实现,这是一个阻塞调用,
条件满足的时候,进程才会被唤醒,其他时间它并不占用cpu


   (2)利用send_sig_info应该不会有这个问题,但是效率可能会低些。
==========================================================================
发信号的方式 倒是不太常用, 不过,效率应该还是可以的。

   (3)除了上述2种方式外,还有哪些其他的方式?
==================================

SIGIO 方式,这个其实也是信号方式。
阻塞读写。
共享内存,
NETLINK,

不过,我觉得用 select 就行了,很常规和通用的方法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP