久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 16349|回復(fù): 3
收起左側(cè)

error: #256: invalid redeclaration of type name "s32" (declared at

[復(fù)制鏈接]
ID:82083 發(fā)表于 2015-6-9 02:18 | 顯示全部樓層 |閱讀模式
在編譯時,遇到如下錯誤提示D:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(26):error:  #256: invalid redeclaration of type name"s32" (declared at line 312 of"D:\Keil\ARM\INC\ST\STM32F10x\stm32f10x.h")讓菜鳥我很是頭痛,找了好多網(wǎng)頁解決不了問題,最后瀏覽到了51hei給的提示:
重復(fù)定義了。
估計你包含了stm32f10x_lib.h又包含了stm32f10x.h,導(dǎo)致這個情況。
這兩個,你只能選一個的。
這樣我開始了,艱苦的尋找在哪里包含了這兩個文件,在主函數(shù)里發(fā)現(xiàn)了stm32f10x.h頭文件,如下所示


抱著試試看的心態(tài)把stm32f10x.h頭文件,更改為stm32f10x_lib.h頭文件,竟然沒錯了。
開心,僅為像我一樣的菜鳥提供一個解決方法。

解決方案1.1:
關(guān)于stm32f103報錯:error: #256: invalid redeclaration of type name"s32",我也來說兩句吧。
這個具體來說是因為引用了自己建的固件庫,但是沒有配置路徑,要把工程的路徑配置為當(dāng)前文件夾,
可以在keil里面建好的工程里,右擊target 1,點擊第一個選項“option for targer"targer 1"”,在"C/C++"選項卡里的“Include Paths”一欄里加入你當(dāng)前自己編輯的固件庫路徑,我這邊的是“.\SRC;.\Libraries\STM32F10x_StdPeriph_Driver\inc;.\Libraries\CMSIS\Core\CM3”,大家可以參考一下,這里面有里有3個文件夾,輸入好后,按“ok”按鈕,重新編譯下,應(yīng)該就可以了。



解決方案2:
將新版本的庫 全部復(fù)制
\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\inc
粘貼到MDK安裝目錄就能解決
C:\Keil\ARM\INC\ST\STM32F10x



解決方案3:
在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項為“../;../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")”等。

2。 若在工程中添加的文件為固件包中的鏈接(而不是拷貝),完全按照template里的結(jié)構(gòu),并將include paths按照template進(jìn)行修改,編譯報錯“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)上有所不同。而編譯器在編譯了工程文件的同時,自動鏈接了KEIL安裝目錄下的文件,造成沖突。但是在選項中沒有找到配置是否鏈接KEIL安裝目錄下LIB的地方。



問題原理:

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

問題解決:

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

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

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



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

回復(fù)

使用道具 舉報

ID:316288 發(fā)表于 2018-4-25 15:34 | 顯示全部樓層
我的工程也報了一個 int16_t的重定義,查明是以下語句導(dǎo)致;
#include "stdio.h"


回復(fù)

使用道具 舉報

ID:232020 發(fā)表于 2017-9-19 09:56 | 顯示全部樓層
正在被這個問題困擾中
回復(fù)

使用道具 舉報

ID:96365 發(fā)表于 2015-11-19 15:53 | 顯示全部樓層
very good
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 午夜三区 | 观看av | 久久爱黑人激情av摘花 | 亚洲国产成人久久久 | 亚洲国产黄色av | 成人在线不卡 | 在线欧美视频 | 999国产精品视频 | 日本a视频 | 免费成人在线网站 | 亚洲小说图片 | 91激情视频| 成人在线观看免费视频 | 91大片| 久久网国产 | 日韩精品一区二 | 日本电影韩国电影免费观看 | 久久99精品久久久久久 | 国产乱肥老妇国产一区二 | 美女一区 | www久久久 | 亚洲日日 | 伊人成人免费视频 | avav在线看 | 九九热这里只有精品在线观看 | 天堂一区在线观看 | 久久av一区| 国产亚洲欧美另类一区二区三区 | 久久99网站 | 日本不卡视频 | 91精品久久久久久久久久入口 | 9久久婷婷国产综合精品性色 | 日中文字幕在线 | 国产91丝袜在线播放 | 一区二区精品 | 欧美日韩在线一区二区三区 | 综合国产 | 97国产精品视频人人做人人爱 | 国产精品久久久久久久久久久久久 | 国产精品久久久久久久毛片 | 三级黄色片在线 |