解決:keil報錯invalid redeclaration of type name 「s32「

2021-01-08 電子產品世界

在ST官網上下的固件包,用STM32F10x_StdPeriph_Lib_V3.4.0/Project/STM32F10x_StdPeriph_Template裡的工程,編譯正確。以下嘗試了兩種新建工程的方法,均失敗:

1。 將固件包裡的例程和相應的CMSIS、StdPeriph_Driver拷到工程下,修改target options裡的C/C++ include paths項為「../;../Src/App;../Src/CMSIS;../Src/Lib」,編譯報錯「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://www.eepw.com.cn/article/201611/317052.htm

2。 若在工程中添加的文件為固件包中的連結(而不是拷貝),完全按照template裡的結構,並將include paths按照template進行修改,編譯報錯「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,工程中使用的為新版,兩者代碼結構上有所不同。而編譯器在編譯了工程文件的同時,自動連結了KEIL安裝目錄下的文件,造成衝突。但是在選項中沒有找到配置是否連結KEIL安裝目錄下LIB的地方。

問題原理:

對照固件包中模板工程的連結情況,逐個對比模板工程和自建工程中,各原始碼連結的所需庫的位置。若模板中連結的是固件包中的文件,如system_stm32f10x.h 或 stm32f10x_config.h,即新版lib;而自建工程中連結的相應文件位置為Keil安裝目錄,說明工程設置中沒有包含該庫的路徑,使編譯器自動尋找安裝目錄中的舊版文件。由於庫代碼結構不同,造成編譯錯誤。因此需要在工程設置的include paths欄中添加新版lib的路徑。

問題解決:

對於第二種建立工程的步驟,通過報錯的信息很容易看出,編譯過程連結了keil安裝目錄下的conf.h,而實際需要使用固件包中的該文件。因此,在include paths中添加固件包conf.h所在目錄,即可解決問題。

對於第一種建立工程的步驟,stm32f10x_type.h不是工程原始碼中直接需要包含和應用的頭文件,不容易找到未設定的連結路徑。因此,採用「問題原理」中的辦法,逐一連結庫對比,修改連結路徑,也可以找到未包含的位置,解決問題。

還需要注意區分的是,路徑中的「../」意為工程文件上一級目錄,「./」為工程文件的同級目錄。我們在一些論壇上看到別人貼的自己的路徑中,第一個即為"../",不是必須的。另外,編譯器只能在當前目錄下搜索文件,不會進入下一級目錄,因此指定的路徑需要很具體。

出現這個問題時,搜了不少論壇,也在論壇上問過大牛,大致都是配置路徑有問題,卻沒有說到具體的解決辦法,自己摸索了好一陣。的確是這個原因,以後如果我遇到相同的提問,估計也會是這麼回答。不過,理論和具體實踐還是有距離的。


相關焦點

  • Python3之十大經典錯誤及其解決辦法
    報錯信息:1NameError: name 'pirnt' is not defined2NameError: name 'sayhi' is not defined3NameError: name 'pd' is not defined錯誤示例1:
  • 《甜心選擇2》英文報錯怎麼辦 遊戲報錯解決方法介紹
    甜心選擇2英文報錯怎麼辦?很多玩家反應會出現這種情況,影響遊戲體驗,今天我們帶來了甜心選擇2遊戲報錯解決方法介紹,幫助大家用最快捷有效的方法杜絕這個問題發生。 甜心選擇2遊戲報錯解決方法介紹 甜心選擇2漢化和mod安裝後,很多人左上角會出現大量英文報錯,影響遊戲觀感體驗 最簡單的解決辦法是打開選項,找到如箭頭所示位置欄目單擊(點擊圖片可查看大圖
  • 解決WordPress5.2知更鳥begin主題搜索不顯示及PHP7.0報錯
    以前一直使用begin知更鳥主題的破解版,前段時間終於如正版了,以前的begin lts主題破解版有一些問題,這裡愛遊分享下如何解決及處理,完美的解決這些錯誤。下面的這些只是針對begin lts破解版,正版沒有在這些問題,有條件的請支持正版。
  • KEIL4 工程到 KEIL5 程序的移植方法
    首先我們用 keil5 打開 keil4 的工程, 則會彈出下面的窗口, 這就是我們程序兼容的關鍵。第一步:選擇Migarte to Device Pack這需要配置keil軟體 在option屬性中Asm選項卡中去掉Enable ARM/Thumb Interworking選項。
  • 出票失敗,為何報錯744ERROR?
    不知大家是否注意到,出票失敗致電10108401諮詢時,客服人員會詢問您出票失敗時系統反饋了什麼信息。出票失敗後,外航反饋的報錯代碼在一定程度上指明了出票失敗的原因或者問題所在。如果您將出票報錯代碼反饋給客服人員,有些問題會很快解決。比如,出票失敗,系統報錯744ERROR。一般744表示 Missing or invalid airport check-in identification (FOID),即缺少或無效的機場登機身份。
  • keil5.24創建uCOSIII工程實現stm32實時作業系統(環境配置)
    設置後會關聯stm32f10x.conf.h,所以後者你不用管。system_stm32f10x.c是系統初始化程序,新版本systeminit是自動調用,然後跳到main(的,你如果需要在main前初始化系統某些參數可以修改。startup_stm32f10x_hd.s NVIC的中斷映射表,非常關鍵,需要修改,後面會提到。
  • 電腦提示invalid partition table開不了機怎麼辦?附解決方法
    最近電腦開機之後就出現黑屏,但是全黑的屏幕上只顯示了一句英文提示了「Invalid partition table」,不知道是什麼問題,電腦重啟多次未能解決。那麼電腦提示invalid partition table開不了機怎麼辦?下面裝機之家分享一下電腦開機顯示invalid partition table的解決方法。
  • 《使命召喚戰區》閃退怎麼辦 閃退不報錯解決方法介紹
    很多朋友最近苦於這款遊戲出現的各種bug,今天我們給大家帶來了使命召喚戰區閃退不報錯解決方法介紹,有需求的同學不要錯過了,一起來看看吧。很多朋友最近苦於這款遊戲出現的各種bug,今天我們給大家帶來了使命召喚戰區閃退不報錯解決方法介紹,有需求的同學不要錯過了,一起來看看吧。
  • 《傳說對決》安裝聯網登陸報錯問題解決方法
    導 讀 傳說對決進入加載不了怎麼辦有些朋友還不清楚,下面就由九遊Crab為大家帶來傳說對決安裝聯網登陸報錯問題解決方法,希望能幫到不清楚的朋友!
  • keil c51 與 MDK 衝突的解決
    最近又作了一些C51的工作,發現keil c51與 mdk 有衝突。解決方法很簡單,根據ARM的樣子也寫個路徑就OK了,如上圖所示修改添加部分。
  • 《英雄聯盟手遊》登陸不了怎麼辦 登錄報錯解決方法大全
    ,要怎麼解決呢?英雄聯盟手遊登陸報錯... 英雄聯盟手遊將於10月27日在日本、韓國、泰國、越南、菲律賓、馬來西亞、新加坡開啟公測,那麼英雄聯盟手遊登陸報錯怎麼辦,要怎麼解決呢?不是很清楚的小夥伴下面和小編一起來看看吧!
  • 使命召喚戰區0230報錯怎麼辦 Golink教你如何解決遊戲報錯問題
    由於是新模式所以目前來看遊戲還不是特別穩定,報錯和無法連接遊戲伺服器等問題已成頑疾了,今天Golink加速器(http://www.golink.com)為玩家帶來報錯和網絡問題的解決辦法。各位遊戲下載好以後最常見的一種報錯應該就是0230了,而導致0230 報錯的原因就是新模式上線太多電腦未及時進行更新,解決辦法也很簡單只需要一下兩個步驟:1.刪除Call of Duty Modern Warfare\bink2w64.dll2.刪除Call of Duty Modern
  • 使命召喚:戰區如何解決BB8報錯代碼?Golink加速器全面加速
    雖然是白給但很多玩家還是因為遊戲報錯等問題而無法進入遊戲,不過不用擔心,Golink加速器www.golink.com為各位玩家梳理了關於遊戲報錯的解決方案,讓我們一起來看一下吧。雖然是白給但很多玩家還是因為遊戲報錯等問題而無法進入遊戲,不過不用擔心,Golink加速器www.golink.com為各位玩家梳理了關於遊戲報錯的解決方案,讓我們一起來看一下吧。
  • What's your name?——少年隊
    心は急なカーブ心卻平地起波瀾一瞬先の自分でさえも 予想つかない連一剎那前的自己都不曾預料最初は What's your name? 突然だが最初是What's your name?I love you 愛してるよ但突然間變為I love you 我愛你啊も一度 What's your name? 戀の迷路再問一次What'S your name?
  • ARM DS-5開發STM32程序(Eclipse配合Keil插件使用)
    本文引用地址:http://www.eepw.com.cn/article/201611/317296.htmhttp://pan.baidu.com/s/1o6iHPVG2.安裝DS-5,並註冊社區版(免費閹割)。
  • 《怒之鐵拳4》運行報錯怎麼辦 運行報錯解決辦法
    導 讀 《怒之鐵拳4》是一款橫版的動作冒險遊戲,有些玩家在入手遊戲之後發現遊戲卻無法啟動,會出現報錯的問題,可能很家不清楚要怎麼解決,所以小編這次就為大家帶來了
  • 《底特律變人》steam打不開怎麼辦 steam閃退報錯解決方法
    目前該作已經上線steam平臺,很多玩家都入手了,今天我們帶來了底特律steam閃退報錯解決方法,有需求的朋友不要錯過了,一起來看下吧。目前該作已經上線steam平臺,很多玩家都入手了,今天我們帶來了底特律steam閃退報錯解決方法,有需求的朋友不要錯過了,一起來看下吧。