我发布这是讨论request_threaded_irq的线程,但我没有得到任何答复.所以我刚刚发布它.
我正在研究用于电容式触摸屏的触摸屏驱动程序.它使用request_threaded_irq()调用而不是request_irq().我无法理解两者之间的基本差异.它说 :-
名称
request_threaded_irq - 分配中断线
概要
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);
参数
Handler和Thread_fn参数是令人困惑的.此外,驱动程序中没有定义工作功能.
有人可以帮我理解这个吗?
添加了request_threaded_irq()函数以允许开发人员将中断处理代码分成两部分.一部分将执行中断被阻止,第二部分可以由内核线程完成而不会中断被阻止.有关原因的详细信息,您可以阅读:
http://lwn.net/Articles/302043/
在您的情况下,您链接的驱动程序执行此操作:
err = request_threaded_irq(client->irq, NULL, cy8ctmg110_irq_thread,
IRQF_TRIGGER_RISING, "touch_reset_key", ts);
Run Code Online (Sandbox Code Playgroud)
通过为第二个arg传递NULL,"handler",thread_fn的参数或函数cy8ctmg110_irq_thread()将在检测到中断时被调用.
对于您来说,选择哪个请求irq函数将取决于您的驱动程序在中断上下文中需要做什么.