用keil sdk编译STM32的程序时呈现“.\inc\stm32f10x_conf.h(21): error: #5: cannot open source input file “stm32f10x_type.h”: No such file or directory”相似的问题,阐明没有搜到此头文件,如果是用双引号 “ ” 包括的头文件,则问题必定出在没有把此头文件放在工程文件夹内。
还有一个问题,现已把此头文件放在了工程文件夹内,可是编译时呈现这个问题:.\inc\stm32f10x_type.h(28): error: #256: invalid redeclaration of type name “s32” (declared at line487of “.\inc\stm32f10x.h”),没有任何置疑,过错提示现已明确地说s32这个姓名现已在inc\stm32f10x.h的487行界说过,所以stm32f10x_type.h中对s32的界说归于重复界说,无效。
那么为什么会呈现重复界说呢? 经过双击该提示到stm32f10x_type.h界说s32的当地,以及到stm32f10x.h的第487行界说s32的当地,会发现果然有相同的界说,
如图所示:
这是不同的头文件,并且在stm32f10x.h这个头文件中会包括stm32f10x_type.h(如图,stm32f10x.h包括了另一个头文件stm32f10x_conf.h,而在stm32f10x_conf.h里边包括了stm32f10x_type.h,即相当于stm32f10x.h中包括stm32f10x_type.h——即①包括了②,②包括了③,那么①就包括了③,有点烦琐,但会显得更清楚一些,呵呵),
为什么还会呈现在这两个相关联的头文件中界说了同一个姓名s32呢?
问题就出在版别上。
在我的这个工程中,由于我计划都用双引号 “ ” 来包括头文件,所以要把头文件都放到我的工程文件夹里,并设置好途径(这儿不细说,有问题加后边的QQ联络)。问题就来了,stm32f10x.h这个头文件是keil mdk中的,途径为\keil mdk\ARM\INC\ST\STM32F10x,而stm32f10x_conf.h是来自我从前装置的IAR编译里的(前面说了,stm32f10x.h中是会包括stm32f10x_conf.h的。至于为什么会把IAR这个编译器中的头文件放进去,就不说了,呵呵),正确的办法是仅仅用一个编译器中的头文件,确保版别的一致性,在我的工程中,应该运用kei mdk中的stm32f10x_conf.h,而不是IAR中的。
那么咱们看看这不同的编译器中的同名头文件有什么区别,如下图:
左面的是Keil中的,版别为V3.5.0,右边是IAR中的,版别为V1.0,版别不同!!!
版别不同,里边界说的内容不同,自然会呈现不能替换的问题了。
所以要特别注意相关联的头文件(有包括联系的)是不是来自同一个版别。