stm32f4xx_conf.h文件的讲解
在我的上一篇博客中又讲解到stm32f4xx.h文件的讲解,在那个头文件中包含了4个头文件。
这四个头文件中第一个是非常难的,如果你32学的不是很扎实的话劝你们最好别去碰,涉及很多汇编和底层知识你只需要知道每次你新建一个项目的时候你把以下四个头文件加到你的项目文件夹下即可。
其他的你也就别管了。
第二个头文件这个在我之前写过的博客中已经提到,并且也很简单,第三个头文件功能就是为关键字创立一个新的名字,还有其他的一些参数,不是很难。我们今天主要讲解一下stm32f4xx_conf.h这个头文件,思维导图就没了,因为主要就两大块。
1.固件库的头文件集
这些就是固件库的头文件集,如果你声明了固件库的那个宏,那么你只要包含了系统头文件,这个头文件也就被包含了。
检查参数的宏定义
这个模块可真的把我给整死了,这个模块的主要作用为固件库中的每一个库函数检查传进来的参数是不是正确的,这个模块非常让人觉得比较好的地方是用宏定义的,那也就是在cpu运行期间不会占用内存,因为固件库里的函数量太大了,如果用函数去检查参数的正确性的话,那会让应用的程序效率变低,而且会占用堆栈里面大量的内存(函数嵌套)。
这里稍微注意一下,带参数的宏定义在引用的时候和函数引用的时候是相似的,性质却有很大的不同。
这里关于宏定义的知识如果还不是很了解的话你们可以先去查一查,
带有参数的宏定义是形参替实参,宏体替宏名。如果你想开启库函数参数检查机制的话,那你就擦掉注释。
宏定义中的expr这个标识符要么是1要么是0
expr这个标识符就是很多个判断语句的或运算,如果传进来的参数属于预先所设定好的范围内,那么这个值就为1,否则,则为0.如果expr为1,就指行((void)0);这个语句相当于没有执行一样,但如果为0,就会执行维护失败函数。
而这个函数的实参file就是出错地方所在的文件路径,line就是出错的地方所在行。这个函数的目的就是告诉你在什么地方传参失败。而我们发现我们在开发的过程中并没有擦除注释,是因为一般情况下不会出现这种错误,因为要传的实参都是已经事先宏定义好的(实参几乎都是字母),放在该库函数所对应的头文件里以及系统头文件里,而且KEIL5有自动检查和提示机制,如果你打错字母了它会提示出错,甚至你打前3个字母就会有提示出现,所以一般就不会出现问题,那有的人就说,那我就一定要打开参数检查机制呢,可以,那我们试一试。
因为函数已经帮你声明好了,你只需要定义函数实体就可以了。
但是接下来,你将会发现bug。
你定义的函数实体必须要放在misc.c文件中,因为你定义的函数如果不放在这个文件中,它就会提示以下信息,
那有人说,那我定义两个函数不行吗,如果你定义两个的话,就会重名了,也会报错,那有人说我定义static函数不就可以了吗,但你有没有发现该函数的声明没有static。所以,你不要再挣扎了,就把函数放在misc.c文件下。
至于你想在这个函数里面实现什么功能,那你可以执行处理。
我呢就想在编译的时候,如果参数传递错误,那么就会报错,但是做了一上午还有半个下午,还是没做出来,如果有哪位小伙伴有想法的私信我,或者在评论区里留言。
总的来说
我想对大家说的是
别对这里动什么手脚了,我他妈的都要疯了,参数一般是不会出错的,它有提示和检查机制。妈的,我他妈花了将近半天的时间去实现如何在编译的时候提示你传参错误。操你🐎的,算了,不说了,难受。
在之后的博客中将会讲解固件库函数了,有27个外设呢。