ChinaUnix.net
相关文章推荐:

wait_event_interruptible

大家好,我最近在编写tl16c554串口扩展的驱动,其中在读串口时候调用wait_event_interruptible ()函数等待串口接收数据的到来,以便唤醒read函数,而在串口接收中断处理中调用wake_up_interruptible()以唤醒读进程。现在问题是当用户按下CTRL+C时要中断读函数,而wait_event_interruptible怎么判断是CTRL+C信号中断,还是wake_up_interruptible()唤醒的呢。附上目前的我的问题代码请大家帮帮看看 中断处理函数 [code] stati...

by lj33072315 - 嵌入式开发 - 2009-09-08 20:28:36 阅读(6008) 回复(1)

相关讨论

我写了个简单的中断程序: #define IRQ_ADC_FIQ AT91_PIN_PB29 #define ADS_CHANNEL_COUNT 4 #define NAME "gpiotest" #define TS_PB29 1<<29 static struct cdev ads7852_cdev; static int major=0; static DECLARE_wait_QUEUE_HEAD(wq); static struct semaphore sem; static int flag = 0; void pio_init(void) { ((AT91PS_SYS)AT91C_VA_BASE_SYS)->PIOB_IER=TS_PB29; ((AT91PS_SYS)AT91C_VA_BASE_SYS...

by lisayh - 嵌入式开发 - 2007-12-27 22:35:42 阅读(4590) 回复(4)

wait_event_interruptible()。该函数修改task的状态为TASK_interruptible,意味着改进程将不会继续运行直到被唤醒,然后被添加到等待队列wq中。 在wait_event_interruptible()中首先判断condition是不是已经满足,如果是则直接返回0,否则调用__wait_event_interruptible(),并用__ret来存放返回值 --------------------------------------------------------------- #define wait_event_interruptible(wq, condition) \ ...

by win1naruto - 内核源码 - 2013-01-14 17:32:43 阅读(4346) 回复(7)

最近在看wait_event_interruptible()函数的源码,下面是其中的关键部分:[code]for (;;) { \ prepare_to_wait(&wq, &__wait, TASK_interruptible); \ if (condition) \ break; \ if (!signal_pending(current)) { \ schedule(); \ continue; \ } \ ret = -ERESTARTSYS; \ break; \ } \ finish_wait(&wq, &__wait);[/code]当condition条件满足的时候,就...

by comeona1 - 内核源码 - 2013-04-29 21:47:09 阅读(4871) 回复(9)

在看wait_event_interruptible(wq, condition) 时,有一点比较迷惑如下:[code]#define wait_event_interruptible(wq, condition) \ ({ \ int __ret = 0; \ if (!(condition)) \ __wait_event_interruptible(wq, condition, __ret); \ __ret; \ })[/code]这里有个__ret,说是它是返回值,可是没见它在哪被return啊?宏函数定义的接口也没这个__ret,那么__ret在哪被返回呢? 根据宏定义是替换的情况,假设...

by colorshape - Linux新手园地 - 2011-04-04 22:30:08 阅读(2339) 回复(3)

#define wait_event(wq, condition) \ do { \ if (condition) \ break; \ __wait_event(wq, condition); \ } while (0) 为什么写成do { .....

by 怪怪虎 - C/C++ - 2010-07-18 20:15:38 阅读(1541) 回复(3)

#define __wait_event(wq, condition) \ do { \ DEFINE_wait(__wait); \ \ for ( ; ; ) { \ prepare_to_wait(&wq, &__wait, TASK_UNinterruptible); \ if (condition) \ break; \ schedule(); \ } \ finish_wait(&wq, &__wait); \ } while (0) 为什么wait_event里面要用for( ; ; )无限循环?进程被设为TASK_UNinterruptible后不就不再被调度,上CPU了么...

by fishswimming - 内核源码 - 2008-10-22 15:40:25 阅读(3050) 回复(6)

[code]#define __wait_event(wq, condition) \ do { \ DEFINE_wait(__wait); \ \ for (;;) { \ ...

by skyrim - 内核源码 - 2012-05-22 12:40:34 阅读(2965) 回复(13)

LDD3上讲wait_event_interrupt除了能被wake_up唤醒,还可以被信号唤醒,但没有具体讲。想问下怎么用信号唤醒,比如说驱动程序中read里面调用wait_event_interrupt,write调用wake_up。在用户空间里测试驱动时,运行user_read会被阻塞,运行user_write就可以唤醒user_read。这时如果不用user_write而用信号唤醒user_read,是通过什么方法?用kill命令向被阻塞的user_read进程发送某个信号吗? 求指教 谢谢

by sunomoon - 驱动开发 - 2012-05-14 13:05:53 阅读(1459) 回复(1)

#define __wait_event(wq, condition) \ do { \ DEFINE_wait(__wait); \ \ for (;;) { \ ...

by honest581 - 内核源码 - 2010-04-13 16:10:12 阅读(3323) 回复(4)

本帖最后由 honest581 于 2010-04-13 14:47 编辑 #define __wait_event(wq, condition) \ do { \ DEFINE_wait(__wait); \ \ for (;;) { ...

by honest581 - Linux新手园地 - 2010-04-13 11:53:43 阅读(1043) 回复(0)