野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9519|回复: 8

谁知道keil .c 和.h 文件的大概的编译过程,我们都知道一个模块的函数调用另...

[复制链接]
发表于 2018-8-16 16:58:19 | 显示全部楼层 |阅读模式
谁知道keil   .c 和.h    文件的大概的编译过程,我们都知道一个模块的函数调用另一个模块的函数,是调用他的.h文件 ,那么这么推断的话,keil应该是把所有的.h文件全都编译了,然后再去编译.c文件,这么想对吗?
回复

使用道具 举报

发表于 2018-8-16 17:26:36 | 显示全部楼层
在遇到include时,编译器把头文件的内容复制到c文件,然后编译得到的c文件
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-16 17:30:11 | 显示全部楼层
本帖最后由 麦穗 于 2018-8-16 17:31 编辑
随风 发表于 2018-8-16 17:26
在遇到include时,编译器把头文件的内容复制到c文件,然后编译得到的c文件

编译得到.o文件吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-16 17:34:18 | 显示全部楼层
本帖最后由 麦穗 于 2018-8-16 17:36 编辑
随风 发表于 2018-8-16 17:26
在遇到include时,编译器把头文件的内容复制到c文件,然后编译得到的c文件

那比如我的led.c里面包含了adc.h,wwdg.h,sim800.h,gprs.h,但是我真的led.c里面的函数只是调用了一个adc.h,那么编译器会不会多编译东西进去?(直接包含所有头文件我直接在led。c里面包含adc。c)这么编译有区别吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-16 17:40:00 | 显示全部楼层
随风 发表于 2018-8-16 17:26
在遇到include时,编译器把头文件的内容复制到c文件,然后编译得到的c文件

下面说的还是不够细

https://blog.csdn.net/u010190210/article/details/79108547

首先将C语言源文件经过C编译器生成相应的后缀为.o的目标文件,将汇编源文件(启动文件.s)也编译成相应的.o的目标文件, 最后通过连接器将各目标文件及存储器布局设置(option for target菜单设置)连接起来,生成后缀为.axf的可执行映像文件,这个映像文件可转化为二进制的程序映像文件.bin,也可以钻环卫十六进制文件.hex。

平时我们下载到芯片Flash中的代码就是.hex文件,上电后,内核将Flash中的代码加载到SRAM中,就可以开始执行代码了。而调试过程中是将.axf文件直接加载到芯片的SRAM中可以直接运行我们保存在.axf上的代码了。

回复 支持 反对

使用道具 举报

发表于 2018-8-17 09:12:38 | 显示全部楼层
麦穗 发表于 2018-8-16 17:30
编译得到.o文件吧

我的意思是编译加入了头文件内容的c文件,编译这样的文件得到o文件
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-17 09:13:44 | 显示全部楼层
随风 发表于 2018-8-17 09:12
我的意思是编译加入了头文件内容的c文件,编译这样的文件得到o文件

恩恩 谢谢指导
回复 支持 反对

使用道具 举报

发表于 2018-8-17 09:13:49 | 显示全部楼层
麦穗 发表于 2018-8-16 17:40
下面说的还是不够细

https://blog.csdn.net/u010190210/article/details/79108547

看野火的mdk文件类型和编译过程详解
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-17 09:14:19 | 显示全部楼层
相津童 发表于 2018-8-17 09:13
看野火的mdk文件类型和编译过程详解

野火有这个东西?在哪里下载?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-19 06:35 , Processed in 0.029878 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表