找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6407|回复: 0
打印 上一主题 下一主题
收起左侧

test.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_s...

[复制链接]
跳转到指定楼层
楼主
ID:85109 发表于 2015-7-8 22:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用stm32f10x_lib.h文件时的问题
    在用uvison4.x(MDK4.x)建立一个开发STM32F103的工程:test.uvproj
在工程中加入源程序main.c文件,源代码内容如下:
#include "stm32f10x_lib.h"
int main(void)
{
  return 0;

}
编译会出现错误,使得入门者难以继续深入学习STM32。
错误提示的全部信息如下:
test.axf: Error: L6218E: Undefined symbolSystemInit (referred from startup_stm32f10x_md.o).
解决办法如下:
  此问题错误提示已经十分清楚的告诉你错在哪里了:Undefined symbol SystemInit,中文意思就是:SystemInit这个符号没有定义,随后的小括号告诉你了,是在startup_stm32f10x_md.o这个文件里面被提及的,这个.o文件在工程里面并没有,它是一个在编译的时候根据.c/.s文件生成的。所以我们只需要找到工程里面的.s或者.c即可,这里对应这个名字的就是startup_stm32f10x_md.s了。
   打开文件startup_stm32f10x_md.s,在此文件里面可以找到SystemInit的所在:
; Resethandler

Reset_Handler   PROC
                EXPORT Reset_Handler            [WEAK]
    IMPORT  __main
    IMPORT  SystemInit
                LDR    R0, =SystemInit
                BLX    R0
                LDR    R0, =__main
                BX     R0
                ENDP
  
原来在复位中断服务函数里面,调用了SystemInit这个函数,而这个函数在.s文件里面没有定义。
   所以解决的办法有两个。
  1,在外部(其他任何.c文件里面)定义SystemInit这个函数,哪怕是个空函数也可以。
   2,把   
   IMPORT SystemInit
                LDR    R0, =SystemInit
                BLX    R0

     这三句话去掉。
  例如,采用2方法,注释掉3行,改后为:

; Resethandler
Reset_Handler   PROC
                EXPORT Reset_Handler            [WEAK]
    IMPORT  __main
;      IMPORT  SystemInit
;                  LDR    R0, =SystemInit
;                  BLX    R0
                LDR    R0, =__main
                BX     R0
                ENDP
保存后再编译就不会出现上面的错误了。   

至此,此问题解决。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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