遇到的問題
直接引用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。