主题 : 中断程序中的 INTC_SetIntISR()函数无法编译,跪求解决办法! 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 65930
精华: 0
发帖: 24
金钱: 125 两
威望: 25 点
综合积分: 48 分
注册时间: 2012-03-24
最后登录: 2012-04-16
楼主  发表于: 2012-04-04 10:42

 中断程序中的 INTC_SetIntISR()函数无法编译,跪求解决办法!

前日里在论坛看到了一组源码,打算测试一下其中的pwm波程序,但是中断函数interrupt.c中定义的一个

INTC_SetIntISR()函数,是用来往中断向量地址寄存器中写入中断函数地址的,始终编译不了,具体情况是这样的:

在interrupt.h中有一个外部函数声明:extern void INTC_SetIntISR(unsigned int intNum, void (*isr)(void) __irq);

在interrupt.c中有关于此函数的定义:
void INTC_SetIntISR(unsigned int intNum, void (*isr)(void) __irq)
{
  if(intNum > INT_LIMIT)
     {
        return ;
     }
    
     if(intNum < 32)
     {
         VIC0VECTADDR[intNum] = (unsigned )isr;
        
     }
     else
     {
         VIC1VECTADDR[intNum-32] = (unsigned )isr;
     }
}

但是在linux下的编译出现了问题,截图如下:




貌似是函数定义过程中的  void (*isr)(void) __irq 变量  编译器无法识别,这个是个什么变量我也不是很清楚,在源文件中找不到这个变量的定义,只知道它代表的是中断函数地址之类的东西,有没有哪位高人帮我解决一下这个问题呢?感激不尽啊!
级别: 新手上路
UID: 65930
精华: 0
发帖: 24
金钱: 125 两
威望: 25 点
综合积分: 48 分
注册时间: 2012-03-24
最后登录: 2012-04-16
1楼  发表于: 2012-04-04 15:57
额。。。没有人能解决么?
级别: 侠客
UID: 65739
精华: 0
发帖: 58
金钱: 295 两
威望: 59 点
综合积分: 116 分
注册时间: 2012-03-21
最后登录: 2012-04-21
2楼  发表于: 2012-04-05 16:06
同求,希望有碰到类似问题的朋友们能帮个忙解答一下。
会不会是中断程序对于不同的编译器是不一样的?
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
3楼  发表于: 2012-04-05 16:42

 回 楼主(chenxianzju) 的帖子

gcc恐怕是不认识__irq的, 你所说的源代码恐怕也不是适用于arm-linux-gcc来交叉编译的。如果你确定它可以用arm-linux-gcc来编译,你需要加上下面的宏定义

#define __irq __attribute__((interrupt("IRQ"))

参考这里http://www.ohse.de/uwe/articles/gcc-attributes.html#func-interrupt
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 65930
精华: 0
发帖: 24
金钱: 125 两
威望: 25 点
综合积分: 48 分
注册时间: 2012-03-24
最后登录: 2012-04-16
4楼  发表于: 2012-04-05 18:15
谢谢你!请问什么编译器可以认识 __irq 呢?这是一种比较特殊的语法是么?
级别: 新手上路
UID: 65930
精华: 0
发帖: 24
金钱: 125 两
威望: 25 点
综合积分: 48 分
注册时间: 2012-03-24
最后登录: 2012-04-16
5楼  发表于: 2012-04-05 18:16

 回 3楼(kasim) 的帖子

谢谢你!请问什么编译器可以认识 __irq 呢?这是一种比较特殊的语法是么
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
6楼  发表于: 2012-04-05 18:50

 回 5楼(chenxianzju) 的帖子

我想ARM自家的RVCT应该可以吧。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 65930
精华: 0
发帖: 24
金钱: 125 两
威望: 25 点
综合积分: 48 分
注册时间: 2012-03-24
最后登录: 2012-04-16
7楼  发表于: 2012-04-05 21:01
谢谢!!