| 
 | 
 
 
发表于 2016-2-26 10:27:07
 21486 浏览  1 回复
                                 
 
 
中断延时函数请教
                                
 
 
 
   对于mdelay()和msleep()这两个函数。我在中断按键里做了小小的修改但是出现了问题。在驱动中的中断处理函数中我首先使用了系统的延时mdelay()。这个时候将修改后编译生成的.ko文件移到开发板上。使用“insmod”命令是可以用的,我使用的是精英开发板,我做的中断处理函数是这样的: 
 
static irqreturn_t eint9_interrupt(int irq, void *dev_id) {//当检测到按键中断的时候就进入中断处理函数 
                if(gpio_get_value(EXYNOS4_GPX1(1))==0){//当检测到有按键被摁下的时候 
                        mdelay(100);//使用延时函数延时100ms 
                        if(gpio_get_value(EXYNOS4_GPX1(1))==0){  //再检测一下是否被摁下,相当于是试验一                                                                      下键盘软件消抖 
                                gpio_set_value(EXYNOS4_GPL2(0), 0);  //这个时候可控制LED灯灭 
                         
                                gpio_set_value(EXYNOS4_GPD0(0), 1);  //蜂鸣器响 
                                mdelay(300);//延时300ms 
                                gpio_set_value(EXYNOS4_GPD0(0), 0);  //蜂鸣器不响         
                        } 
 
 
                } 
        printk("%s(%d)\n", __FUNCTION__, __LINE__); 
 
 
        return IRQ_HANDLED; 
} 
 
 
 
 
   这个时候是可以的键盘消抖起了一定的作用。 
   我一直对mdelay()和msleep()这两个函数的使用不太明确,而且哪个是可以使用在驱动里边的,那个是使用在应用里边的不太明确。所以我决定试一下。我把它们换成msleep()。再编译,移到开发板,这个时候重新加载驱动的.ko文件。这时候就出问题了。当我摁下按键的时候系统好像就崩溃了。 
    不多说了上图,,同时求解。 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 |   
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册  
 
x
 
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
| 
 | 
在4412中中断消抖是通过硬件实现的~不能像单片机中那样搞延时函数~ 
你去掉延时函数试试~ 
迅为电子是有中断实验手册和视频的~ 
另外还有好几篇中断的扩展文档 |   
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
 
	
登录或注册 
扫一扫关注迅为公众号
  
                 
   
 
 |