OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 20878|回复: 7

求助关于axf: Error: L6218E: Undefined symbol (referred from main)的问题

[复制链接]

31

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
266
金钱
266
注册时间
2012-9-3
在线时间
4 小时
发表于 2012-9-10 20:01:16 | 显示全部楼层 |阅读模式

我是新接触stm32的,学了没多久就接了一个项目做(太阳位置跟踪系统,用5110显示方位角和高度角),可能对keil for ARM的编程环境还不是很了解,现在整个工程都写好了,但是就困于这一个错误。

sun_12864.axf: Error: L6218E: Undefined symbol ReadTimeFlag (referred from main.o).”

我是首先在51上写好的,编译没问题,也可以显示。可是改用stm32写就出现这个问题了。我试过在主函数上再次声明ReadTimeFlag这个标志位,反而出现更多错误。这是我的相关程序
彩色部分是说明错误的地方
/***************************************************************************
                                                            主函数部分
****************************************************************************/
#include <stm32f10x_lib.h>
#include <stdio.h>
#include "DS1302.h"
#include "key.h"
#include "AngleCalculate.h"
#include "sys.h"
#include "usart.h"  
#include "delay.h"
#include "timer.h"

 

FP32 s;
FP32 k;

int main()
{  
 char  temp1[16];
 //
 Ds1302_Init();
 Ds1302_Read_Time();   //首次读取时间
    if((time_buf1[2]+time_buf1[7])==0) //如果所有参数都为0,写入一个初始值
    Ds1302_Write_Time();
 Stm32_Clock_Init(9); //系统时钟设置
 delay_init(72);      //延时初始化
 uart_init(72,9600);  //串口初始化     
 while(1)
  { 
   Readtime();
   Timerx_Init(1000,7199);
      s = (AziAngleCalculate( )/PI)*180;
   k = (EleAngleCalculate( )/PI)*180;
  if( ReadTimeFlag == 1 ) //定时读取ds1302 定时时间到 则标志位置1,处理过时间参数标志位清零
  {       
     ReadTimeFlag = 0;  //标志位清零
    Ds1302_Read_Time();//读取时间参数
     sprintf(temp1,"DATE %02d-%02d-%02d %d",(int)time_buf1[1],(int)time_buf1[2],(int)time_buf1[3],(int)time_buf1[7]);//年月日周
       LCD_PutString(0,1,temp1);//显示第一行
     sprintf(temp1,"%02d:%02d:%02d  %02d°%02d",(int)time_buf1[4],(int)time_buf1[5],(int)time_buf1[6],(int)time_buf1[8],(int)time_buf1[9]);//时分秒
     LCD_PutString(0,2,temp1);//显示第二行
   sprintf(temp1,"Hi %f",k);
   LCD_PutString(0,3,temp1);// 3
   sprintf(temp1,"Az %f",s); //
  LCD_PutString(0,4,temp1); // 4
    }
        
  }     
}
/**********************************************************************************************
   这是计算太阳方位角的函数中与错误有关的部分,即那个标志位ReadTimeFlag.而事实上我已经在这个.c文件的头文件里定义了,下面有显示
*********************************************************************************************/
#include <math.h>
#include"AngleCalculate.h"
#include"DS1302.h"

unsigned int Year,Month,Day,Hour,Min,Sec;

void Readtime(void)
{
 if( ReadTimeFlag == 1 )   //大约100ms读一次时间,经纬度变化一次
  {
   ReadTimeFlag = 0;
      Ds1302_Read_Time();
    Year = time_buf1[1];  // 赋值年
   Month = time_buf1[2];  // 赋值月
     Day = time_buf1[3];  // 赋值日
    Hour = time_buf1[4];  // 赋值时
    Min  = time_buf1[5];  // 赋值分
    Sec  = time_buf1[6];  // 赋值秒
  }       


/********************************************************************************
         太阳高度角.c文件的头文件(只写了相关部分出来)
***************************************************************/

#ifndef __AngleCalculate_H__
#define __AngleCalculate_H__
#include <math.h>


typedef float          FP32;
typedef double         FP64;

#define PI 3.1415 

extern unsigned char ReadTimeFlag;

 
希望有高手能告诉小弟我怎么做!!!!!万分感谢,由于时间有点紧了,如果你不嫌麻烦可以Q:235843708@qq.com
谢谢!!!!!!!!!
打造完美
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2012-9-10 21:43:50 | 显示全部楼层
ReadTimeFlag 没定义。
你定义之后出现什么错误?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-11-3
在线时间
0 小时
发表于 2015-1-9 15:36:33 | 显示全部楼层
我遇到同样的问题,u8 SysInfoGet(u8 sel)在sysfile.h里已经声明,且已经包含在main函数的头文件中,可仍然有这样的错误出现,我将u8 SysInfoGet(u8 sel)定义放在main函数之前也不行,求解???这个问题困扰好久了!
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-11-3
在线时间
0 小时
发表于 2015-1-9 16:07:59 | 显示全部楼层
我遇到同样的问题,u8 SysInfoGet(u8 sel)在sysfile.h里已经声明,且已经包含在main函数的头文件中,可仍然有这样的错误出现,我将u8 SysInfoGet(u8 sel)定义放在main函数之前也不行,求解???这个问题困扰好久了!
回复 支持 反对

使用道具 举报

1

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
352
金钱
352
注册时间
2012-11-8
在线时间
44 小时
发表于 2015-1-9 17:16:03 | 显示全部楼层
我想楼主是没有搞清楚.c文件和.h文件的作用。 
a.h头文件用来声明在a.c文件中的函数和变量以及定义宏值等操作,而没有定义变量和引入b.c中的变量或函数的功能,如果a.c需要b.c中的函数或变量那么a.c需要包含b.h
楼主头文件中的extern unsigned char ReadTimeFlag是对ReadTimeFlag变量的声明,声明给其他.c使用,你发出来的代码中没有对ReadTimeFlag的定义部分,而只有声明语句,所以会出现这个编译错误。
建议修改方法:加入对ReadTimeFlag的定义:  unsigned char ReadTimeFlag;
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2012-5-23
在线时间
1 小时
发表于 2015-5-8 17:13:48 | 显示全部楼层
回复【5楼】shimengdacs:
---------------------------------
就是要再次在别的.C定义?
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

高级会员

Rank: 4

积分
915
金钱
915
注册时间
2016-7-1
在线时间
88 小时
发表于 2016-7-1 11:38:54 | 显示全部楼层
变量定义时要确保是全局变量
回复 支持 反对

使用道具 举报

1

主题

17

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2020-11-15
在线时间
11 小时
发表于 2021-4-8 00:33:22 | 显示全部楼层
shimengdacs 发表于 2015-1-9 17:16
我想楼主是没有搞清楚.c文件和.h文件的作用。&nbsp;
a.h头文件用来声明在a.c文件中的函数和变量以及定义宏 ...

解决了我遇到的问题,我也是没分清声明和定义,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 21:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表