[ZLG-ARM] VICDefVectAddr=(int)IRQ_Eint3;这个地方报错!高手指点?

[复制链接]
3121|7
 楼主| duck_2008 发表于 2007-1-20 21:49 | 显示全部楼层 |阅读模式
ADDR, vi, CD, ic, se
#include&nbsp;&quot;config.h&quot;<br />#define&nbsp;BEEPCON&nbsp;1&lt&lt7<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;main&nbsp;(void)<br />{//&nbsp;add&nbsp;user&nbsp;source&nbsp;code&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IRQEnable();//Open&nbsp;the&nbsp;IRQ&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL1=3&lt&lt8;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR=BEEPCON;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntSelect=0x00000000;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICDefVectAddr=(int)IRQ_Eint3;这个地方报错!高手指点是怎么回事?<br />&nbsp;&nbsp;&nbsp;&nbsp;EXTMODE=0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;EXTINT=1&lt&lt3;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnable=1&lt&lt17;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br />void&nbsp;_irqIRQ_Eint3(void)//Interrupt&nbsp;handlers&nbsp;can&nbsp;be&nbsp;written&nbsp;in&nbsp;C&nbsp;using&nbsp;the&nbsp;compiler&nbsp;keyword&nbsp;__irq,<br />{<br />&nbsp;uint32&nbsp;i;<br />&nbsp;<br />&nbsp;i=IO0SET;<br />&nbsp;if(i&BEEPCON==0)<br />&nbsp;{<br />&nbsp;&nbsp;IO0SET=BEEPCON;<br />&nbsp;}<br />&nbsp;else<br />&nbsp;{<br />&nbsp;&nbsp;IO0CLR=BEEPCON;<br />&nbsp;}<br />&nbsp;while((EXTINT&1&lt&lt3)!=0)<br />&nbsp;{<br />&nbsp;&nbsp;EXTINT=1&lt&lt3;<br />&nbsp;}<br />&nbsp;VICVectAddr=0;<br />}<br />Error&nbsp;&nbsp;&nbsp;:&nbsp;C2456E:&nbsp;undeclared&nbsp;name,&nbsp;inventing&nbsp;'extern&nbsp;int&nbsp;IRQ_Eint3'<br />main.c&nbsp;line&nbsp;33&nbsp;&nbsp;&nbsp;<br />这个是为什么?谢谢了!<br /><br />
computer00 发表于 2007-1-20 22:42 | 显示全部楼层

没有声明变量

在前面加一条<br /><br />void&nbsp;_irq&nbsp;IRQ_Eint3(void);<br /><br />或者把main函数放到最后面.<br /><br />注意,好象你少了个空格。
hotpower 发表于 2007-1-20 23:46 | 显示全部楼层

00不错~~~

  
王紫豪 发表于 2007-1-21 08:35 | 显示全部楼层

你俩都不错

  
zjb800zjb 发表于 2007-1-30 00:10 | 显示全部楼层

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

void&nbsp;_irqIRQ_Eint3(void);<br />这句应写为<br />void&nbsp;__irq&nbsp;IRQ_Eint3(void);<br />注意irq前面是两个小横<br />
zjb800zjb 发表于 2007-1-30 00:25 | 显示全部楼层

对不起,我重新回答一下

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

屏幕字太小,提醒一下LZ

屏幕上的字太小,所以两横__看起来好像还是连在一起的,但确实应该用两横,LZ注意一下。当初我在这个地方也迷惑过的。<br />两横 __<br />一横 _<br />有区别哦。
胡永江 发表于 2007-11-16 14:29 | 显示全部楼层

我也一样

我也在__那个地方迷惑过<br /><br />为什么设计的时候不设计成一横呢<br />省得很多人都走进这个陷阱
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

5

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部