浅说嵌入式代码到文件的过程【拜托了,物联网!】

举报
o0龙龙0o 发表于 2021/10/10 22:35:48 2021/10/10
【摘要】 大家在使用单片机、MCU、嵌入式编程或是LiteOS编程时,有没有注意我们使用的C代码是如何变成我们芯片需要的可执行文件的呢?这里就说的了重要的编译器编译过程了。

0、前沿

大家在使用单片机、MCU、嵌入式编程或是LiteOS编程时,有没有注意我们使用的C代码是如何变成我们芯片需要的可执行文件的呢?这里就说的了重要的编译器编译过程了。

1、code->执行文件的几个过程

从编码到文件一般分为四个过程:

  1. 预处理(也称预编译,Preprocessing)
  2. 编译(Compilation)
  3. 汇编(Assembly)
  4. 链接(Linking)

常见的编译器有哪些呢?一般都是芯片公司的配合开发的,如Kiel的C51、ARM的GCC还有Ti的CCS等嵌入式编译工具。此次就以用的最多额GCC编译过程说起

预编译:

该成果处理程序中的宏指令,文件包含信息,如头文件的引入等,还有就是特殊功能的实现,如DSP中的数学函数的使用。

此过程处理后C代码被整合一个个编译其可以处理的文件

编译

这个阶段,编译器将预处理后的输出文件进行编译处理和优化处理。

该过程代码将根据设置好的优化规则进行时间或是空间的优化操作,处理掉无效的代码和医用,最后生成file.s的过程文件。

汇编

这个过程是转成MCU、单片机可以识别的机械指令的过程,并将文件和数据进行指定位置保存和执行,这个过程利用上过过程生成file.s文件去经过汇编得到单片机或嵌入式可以识别的file.o文件,这个时候的文件还不能作为执行文件,还需要最后一步连接过程。

连接

函数的代码将从其所在的静态链接库中被拷贝到最终的可执行程序中,将所有汇编后的文件连接成一个执行的文件,并利用map实现空间的对应关系。

2、过程描述

大致如下图:

详解C程序编译、链接与存储空间布局- 滴巴戈- 博客园

3、编译器优化

编译的过程清晰,那整个过程我们能做什么,这里需要使用到编译器优化,各个厂家都给了很多编译器优化的选型及过程,同时我们也要了解编译器的规则才能更好地编程嵌入式代码,了解空间和时间时间的平衡,变量占用大小的位置等等,这些大家可以查阅自己使用的芯片的编译规则,也可以查阅C99的编译基本规则学习。

【拜托了,物联网!】有奖征文火热进行中:https://bbs.huaweicloud.com/blogs/296704

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。