C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(23): error: #256: invalid&nbs
(2012-09-26 09:58:34)
标签:
stm32f103嵌入式it |
分类: 嵌入式计算机技术 |
使用MDK时,加载ST官方库文件出现的问题:
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(23):
error: 解决方法:
问题原因:
因为用新的库文件,所以编译头文件时出现了混乱,通俗点讲,你把编译器搞糊涂了,最终编译器找不到路又回到自己的缺省目录下
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(23)。。。类似重新找,结果重复了。
首先我理解的编译过程,编译就是把你的代码编译成机器能看懂的代码,但还没有运行。这是其一。
所以一定要注意编译时控制台出现的信息,他在编译第一个文件时,会找他的头文件,然后头文件又会包含其他头文件,如果链接到项目有新文件,他会在include path里面找,找不到会回到缺省目录找。
我后面给的是通用解决方案,肯定是正确的。
而我在改完以后,仍没有解决问题,之前我仅仅是把core_m3.c 和stmf10x.c以及他们的头文件加入includepath
发现不管用,于是我把stm32f10x_conf.h ,stm32f10x_it.h 这两个文件也加入了includepath。。 就解决了。
通用解决方案:
keil报错:stm32f10x_type.h(23):error:#256:invalid invalid redeclaration of type
keil 4.00。
在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")”等。
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的地 方。不知推测是否正确,解决方法又如何。求指教。