嵌入式系统运行的程序是如何编译出来的?

本文详细介绍了嵌入式系统程序的编译过程,包括预处理、编译、汇编和链接四个阶段。预处理阶段处理伪指令、头文件等;编译阶段涉及词法分析、语法分析、优化处理和中间代码生成;汇编阶段将汇编代码转换为机器指令;链接阶段解决符号引用,形成可执行文件。通过GCC编译器,将C/C++源代码转化为可执行程序。
摘要由CSDN通过智能技术生成

​汽车上使用的ECU中运行的程序,是软件工程师基于C/C++语言编写出来,然后通过编译器编译得到可执行文件,最后将可执行文件刷写入ECU中实现的,今天我们介绍下编译过程。

通常我们使用GCC编译器来实现编译,对于GCC编译器,我们就不展开介绍了,感兴趣的同学可以到网上找些材料,自行充电。

【公众号后台回复“高质量编程指南”获取pdf文档,100页干活,你不容错过!】

0 四个阶段

虽然我们称GCC是C语言的编译器,但使用GCC由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤∶

预处理(也称预编译,Preprocessing)
编译(Compilation)
汇编(Assembly)
链接(Linking)
GCC首先调用cpp进行预处理,在预处理过程中,对源代码文件中包含的预编译语句进行分析。然后调用编译器进行编译,这个阶段根据输入文件生成以.s为后缀的汇编文件。汇编过程是针对汇编语言的步骤,将.S为后缀的汇编语言源代码文件生成以.o为后缀的目标文件。当所有的目标文件都生成之后,GCC会完成最后的链接过程,最终生成可执行文件。

在这里插入图片描述

下面我们详细看看每个阶段。

1 预处理阶段

读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理。那么,什么事伪指令呢?伪指令主要包括以下四个方面:(1)宏定义指令,如#define Demu 520,#undef等。对于前一个伪指令,预编译所要做的是将程序中的所有Demu用520替换,但作为字符串常量的Demu则不被替换。对于后者,则将取消对某个宏的定义,使以后该串的出现不再被替换。(2)条件编译指令,如#ifdef,#ifndef,#else,#elif,#endif等。这些条件编译指令的引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。预编译程序将根据有关的文件,将那些不必要的代码过滤掉。(3)头文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值