zoukankan      html  css  js  c++  java
  • Linux中的中断处理

    1. Linux中中断除了中断分层之外,还有一种就是中断线程化

    存在意义:
    在Linux中,中断具有最高的优先级。不论在任何时刻,只要产生中断事件,内核将立即执行相应的中断处理程序,等到所有挂起的中断和软中断处理完毕后才能执行正常的任务,因此有
    可能造成实时任务得不到及时的处理。中断线程化之后,中断将作为内核线程运行而且被赋予不同的实时优先级,实时任务可以有比中断线程更高的优先级。这样,具有最高优先级的实
    时任务就能得到优先处理,即使在严重负载下仍有实时性保证。但是,并不是所有的中断都可以被线程化,比如时钟中断,主要用来维护系统时间以及定时器等,其中定时器是操作系统的
    脉搏,一旦被线程化,就有可能被挂起,这样后果将不堪设想,所以不应当被线程化。

    int request_threaded_irq(unsigned int irq, irq_handler_t handler, irq_handler_t thread_fn, unsigned long irqflags,const char *devname, void *dev_id);
    形参:
    1>:irq: 表示申请的中断号。
    2>:handler: 表示中断服务函数,在硬件中断上下文中运行。
    3>: thread_fn: 中断线程执行函数,在进程上下文中运行。中断服务函数中返回IRQ_WAKE_THREAD即可唤醒此线程执行。
    4>: irqflags: 表示中断触发标志。
    5>: devname: 表示请求中断的设备的名称。
    6>.dev_id: 对应于request_irq()函数中所传递的第五个参数,可取任意值,但必须唯一能够代表发出中断请求的设备,通常取描述该设备的结构体。共享中断时所用。

    如果要为设备设置线程irq处理程序,则需要提供@handler和@thread_fn。 @handler仍然在硬中断上下文中被调用,并且必须检查中断是否来自此设备。 如果是,则需要禁用设备上的中断并返
    回IRQ_WAKE_THREAD,这将唤醒处理程序线程并运行@thread_fn。
    这种拆分处理程序设计是支持共享中断所必需的。Dev_id必须是全局唯一的。 通常选用设备数据结构的地址。 由于处理程序接收到此值,因此使用它是有意义的。如果共享中断,则必须传递非
    NULL dev_id,因为在释放中断时需要这样做。

    注意:

    1.如果中断服务函数handler为null,则表示只想在进程上下文中运行此中断,此时handler被此函数赋值为默认的irq_default_primary_handler(),它什么都不做,只返回IRQ_WAKE_THREAD,唤醒中断线程 。

  • 相关阅读:
    part11-1 Python图形界面编程(Python GUI库介绍、Tkinter 组件介绍、布局管理器、事件处理)
    part10-3 Python常见模块(正则表达式)
    Cyclic Nacklace HDU
    模拟题 Right turn SCU
    状态DP Doing Homework HDU
    Dp Milking Time POJ
    区间DP Treats for the Cows POJ
    DP Help Jimmy POJ
    Dales and Hills Gym
    Kids and Prizes Gym
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/9535315.html
Copyright © 2011-2022 走看看