關(guān)于STM32頭文件
還有一個問題,已經(jīng)把此頭文件放在了工程文件夾內(nèi),但是編譯時出現(xiàn)這個問題:.incstm32f10x_type.h(28): error: #256: invalid redeclaration of type name "s32" (declared at line487of ".incstm32f10x.h"),沒有任何懷疑,錯誤提示已經(jīng)明確地說s32這個名字已經(jīng)在incstm32f10x.h的487行定義過,所以stm32f10x_type.h中對s32的定義屬于重復(fù)定義,無效。
本文引用地址:http://m.butianyuan.cn/article/201611/317808.htm那么為什么會出現(xiàn)重復(fù)定義呢? 通過雙擊該提示到stm32f10x_type.h定義s32的地方,以及到stm32f10x.h的第487行定義s32的地方,會發(fā)現(xiàn)果然有同樣的定義,
如圖所示:
這是不同的頭文件,而且在stm32f10x.h這個頭文件中會包含stm32f10x_type.h(如圖,stm32f10x.h包含了另一個頭文件stm32f10x_conf.h,而在stm32f10x_conf.h里面包含了stm32f10x_type.h,即相當(dāng)于stm32f10x.h中包含stm32f10x_type.h——即①包含了②,②包含了③,那么①就包含了③,有點(diǎn)啰嗦,但會顯得更清楚一些,呵呵),
為什么還會出現(xiàn)在這兩個相關(guān)聯(lián)的頭文件中定義了同一個名字s32呢?
問題就出在版本上。
在我的這個工程中,因為我打算都用雙引號 “ ” 來包含頭文件,所以要把頭文件都放到我的工程文件夾里,并設(shè)置好路徑(這里不細(xì)說,有問題加后面的QQ聯(lián)系)。問題就來了,stm32f10x.h這個頭文件是keil mdk中的,路徑為keil mdkARMINCSTSTM32F10x,而stm32f10x_conf.h是來自我先前安裝的IAR編譯里的(前面說了,stm32f10x.h中是會包含stm32f10x_conf.h的。至于為什么會把IAR這個編譯器中的頭文件放進(jìn)去,就不說了,呵呵),正確的方法是只是用一個編譯器中的頭文件,保證版本的一致性,在我的工程中,應(yīng)該使用kei mdk中的stm32f10x_conf.h,而不是IAR中的。
那么我們看看這不同的編譯器中的同名頭文件有什么區(qū)別,如下圖:
左邊的是Keil中的,版本為V3.5.0,右邊是IAR中的,版本為V1.0,版本不同?。?!
版本不同,里面定義的內(nèi)容不同,自然會出現(xiàn)不能替換的問題了。
所以要特別注意相關(guān)聯(lián)的頭文件(有包含關(guān)系的)是不是來自同一個版本。
評論