首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

2440的一个裸机程序,老是编译异常,请

2013-08-23 
【求助】2440的一个裸机程序,老是编译错误,请高手指点【...】今天写程序的时候出现了一个问题,部分代码如下#de

【求助】2440的一个裸机程序,老是编译错误,请高手指点
【...】今天写程序的时候出现了一个问题,部分代码如下
#define N (64)   //半个基波周期内的载波数量
#defineM (0.8)   //调制度
#defineFUNDAMENTAL_CYCLE(0.02)   //基波周期
#defineTIMER_CLOCK(25000000)          //设置定时器时钟为25M
#defineSPWM_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(Count);
  } 
就是把Count-1定义为一个常数,编译也通过。
我真的没招了,我想把 Spwm_Code_H 这个数组定义为全局数组,但是就是会出错,请大家帮我解决下,谢谢。 C 2440
[解决办法]
Spwm_Code_H 这个宏展开是啥,你的不是编译期的错误,属于最后的link错误,找不到函数实现 __aeabi_dsub等。
[解决办法]
arm-linux-ld 改成 arm-linux-gcc 试试

热点排行