Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3306931
  • 博文数量: 366
  • 博客积分: 9916
  • 博客等级: 中将
  • 技术积分: 7194
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-29 23:27
个人简介

简单!

文章分类

全部博文(366)

文章存档

2013年(51)

2012年(269)

2011年(46)

分类: 嵌入式

2012-05-20 13:41:24

        在2.6的内核中,编译ldd3使用request_irq函数申请中断时,编译时出现了warning: passing argument 2 of 'request_irq' from incompatible pointer type的警告信息。

request_irq函数调用如下:

for (i = 0; trials[i]; i++)
        tried[i] = request_irq(trials[i], short_probing,
                IRQF_SHARED, "short probe", NULL);

short_probing函数的原型如下:

irqreturn_t short_probing(int irq, void *dev_id,struct pt_regs *regs)

报警的提示意思是第二个参数指针类型不匹配。

short_probing函数的原型,
应该由:
irqreturn_t short_probing(int irq, void *dev_id,struct pt_regs *regs)
改为:
irqreturn_t short_probing(int irq, void *dev_id)


linux/include/linux/interrupt.h中有这么一个定义
typedef irqreturn_t (*irq_handler_t)(int, void *);
定义一种函数指针类型irq_handler_t, 这种函数的返回类型为irqreturn_t,参数列表为int, void*

再来看request_irq的函数声明部分
kernel/irq/manage.c:
int request_irq(

        unsigned int irq,
        irq_handler_t handler,
        unsigned long irqflags,
        const char *devname,
        void *dev_id)

request_irq的第二个参数是handler函数,类型是irq_handler_t,

request_irq() 函数原型:
/********************************/
include/linux/irqreturn.h:typedef int irqreturn_t;
include/linux/interrupt.h:typedef irqreturn_t (*irq_handler_t)(int, void *);
kernel/irq/manage.c:int request_irq(
        unsigned int irq,
        irq_handler_t handler,
        unsigned long irqflags,
        const char *devname,
        void *dev_id)

/********************************/
阅读(9943) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~