STM32 新手常見的一個(gè)錯(cuò)誤并給出解決方法
程序錯(cuò)誤解決:
1...\OutProj\test.axf: Error: L6218E: Undefined symbol SystemInit(referred from startup_stm32f10x_md.o).
這個(gè)錯(cuò)誤很明顯提示我們錯(cuò)誤就是:沒有定義SystemInit這個(gè)符號(hào),然后參考startup_stm32f10x_md.o
但是這個(gè)是由startup_stm32f10x_md.s生成的,一般.o文件是由.c或者.s生成
當(dāng)找到錯(cuò)誤的原因,我們就可以進(jìn)去startup_stm32f10x_md.s文件中
找到定義SystemInit這個(gè)文件。
在此文件里面可以找到SystemInit的所在:
;Reset handler
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
IMPORT SystemInit
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
原來在復(fù)位中斷服務(wù)函數(shù)里面,調(diào)用了SystemInit這個(gè)函數(shù),而這個(gè)函數(shù)在.s文件里面沒有定義。
所以解決的辦法有下面三個(gè)
1.在外部(其他任何.c文件里面)定義SystemInit這個(gè)函數(shù),哪怕是個(gè)空函數(shù)也可以。
2.把
IMPORT SystemInit
LDR R0, =SystemInit
BLX R0
這兩句話注釋掉或者去掉。
3.可以添加system_stm32f10x.c這個(gè)庫文件,到工程里面,也可以解決。
但是第三種方法比較麻煩,因?yàn)槿绻阕约憾x了一些函數(shù),也許和system_stm32f10x.c有沖突
那么就要改成一樣的函數(shù)名字或者變量名。不推薦使用這種方法。
4.當(dāng)然你也可以重新編寫startup_stm32f10x_md.s這個(gè)文件。
推薦使用第二種方法,快捷,方便。
至此,此問題解決。
聯(lián)系客服