IDE工作机制:目标文件的生成过程

IDE工作机制:1、目标文件的生成过程

1 概述

使用keil IDE编辑开发应用程序,一般根据设计的程序架构在编辑器中编辑、源码(.c和.h文件),编辑完成之后,借助IDE工具进行编译和下载,完成应用功能在目标芯片中的运行。但对于编译器在此过程中的工作机制,并不是很清楚。因此本文介绍IDE是如何将源文件转换为可执行的目标文件的过程。

2 过程分析

该过程主要依赖于IDE中不同功能器完成。

(1)大致流程C源代码->预处理->编译->汇编->链接->可执行文件

程序编辑 (根据功能要求设计软件框架、编辑相应源文件和头文件)

预处理(对源文件的宏定义、条件编译、头、特殊符号和注释等处理,生成 .i文件)

编译 (编译器对预处理文件进行语法和词法解析检查,生成汇编 .s文件)

优化(编译器对生成的固定模式的代码进行重构优化)

汇编(汇编器将汇编文件汇编成目标.o文件)

链接(将程序的生成的目标文件以及库文件进行链接生成可执行文件)

(2)关键操作主要是编译器和链接器的工作:

编译器工作:(源码到目标文件)

词法分析: 词法分析器根据词法规则识别出源程序中的各个记号,如关键字、标识符、 字面量和特殊符号。把源文件的字符流转换成记号流。本质上它查看连续的字符然后把它们识别为“单词”。

语法分析: 语法分析器根据语法规则识别出记号流中的结构(短语、句子),并构造一棵能够正确反映该结构的语法树。

语义分析: 语义分析器根据语义规则对语法树中的语法单元进行静态语义检查,如果类型检查和转换等,其目的在于保证语法正确的结构在语义上也是合法的。

中间代码生成: 中间代码生成器根据语义分析器的输出生成中间代码。中间代码可以有若干种形式,它们的共同特征是与具体机器无关。(汇编语言.s)

代码优化: 中间代码的工作是机械的、按固定模式进行的,因此,生成的中间代码往往在时间和空间上有很大浪费。当需要生成高效目标代码时,就必须进行优化。

目标代码生成: 编译器根据指令系统、寄存器的分配以及内存的组织等。生成的目标程序代码可以有多种形式:汇编语言、可重定位二进制代码、内存形式。

符号表管理: 符号表的作用是记录源程序中符号的必要信息,从而在编译器的各个阶段能对它们进行快速、准确的查找和操作。

出错处理: 对用户编写的源程序进行错误排查解析。

链接器工作:(从目标文件到可执行文件,解决编译遗留问题)

符号判决表处理: 链接器还维护了两个集合,一个是已定义符号集合D,另一个是未定义符合集合U,链接器遍历每个目标文件中的符号表,已定义的存放在已定义集合中,未定义放在未定义集合,遍历结束,最后根据U是否为空判定是否判决通过。(undefined reference to )问题。

静态链接: 制作静态库(多个目标文件打包),可执行文件将静态库中用到的目标文件合并到可执行文件中当多个程序用到静态库中同一目标文件,将导致目标文件多次复制可执行文件过大。

动态链接:同静态库进行整体拷贝的方式不同,对于动态库的使用仅仅需要可执行文件当中包含必要的信息即可,与静态库相比,动态库的使用减少了可执行文件的大小。动态链接包括加载时动态链接和运行时动态链接。必要的信息存放在dynamic段中包括依赖哪些动态库,动态链接符号表的位置以及重定位表的位置等信息。

重定位: 确定程序运行时代码和数据的地址的过程就是重定位。重定位是由于生成目标文件时对函数和数据进行过一次内存定位,但对引用变量以及多个目标文件之间位置关系没有定位。链接器需要完成重定位操作即(内存地址分配)

3 整体flow

根据过程分析可总结过程flow如下:
在这里插入图片描述

4 总结

从上描述可以较为清晰明白IDE是如何将源码程序转换为可执行文件。在此还有一些细节问题。
(1)编译器留给链接器的问题有哪些。
(2)链接器是如何实现重定位的。
(3)最后生成的可执行文件的格式是什么样的。
以上这些问题会在详解过程中描述。通过掌握此过程能够对mcu的运行机制理解更加深刻。也便于同一SDK在不同IDE进行移植。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值