- 论坛徽章:
- 0
|
原帖由 accessory 于 2009-8-27 02:13 发表 ![]()
可以自己定义个SEMAPHORE, 用wait_event_interruptible。
详细说明看 LDD3, CHAPTER 6, PAGE 147-161, Blocking I/O
恕我愚昧,用wait_event_interruptible不知道如何实现
如果在驱动的xx_read里加上wait_event_interruptible(&wq,flag),可这个flag却是xx_read(S_REG)==xx, 无限循环,有点晕了?
原帖由 eexplorer 于 2009-8-27 09:33 发表 ![]()
不提供中断的话,你可以suspend read/write 操作,但是你得提供一种手段在状态寄存器发生改变的时候去唤醒sleep的进程(f.e 可以使用timer,以一定的间隔去poll S_REG)
所以没有中断的话,只能poll,区别就是在 ...
多谢,以上方法我也考虑过,但采用timer的话实时性达不到要求,如果timer的时间设得太短,CPU占用还是太高。不过实在没着时,只能用此办法
[ 本帖最后由 rollin7 于 2009-8-28 00:20 编辑 ] |
|