打印
[ZLG-ARM]

求助啊 在程序编译时出现错误啊

[复制链接]
1265|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
TOMLV|  楼主 | 2009-1-8 17:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
菜鸟在程序中定义了这样一个结构
typedef struct 
{
    INT8U   MotorDirection;     
    INT8U   PulseDirection;          
    INT16U  StepsCounter;        
    INT16U    MotorStepsSum;       
    INT16U    MotorStepsOld;       
    
    INT16U  Timer2Flagint;       
    
    INT8U   MotorStatus;        
    INT16U  Counter;     
    INT16U  Sum;         
    INT16U  TimerPulseCounter;   
    INT16U  TimeIntcount;        
    INT32U  CounterTime;        
    INT16U  MaxFrequent;        
    INT16U  MinFrequent;         
    INT16U  IntervalFrequent;        
} MOTOR_INFO;

 extern MOTOR_INFO MotorInfo[SUMMOTOR];
在定时中断函数中使用 
void Timer2Handler (void) __irq 
{  
    static    INT32U    timer2_counter=0;
    INT8U i;
    T2IR = 1;            /* clear interrupt flag */
    timer2_counter++;
    for(i=0;i<SUMMOTOR;i++)
    {
     MotorInfo.Timer2Flagint++;
    }
    i=0;
    MoveStepMotor( );            
    if(timer2_counter>=10000000) 
    timer2_counter=0;
    VICVectAddr = 0;    /* Acknowledge Interrupt */
}
可是出现这样的错误
Error   : C2456E: undeclared name, inventing 'extern int MotorInfo'
timer.c line 145   
Project: UNIVERSAL.mcp, Target: RunInFlash, Source File: timer.c

Error   : (Serious) C2947E: Illegal types for operands: <subscript>
timer.c line 145   
Project: UNIVERSAL.mcp, Target: RunInFlash, Source File: timer.c

Error   : C2456E: undeclared name, inventing 'extern int Motornum'
StepMotor.c line 266   
Project: UNIVERSAL.mcp, Target: RunInFlash, Source File: StepMotor.c

怎么回事啊 大侠救命啊

相关帖子

沙发
computer00| | 2009-1-8 17:24 | 只看该作者

没有声明吧?

使用特权

评论回复
板凳
tomlv| | 2009-1-9 09:05 | 只看该作者

大侠能说清楚点么

使用特权

评论回复
地板
tomlv| | 2009-1-9 10:05 | 只看该作者

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

使用特权

评论回复
5
tomlv| | 2009-1-9 15:47 | 只看该作者

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

使用特权

评论回复
6
mohanwei| | 2009-1-10 12:10 | 只看该作者

声明跟定义是两码事

以下这段应该出现再xxx.h里:
typedef struct
{
    INT8U   MotorDirection;     
    INT8U   PulseDirection;          
    INT16U  StepsCounter;        
    INT16U    MotorStepsSum;       
    INT16U    MotorStepsOld;       
    
    INT16U  Timer2Flagint;       
    
    INT8U   MotorStatus;        
    INT16U  Counter;     
    INT16U  Sum;         
    INT16U  TimerPulseCounter;   
    INT16U  TimeIntcount;        
    INT32U  CounterTime;        
    INT16U  MaxFrequent;        
    INT16U  MinFrequent;         
    INT16U  IntervalFrequent;        
} MOTOR_INFO;

extern MOTOR_INFO MotorInfo[SUMMOTOR];

然后在yyy.c里应该有如下定义:
MOTOR_INFO MotorInfo[SUMMOTOR];

最后你才能在在定时器代码里使用:
#include "xxx.h"
void Timer2Handler (void) __irq
{  
    static    INT32U    timer2_counter=0;
    INT8U i;
    T2IR = 1;            /* clear interrupt flag */
    timer2_counter++;
    for(i=0;i<SUMMOTOR;i++)
    {
     MotorInfo.Timer2Flagint++;
    }
    i=0;
    MoveStepMotor( );            
    if(timer2_counter>=10000000)
    timer2_counter=0;
    VICVectAddr = 0;    /* Acknowledge Interrupt */
}

使用特权

评论回复
7
tomlv| | 2009-1-14 10:52 | 只看该作者

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

使用特权

评论回复
8
QChuang| | 2009-2-3 20:43 | 只看该作者

头文件

是应该放头文件里

有一点不明白
void Timer2Handler (void) __irq
这个中断函数我都是写成
void __irq Timer2Handler ()

使用特权

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

本版积分规则

2

主题

16

帖子

0

粉丝