再写一个触摸屏驱动的时候,在中端处理函数中想用一个ssleep函数让中断等待,以便观察结果,结果运行到这里出现错误。通过google和查书最终找到了答案。
void msllep(unsigned int millisecs);
unsigned long msleep_interruptible(unsigned int millisecs);
void ssleep(unsigned int secounds);
这三个函数的功能是实现进程休眠。他们与下面三个函数使用时不同的。
#include<linux/delay.h>
void ndelay(unsigned long nsecs); //纳秒延时
void udelay(unsigned long usecs); //微秒延时
void mdelay(unsigned long msecs); //毫秒延时
这三个函数都是忙等待函数。
在程序处于进程上下文之外(比如在中断上下文中),必须遵守如下规则:(详细可参见linux设备驱动第三版P197)。
1、不允许访问用户空间。
2、current指针在原子模式下是没有任何意义的,也是不可用的,因为相关代码和被中断的进程没有任何联系。
3、不能执行休眠或调度。(主要是这个原因引起的)。
呵呵,问题解决。