打印
[ZLG-ARM]

VICDefVectAddr=(int)IRQ_Eint3;这个地方报错!高手指点?

[复制链接]
2163|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
duck_2008|  楼主 | 2007-1-20 21:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ADDR, vi, CD, ic, se
#include "config.h"
#define BEEPCON 1<<7
        int main (void)
{// add user source code 
    IRQEnable();//Open the IRQ 
    PINSEL1=3<<8;
    IO0DIR=BEEPCON;
    VICIntSelect=0x00000000;
    VICDefVectAddr=(int)IRQ_Eint3;这个地方报错!高手指点是怎么回事?
    EXTMODE=0x00;
    EXTINT=1<<3;
    VICIntEnable=1<<17;
    while(1);
    return 0;
}
void _irqIRQ_Eint3(void)//Interrupt handlers can be written in C using the compiler keyword __irq,
{
 uint32 i;
 
 i=IO0SET;
 if(i&BEEPCON==0)
 {
  IO0SET=BEEPCON;
 }
 else
 {
  IO0CLR=BEEPCON;
 }
 while((EXTINT&1<<3)!=0)
 {
  EXTINT=1<<3;
 }
 VICVectAddr=0;
}
Error   : C2456E: undeclared name, inventing 'extern int IRQ_Eint3'
main.c line 33   
这个是为什么?谢谢了!

相关帖子

沙发
computer00| | 2007-1-20 22:42 | 只看该作者

没有声明变量

在前面加一条

void _irq IRQ_Eint3(void);

或者把main函数放到最后面.

注意,好象你少了个空格。

使用特权

评论回复
板凳
hotpower| | 2007-1-20 23:46 | 只看该作者

00不错~~~

使用特权

评论回复
地板
王紫豪| | 2007-1-21 08:35 | 只看该作者

你俩都不错

使用特权

评论回复
5
zjb800zjb| | 2007-1-30 00:10 | 只看该作者

不仅少了个空格还少了一横_

void _irqIRQ_Eint3(void);
这句应写为
void __irq IRQ_Eint3(void);
注意irq前面是两个小横

使用特权

评论回复
6
zjb800zjb| | 2007-1-30 00:25 | 只看该作者

对不起,我重新回答一下

1。你的程序书写有问题,这个报错是说你调用的这个函数编译器不认识,为什么呢?因为你在调用这个函数之前,没有对其定义过!你可能会说我定义了啊。但是你仔细看看,你把IRQ_Eint3这个函数的定义放到main()的后面去啦!所以编译时就会出错喽。你应该把要调用的函数在前面先定义好。所以你的这个程序把主程序main()放到最后就会好了。(其实函数的定义放到main后面也不是不可以,但还是要先声明这个函数。详情请查询C语言书)但是~~~
2。你的void _irqIRQ_Eint3(void)这个函数的声明有问题应该写为
void __irq IRQ_Eint3(void);
注意到了么?我给你多加了一横“_”,以及一个空格。“__irq”是ADS的关键字,用来告诉系统在调用完这个中断服务程序(ISR)后要退出IRQ模式(因为发生IRQ中断后ARM会进入IRQ模式),回到原来的模式下去。

使用特权

评论回复
7
zjb800zjb| | 2007-1-30 00:28 | 只看该作者

屏幕字太小,提醒一下LZ

屏幕上的字太小,所以两横__看起来好像还是连在一起的,但确实应该用两横,LZ注意一下。当初我在这个地方也迷惑过的。
两横 __
一横 _
有区别哦。

使用特权

评论回复
8
胡永江| | 2007-11-16 14:29 | 只看该作者

我也一样

我也在__那个地方迷惑过

为什么设计的时候不设计成一横呢
省得很多人都走进这个陷阱

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

5

帖子

1

粉丝