include和#include有什么不同,什么时候用哪个,详细点?

2019-07-21 04:03发布

#include<stm32f10x_lib.h>和#include<stm32f10x.h>有什么不同,什么时候用哪个,详细点,服务态度也太差了,问两个问题爱说不说,就是不懂才问啊,懂了还问你吗

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
41条回答
正点原子
1楼-- · 2019-07-21 06:11
楼主典型的一人爽歪歪,别人累半死。
重复性的问题,如果10个人问,我要回答10次,1000个人问,我要回答1000次。
如果论坛问了,我发帖子给提问者,不就OK了么?
我要你论坛提问的目的就在这里,个中关系请看此帖:http://www.openedv.com/posts/list/657.htm

楼主问了很多很简单的问题:比如,如何在MDK下,打开一个头文件,楼主不知道(PS:我们教程教了的,见《不完全手册V2.3》第83页)。 比如,README在哪里,找不到,不会找。 其他一些电路基础问题,我就不说了。

我认为这些问题,你应该自己知道找答案,然后,好不容易问了一个有点共性的问题,让楼主来论坛发个帖子,方便别的初学者了解,很明显,楼主貌似很不情愿。
好了,说问题。 #include<stm32f10x_lib.h>和#include<stm32f10x.h>的区别,这确实是个好问题,所以在这里好好解答一下。 首先,我们看#include<stm32f10x_lib.h>这个头文件。 #include<stm32f10x_lib.h>是ST公司V2.0的库函数使用的头文件,用MDK3.80A,打开Mini板例程-扩展实验1 自定义汉字显示实验,如图1所示:


图1 stm32f10x_lib.h
只要你善于观察,这个图片,告诉我们好几个信息了:
1,文件的路径,也就是stm32f10x_lib.h,到底是在哪个位置,在图中1处就告诉你了。
2,文件的版本,图中2处,说明了,这是V2.0.1版本。
3,该文件包含的一些内容,也就是图中3处的内容。

图1,我们是用MDK3.80A打开的Mini板例程,因为MDK3.80A自带了这些头文件,所以可以打开。
但是,如果你用MDK4.7/MDK5打开,就没法找到了,这也就是为什么,我们老版本的例程,存在高版本的MDK编译的时候,报找不到stm32f10x_lib.h的错误的原因了。
而stm32f10x_lib.h里面,我们经过分析,实际可以用:stm32f10x_map.h和stm32f10x_nvic.h来替代,所以新版本的Mini板例程,都是用这两个替代stm32f10x_lib.h了,而
为了避免不同编译器,可能不会带这两个文件,而报错的问题,我们将这些相关头文件统一拷贝到了例程SYSTEMsys文件夹下,如图2所示:


图2 SYSTEMSYS 文件夹里面的内容


所以,Mini板的最新例程,都是可以在MDK个版本下直接编译的。
新例程下载地址:http://www.openedv.com/posts/list/13912.htm

接下来我们再说说:#include<stm32f10x.h>这个头文件。
#include<stm32f10x.h>是ST公司V3.5及以后版本统一使用的库函数头文件了,说白了就是把原来的stm32f10x_lib.h,换成了#include<stm32f10x.h>,规范了代码,不需要包含那么多的头文件了。
这里打开战舰板,寄存器例程-按键实验。
如图3所示:


图3 stm32f10x.h
这是我们用MDK5.10打开战舰板寄存器例程,按键实验,查看stm32f10x.h的内容,对比图1,应该看出些区别了。
MDK5界面大改,这里不多说,关键没法查看stm32f10x.h的路径了,不知道放在哪里。。。
怎么办呢?
俗话说,上天给人关闭一扇门的时候,一定会为他开启另外一扇门,你把鼠标,放到stm32f10x.h选项卡上,然后右键,是不是弹出了一个小窗口?如图4所示:


图4 拷贝全路径&打开包含文件夹
以上两个划红线的,大家自己试试,就知道什么情况了,我就不多说了。
同样,图3中,也告诉你stm32f10x.h的版本了。
另外,如何查看某个.c文件,包含了哪些头文件,见图3中3处的方法,点击.c文件前面的+号标记,就可以展开其包含的头文件了。
但是很多网友会问,明明我的delay.c只包含了#include "delay.h",怎么会包含这么多呢?
答案就是:头文件可以层层包含的...  A包含B,B包含C,C包含D,D包含E,E包含F...
那么只要你包含了A,那么B,C,D,E,F,就都是会包含进来的。。。

同样,为了兼容不同版本的MDK,以避免MDK不自带头文件,带来的错误,我们将:stm32f10x.h和system_stm32f10x.h拷贝到了SYSTEMSYS 文件夹下,这里大家查看战舰板最新例程就可以知道。

最后,再总结下:
1,stm32f10x_lib.h是2.0的ST库函数头文件,在我们开发板老版本的寄存器版本例程上面有用到,新版本例程一律没用了。
2,stm32f10x.h,是3.5的ST库函数头文件,在战舰板新版本例程,全部使用这个头文件了。
3,为了兼容不同的MDK版本,我们将这些所需的头文件,一律拷贝到了工程SYSTEMsys 文件夹了。































469219945
2楼-- · 2019-07-21 08:04
回复【2楼】正点原子:
---------------------------------
谢谢原子哥啊!那是不是可以这样理解:寄存器版本和库函数3.5以前的版本用#include "stm32f10x_lib.h"或者#include <stm32f10x_map.h>+#include <stm32f10x_nvic.h>,而库函数3.5及以后的版本用#include "stm32f10x.h"
luofeng
3楼-- · 2019-07-21 13:56
 精彩回答 2  元偷偷看……
jiaozhu
4楼-- · 2019-07-21 17:49
顶起
正点原子
5楼-- · 2019-07-21 20:34
回复【3楼】469219945:
---------------------------------
是的
469219945
6楼-- · 2019-07-22 00:22
 精彩回答 2  元偷偷看……

一周热门 更多>