STM32寄存器開發系列(1)啓動代碼設計

遇到的問題

直接引用startup_stm32f10x_hd.s的問題

在有了main函數以後會有以下啊錯誤

..\Output\athenaH.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_h

此問題錯誤提示已經十分清楚的告訴你錯在哪裏了,Undefined symbol SystemInit ,翻譯過來就是:SystemInit 這個符號沒有定義,隨後的小括號告訴你了,是在 startup_stm32f0xx.o 這個文件裏面被提及的,這個.o文件在工程裏面並沒有,它是一個在編譯的時候根據.c/.s文件生成的。所以我們只需要找到工程裏面的.s或者.c即可,這裏對應這個名字的就是 startup_stm32f0xx.s了。

; Reset handler
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

這三句話註釋掉。

SystemInit 是在使用main前做一些初始化工作,如果不需要官方的庫,只是自己編寫一些簡單的應用,則可以把此函數禁掉。譬如創建工程時直接加入s文件,剩下的自己簡單編程,此時就不要SystemInit。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章