导航

stm32第一个程序遇到的问题

Posted on 2013-08-05 18:21  莫怀远  阅读(672)  评论(0)    收藏  举报

在链接的时候出现了这个错误 Undefined symbol SystemInit (referred from startup_stm32f10x_md.o)

在网上查找到原因所在

 

startup_stm32f10x_md.o这个文件里面被提及的,这个.o文件在工程里面并没有,它是一个在编译的时候根据.c/.s文件生成的。所以我们只需要找到工程里面的.s或者.c即可,这里对应这个名字的就是startup_stm32f10x_md.s了。
在此文件里面可以找到SystemInit的所在:
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,把                
                
LDR     R0, =SystemInit

                
BLX     R0

     
这两句话去掉。

 

 

按照上面的方法去掉两句话后,仍然不成功,当把  LDR     R0, =SystemInit 前面那句话IMPORT  SystemInit也去掉后 第一个程序成功通过