新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 解決:keil報(bào)錯(cuò)invalid redeclaration of type name “s32“

解決:keil報(bào)錯(cuò)invalid redeclaration of type name “s32“

作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò) 收藏
在ST官網(wǎng)上下的固件包,用STM32F10x_StdPeriph_Lib_V3.4.0/Project/STM32F10x_StdPeriph_Template里的工程,編譯正確。以下嘗試了兩種新建工程的方法,均失敗:

1。 將固件包里的例程和相應(yīng)的CMSIS、StdPeriph_Driver拷到工程下,修改target options里的C/C++ include paths項(xiàng)為“../;../Src/App;../Src/CMSIS;../Src/Lib”,編譯報(bào)錯(cuò)“D:/Keil/ARM/INC/ST/STM32F10x/stm32f10x_type.h(23): error: #256: invalid redeclaration of type name "s32" (declared at line 470 of "Src/App/stm32f10x.h")”等。

本文引用地址:http://2s4d.com/article/201611/317052.htm

2。 若在工程中添加的文件為固件包中的鏈接(而不是拷貝),完全按照template里的結(jié)構(gòu),并將include paths按照template進(jìn)行修改,編譯報(bào)錯(cuò)“Keil/ARM/INC/ST/STM32F10x/stm32f10x_conf.h(147): warning: #47-D: incompatible redefinition of macro "HSE_Value" (declared at line 511 of "STM32F10x_StdPeriph_Lib_V3.4.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h")”等。

KEIL安裝目錄下的為舊版lib,工程中使用的為新版,兩者代碼結(jié)構(gòu)上有所不同。而編譯器在編譯了工程文件的同時(shí),自動(dòng)鏈接了KEIL安裝目錄下的文件,造成沖突。但是在選項(xiàng)中沒有找到配置是否鏈接KEIL安裝目錄下LIB的地方。

問(wèn)題原理:

對(duì)照固件包中模板工程的鏈接情況,逐個(gè)對(duì)比模板工程和自建工程中,各源代碼鏈接的所需庫(kù)的位置。若模板中鏈接的是固件包中的文件,如system_stm32f10x.h 或 stm32f10x_config.h,即新版lib;而自建工程中鏈接的相應(yīng)文件位置為Keil安裝目錄,說(shuō)明工程設(shè)置中沒有包含該庫(kù)的路徑,使編譯器自動(dòng)尋找安裝目錄中的舊版文件。由于庫(kù)代碼結(jié)構(gòu)不同,造成編譯錯(cuò)誤。因此需要在工程設(shè)置的include paths欄中添加新版lib的路徑。

問(wèn)題解決:

對(duì)于第二種建立工程的步驟,通過(guò)報(bào)錯(cuò)的信息很容易看出,編譯過(guò)程鏈接了keil安裝目錄下的conf.h,而實(shí)際需要使用固件包中的該文件。因此,在include paths中添加固件包c(diǎn)onf.h所在目錄,即可解決問(wèn)題。

對(duì)于第一種建立工程的步驟,stm32f10x_type.h不是工程源代碼中直接需要包含和應(yīng)用的頭文件,不容易找到未設(shè)定的鏈接路徑。因此,采用“問(wèn)題原理”中的辦法,逐一鏈接庫(kù)對(duì)比,修改鏈接路徑,也可以找到未包含的位置,解決問(wèn)題。

還需要注意區(qū)分的是,路徑中的“../”意為工程文件上一級(jí)目錄,“./”為工程文件的同級(jí)目錄。我們?cè)谝恍┱搲峡吹絼e人貼的自己的路徑中,第一個(gè)即為"../",不是必須的。另外,編譯器只能在當(dāng)前目錄下搜索文件,不會(huì)進(jìn)入下一級(jí)目錄,因此指定的路徑需要很具體。

出現(xiàn)這個(gè)問(wèn)題時(shí),搜了不少論壇,也在論壇上問(wèn)過(guò)大牛,大致都是配置路徑有問(wèn)題,卻沒有說(shuō)到具體的解決辦法,自己摸索了好一陣。的確是這個(gè)原因,以后如果我遇到相同的提問(wèn),估計(jì)也會(huì)是這么回答。不過(guò),理論和具體實(shí)踐還是有距離的。



關(guān)鍵詞: keil報(bào)

評(píng)論


技術(shù)專區(qū)

關(guān)閉