[ZLG-ARM] 求助啊 在程序编译时出现错误啊

[复制链接]
2726|7
 楼主| TOMLV 发表于 2009-1-8 17:05 | 显示全部楼层 |阅读模式
菜鸟在程序中定义了这样一个结构<br />typedef&nbsp;struct&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;&nbsp;&nbsp;MotorDirection;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;&nbsp;&nbsp;PulseDirection;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;StepsCounter;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;&nbsp;&nbsp;MotorStepsSum;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;&nbsp;&nbsp;MotorStepsOld;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;Timer2Flagint;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;&nbsp;&nbsp;MotorStatus;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;Counter;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;Sum;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;TimerPulseCounter;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;TimeIntcount;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT32U&nbsp;&nbsp;CounterTime;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;MaxFrequent;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;MinFrequent;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;IntervalFrequent;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}&nbsp;MOTOR_INFO;<br /><br />&nbsp;extern&nbsp;MOTOR_INFO&nbsp;MotorInfo[SUMMOTOR];<br />在定时中断函数中使用&nbsp;<br />void&nbsp;Timer2Handler&nbsp;(void)&nbsp;__irq&nbsp;<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;&nbsp;&nbsp;&nbsp;INT32U&nbsp;&nbsp;&nbsp;&nbsp;timer2_counter=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;T2IR&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;clear&nbsp;interrupt&nbsp;flag&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;timer2_counter++;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&ltSUMMOTOR;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MotorInfo.Timer2Flagint++;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;i=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;MoveStepMotor(&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(timer2_counter&gt=10000000)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;timer2_counter=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Acknowledge&nbsp;Interrupt&nbsp;*/<br />}<br />可是出现这样的错误<br />Error&nbsp;&nbsp;&nbsp;:&nbsp;C2456E:&nbsp;undeclared&nbsp;name,&nbsp;inventing&nbsp;'extern&nbsp;int&nbsp;MotorInfo'<br />timer.c&nbsp;line&nbsp;145&nbsp;&nbsp;&nbsp;<br />Project:&nbsp;UNIVERSAL.mcp,&nbsp;Target:&nbsp;RunInFlash,&nbsp;Source&nbsp;File:&nbsp;timer.c<br /><br />Error&nbsp;&nbsp;&nbsp;:&nbsp;(Serious)&nbsp;C2947E:&nbsp;Illegal&nbsp;types&nbsp;for&nbsp;operands:&nbsp;&ltsubscript&gt<br />timer.c&nbsp;line&nbsp;145&nbsp;&nbsp;&nbsp;<br />Project:&nbsp;UNIVERSAL.mcp,&nbsp;Target:&nbsp;RunInFlash,&nbsp;Source&nbsp;File:&nbsp;timer.c<br /><br />Error&nbsp;&nbsp;&nbsp;:&nbsp;C2456E:&nbsp;undeclared&nbsp;name,&nbsp;inventing&nbsp;'extern&nbsp;int&nbsp;Motornum'<br />StepMotor.c&nbsp;line&nbsp;266&nbsp;&nbsp;&nbsp;<br />Project:&nbsp;UNIVERSAL.mcp,&nbsp;Target:&nbsp;RunInFlash,&nbsp;Source&nbsp;File:&nbsp;StepMotor.c<br /><br />怎么回事啊&nbsp;大侠救命啊<br />
computer00 发表于 2009-1-8 17:24 | 显示全部楼层

没有声明吧?

  
tomlv 发表于 2009-1-9 09:05 | 显示全部楼层

大侠能说清楚点么

  
tomlv 发表于 2009-1-9 10:05 | 显示全部楼层

我的天啊 没有人帮助我啊 我很着急啊

  
tomlv 发表于 2009-1-9 15:47 | 显示全部楼层

没有人理阿 没有人理啊 救命啊

  
mohanwei 发表于 2009-1-10 12:10 | 显示全部楼层

声明跟定义是两码事

以下这段应该出现再xxx.h里:<br />typedef&nbsp;struct<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;&nbsp;&nbsp;MotorDirection;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;&nbsp;&nbsp;PulseDirection;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;StepsCounter;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;&nbsp;&nbsp;MotorStepsSum;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;&nbsp;&nbsp;MotorStepsOld;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;Timer2Flagint;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;&nbsp;&nbsp;MotorStatus;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;Counter;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;Sum;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;TimerPulseCounter;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;TimeIntcount;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT32U&nbsp;&nbsp;CounterTime;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;MaxFrequent;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;MinFrequent;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;&nbsp;IntervalFrequent;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}&nbsp;MOTOR_INFO;<br /><br />extern&nbsp;MOTOR_INFO&nbsp;MotorInfo[SUMMOTOR];<br /><br />然后在yyy.c里应该有如下定义:<br />MOTOR_INFO&nbsp;MotorInfo[SUMMOTOR];<br /><br />最后你才能在在定时器代码里使用:<br />#include&nbsp;&quot;xxx.h&quot;<br />void&nbsp;Timer2Handler&nbsp;(void)&nbsp;__irq<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;&nbsp;&nbsp;&nbsp;INT32U&nbsp;&nbsp;&nbsp;&nbsp;timer2_counter=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;T2IR&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;clear&nbsp;interrupt&nbsp;flag&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;timer2_counter++;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&ltSUMMOTOR;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MotorInfo.Timer2Flagint++;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;i=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;MoveStepMotor(&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(timer2_counter&gt=10000000)<br />&nbsp;&nbsp;&nbsp;&nbsp;timer2_counter=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Acknowledge&nbsp;Interrupt&nbsp;*/<br />}<br />
tomlv 发表于 2009-1-14 10:52 | 显示全部楼层

受教了 虽然已经解决 还是谢谢

  
QChuang 发表于 2009-2-3 20:43 | 显示全部楼层

头文件

是应该放头文件里<br /><br />有一点不明白<br />void&nbsp;Timer2Handler&nbsp;(void)&nbsp;__irq<br />这个中断函数我都是写成<br />void&nbsp;__irq&nbsp;Timer2Handler&nbsp;()<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

16

帖子

0

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