基于IAR Embedded Workbench的嵌入式软件构建过程

嵌入式软件开发是项比较复杂的工程,如下图所示的ISO26262-6给出的参考软件开发V模型流程包括:

1. 软件需求分析(Software Requirement Specification)

2. 软件架构设计 (Software Architecture Design)

3. 软件单元设计和实现 (Software Unit Design and Implementation)

4. 软件单元验证 (Software Unit Verification)

5. 软件集成和验证 (Software Integration and Verification)

6. 软件(功能)测试 (Software Testing)

本文主要基于IAR Embedded Workbench介绍嵌入式软件开发过程中嵌入式软件工程师每天基本都会接触到的构建过程(Build Process)(属于上面软件单元设计和实现的一部分)。

很多嵌入式软件工程师会好奇自己写的代码是如何一步一步地变成计算机可以识别并执行的文件。其实这个过程在业界就叫做嵌入式软件的构建过程 (Build Process)。

注意:

1. 很多工程师会简单地叫这个过程为编译(Compile),其实这个不是很严谨,因为编译只是构建过程中其中(很重要的)一步。

2. 本文是基于IAR Embedded Workbench,有些名词可能与业界不是完全一致,但是应该不会影响阅读。

IAR Embedded Workbench将构建过程分为下面3步:

1. 翻译

2. 链接

3. 链接后操作 

翻译

下图是翻译过程的示例:

翻译过程是将源代码翻译成中间的可重定向的目标文件。其中编译器(Compiler)负责翻译C/C++源代码,而汇编器(Assembler)负责翻译汇编源代码。生成的可重定向的目标文件是行业标准文件格式ELF (Executable and Linkable Format),同时会包括DWARF(Debugging With Arbitrary Record Formats)格式用于调试。

在翻译之后,可以将相关的模块打包成库文件 (库文件的好处是相关模块只有被调用才会在链接过程中包含进去)。

链接

下图是链接过程的示例:

 

翻译过程生成的目标文件和库文件,还不能执行,这些文件需要链接之后才能成为可以执行的文件。 链接器(Linker)负责将翻译过程生成的目标文件和库文件链接成最终的可以执行的文件。链接器需要对应的链接配置文件(描述目标系统的ROM和RAM空间)来将代码和数据放置到目标系统对应的ROM和RAM空间,可以通过生产的映射文件查看相应的放置。翻译过程生成的ELF是相对地址的(还没有放置到目标系统的ROM和RAM空间),链接过程生成的ELF是绝对地址的,可以在目标系统运行。

链接后操作

下图是链接后操作的示例:

链接过程生成的可执行文件可以直接用于调试器(Debugger)在目标系统进行调试(Debug), 也可以转换成需要的文件格式(Bin/Hex/Srec)用于产线生产。

到此,通过嵌入式软件构建过程,嵌入式软件工程师写的源代码就变成了计算机可以识别并执行的文件。

参考文献:

1. ISO 26262-6:2018 Road vehicles — Functional safety — Part 6: Product development at the software level

2. IAR C/C++ Development Guide: Compiling and Linking

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值