【...】今天写程序的时候出现了一个问题,部分代码如下
#define N (64) //半个基波周期内的载波数量
#define M (0.8) //调制度
#define FUNDAMENTAL_CYCLE (0.02) //基波周期
#define TIMER_CLOCK (25000000) //设置定时器时钟为25M
#define SPWM_CALCULATEF_H(i) (TIMER_CLOCK*( ( M*(cos( ((i)-1)*3.14/N )-cos((i)*3.14/N) ) )*(FUNDAMENTAL_CYCLE/2)/3.14))
unsigned int Spwm_Code_H[N]={0};
/*-------------------------------------主函数-------------------------------------*/
int main(void)
{
unsigned char Count = 0,Run_Mode = 0;
init_led();
init_pwm();
init_irq();
while(1){
switch(Run_Mode){
/*计算模式,此模式下将计算的SPWM脉冲宽度对应的定时器初值放入数组里面,需要关闭SPWM输出*/
case CALCULATION_MODE:
TCON &= (~(1<<8)); //首先关闭定时器1;
/*将计算的结果放入数组中*/
for(Count=1;Count<=N;Count++){
Spwm_Code_H[Count-1] = SPWM_CALCULATEF_H(Count);
}
GPBDATA &= (~(1<<5)); //LED1亮代表计算完成
break;
}
}
return 0;
}
【】以上代码直接编译的话,会出现以下错误
main.c:(.text+0x134): undefined reference to `__aeabi_dsub'
main.c:(.text+0x140): undefined reference to `__aeabi_dmul'
main.c:(.text+0x144): undefined reference to `__aeabi_d2uiz'
main.c:(.text+0x160): undefined reference to `__aeabi_i2d'
main.c:(.text+0x16c): undefined reference to `__aeabi_dmul'
main.c:(.text+0x178): undefined reference to `__aeabi_dmul'
main.c:(.text+0x17c): undefined reference to `cos'
main.c:(.text+0x18c): undefined reference to `__aeabi_i2d'
main.c:(.text+0x198): undefined reference to `__aeabi_dmul'
main.c:(.text+0x1a4): undefined reference to `__aeabi_dmul'
main.c:(.text+0x1a8): undefined reference to `cos'
【】主要问题出在main函数里面的那段红色代码, 就是这句话Spwm_Code_H[Count-1] = SPWM_CALCULATEF_H(Count);
现在是我的调试步奏:方法1:如果我把Spwm_Code_H 这个数组定义在main函数里(上面的代码是定义在main函数外的),编译通过。
方法2:如果我把Spwm_Code_H 这个数组定义在main函数外(就是上面那段代码),然后把这段代码 for(Count=1;Count<=N;Count++){ Spwm_Code_H[Count-1] = SPWM_CALCULATEF_H(Count);
}
改为
for(Count=1;Count<=N;Count++){ Spwm_Code_H[Count-1] = SPWM_CALCULATEF_H(1);
}
就是把Count定义为一个常数,编译也通过。
方法3:如果我把 Spwm_Code_H 这个数组定义在main函数外(就是上面那段代码),然后把这段代码 for(Count=1;Count<=N;Count++){ Spwm_Code_H[Count-1] = SPWM_CALCULATEF_H(Count);
}
改为
for(Count=1;Count<=N;Count++){ Spwm_Code_H[1] = SPWM_CALCULATEF_H(1);
}
就是把Count-1定义为一个常数,编译也通过。
我真的没招了,我想把Spwm_Code_H 这个数组定义为全局数组,但是就是会出错,请大家帮我解决下,谢谢。 |