c语言的源程序是怎么样最终编译成单片机所能执行的程序

今天我们来聊一聊C语言的源程序是如何最终编译成单片机可以执行的程序的

通过前面的学习,我们也可以知道单片机不识别编程语言C语言。对于单片机来说,只能识别机器语言0和1。

因此,在我们编写好C语言源程序之后,接下来很重要的一步就是对程序进行编译和链接,最后生成一个可以在单片机上运行的程序。

一般来说,一个.c源文件需要经过四个步骤来生成单片机所需的二进制可执行文件:

第 1 步:预处理

预处理汇编语言转机器码工具,顾名思义,就是在编译之前,首先对以.c结尾的c源文件进行处理。这个过程主要处理以#开头的指令。预处理命令如下:

这里我们举一个例子:

比如我们代码开头的#include代码就包含了头文件stdio.h,会在预处理阶段进行处理

前面我们说过,写#include相当于替换掉stdio.h中的所有代码,因为在预处理阶段,这段代码会被stdio.h文件中的所有内容替换掉。

大家可以理解,我们给stdio.ha全选汇编语言转机器码工具,然后复制粘贴覆盖我们原来的#include,就这么简单,这就是预处理会处理的过程。

当然,我只是举了一个如何处理#include 的例子。有很多以#开头的指令。我将专门用一章来告诉您它们是什么以及如何使用它们。关注我,让我学习。不无聊,不寂寞

注意:.c 文件预处理后,.i 文件出来。.i 和 .c 文件都是文本文件。打开后可以看到里面的内容。

第 2 步:编译

编译过程是将.i结尾的文件转成.s汇编语言文件。汇编语言是一种更接近底层的语言。

图片[1]-c语言的源程序是怎么样最终编译成单片机所能执行的程序-老王博客

注意:相比之下,它的可读性不如 C 语言。这个阶段也可以通过记事本之类的方式打开生成的.s汇编文件,因为.s文件还是文本文件。

第 3 步:组装

汇编的过程就是将.s的汇编文件变成后缀为.o的二进制文件,即机器码。

第 4 步:链接

链接过程就是链接库文件生成可执行的目标文件。在这个过程中,可以理解为将多个 .o 文件集成为一个可执行的二进制文件。

例如:比如我们之前学过的最简单的程序,假设在 hello.c 中:

#include 
void main()
{       
        //我的第一个C语言程序
	printf("hello小钱嵌入式\n");
}

在这段代码中,printf的声明在stdio.h,但是这个函数的具体实现在printf.o

链接的过程就是把它和我们的hello.o程序合并,最后得到hello文件,它是一个可执行的目标文件,可以加载到内存中,由系统执行。

这里的hello文件是一个二进制文件。如果我们用记事本或记事本等工具打开,会看到一堆乱码,因为它不是文本文件。

总结:c语言源文件的编译过程:

预处理:.c —>.i 编译:.i —>.s 汇编:.s —>.o 链接:多个 .o —> 可执行二进制程序

如果觉得有帮助,可以点赞+收藏,以后再看~[耶]

我是小钱嵌入式,会继续和大家分享嵌入式相关内容。如果觉得我的分享对你有帮助,请不要吝啬你的点赞和关注[祈祷],原创不易,兄弟姐妹们点赞关注[呲牙],是我分享的最大动力,谢谢[祈祷】,欢迎在评论区和我一起讨论【灵光一现】。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论