MSP430应用技巧1:COFF ABI与EABI

我们在使用MSP430单片机进行项目开发的时候,会遇到两种映像文件的输出格式(如下图所示):legacy COFF和eabi(ELF),本文从此话题进行展开,引出COFF ABI和EABI两种应用程序二进制接口,使开发者能够从low-level对MSP430有一个新的认识。

1、 映像文件输出格式

MSP430的编译器可以输出两种格式的映像文件:

a、COFF object files

COFF是英文Common object file format的缩写,翻译成中文的意思是“通用对象文件格式”,它是一种广泛存在的对象文件格式,这里不直接说成目标文件格式的原因在于,这种格式不仅应用与目标文件中,而在其它文件中也有广泛的应用,例如:可执行文件。Windows操作系统上的大部分可执行文件都采用这种格式。它具有分别编译,重定位等多种特性。如上图所示TI公司在这种文件格式的前面加入英文legacy(遗留的),原文如下:COFF
is a legacy format; it will continue to be supported, but support for some modern language features will not be added.(COFF是一种遗留的格式,它将被持续支持,但是现在编程语言的一些特性将不再被加入。)

b、ELF object files

ELF是英文Executable
and linking format的缩写,翻译成中文的意思是“执行链接格式”,它是TI今后将持续支持的文件格式,编程语言的新的特性将不断的被加入,例如最近才出现的关于C++语言的template instantiation(模板实体化)和exporting
inline functions(出口内联函数)都已被支持。

C、如何决定映像文件输出格式

映像文件的输出格式由选择的ABI决定,原文如下:The object files
created by the assembler and linker conform to either the ELF or COFF binary formats, depending on the ABI selected when building your program. When using the EABI mode, the ELF format is used. For the older COFF ABI mode, the legacy COFF format is used.(汇编和连接将按照ELF和COFF两种格式中的一种建立对象文件,它依赖于我们在生成应用程序时所选择的ABI接口。当我们选择EABI接口时,ELF格式将被使用。当我们选择旧的COFF
ABI接口时,遗留的COFF格式将被使用。)

2、ABI概述

ABI是英文Application Binary Interface的缩写,翻译成中文的意思是“应用程序二进制接口”,它定义了对象文件(如果只针对于MSP430系统,我们也可以将其称为目标文件)之间的底层接口。ABI允许符合ABI接口的对象文件链接在一起,而不需要考虑它们的源文件,而且它允许已存在的符合ABI接口的可执行文件运行在任何支持ABI接口的系统中。

遵从不同ABI接口的对象文件是不能链接在一起的,当前MSP430的编译器支持两种ABI:COFF
ABI和EABI。我们可以使用“--abi”链接选项进行选择COFF ABI (--abi=coffabi)和MSP430
EABI (--abi=eabi)。下图指明了当前系统中使用的ABI接口是EABI。

ABI接口到底起到什么作用呢,我们可以看一下以下原文:An
ABI defines how functions that are compiled or assembled separately can work together. This involves standardizing the data type representation, register conventions, and function structure and calling conventions. It defines linkname generation from C symbol
names. It defines the object file format and the debug format. It defines how the system is initialized. In the case of C++ it defines C++ name mangling and exception handling support.(ABI接口定义了不同编译器编译或汇编器汇编的函数是如何工作在一起的。这些包括数据类型表现的标准化,寄存器的使用规范,以及函数结构和调用的规范。它定义了由C语言符号名产生的链接名、目标文件格式、调试文件格式以及系统如何被初始化等等。以C++语言为例来说,ABI接口定义了C++名字的压缩方式以及对异常处理的支持。)

总结:MSP430能够输出两种映像文件格式,分别为:legacy COFF和eabi(ELF),这实际上是对应的两种ABI接口,分别为COFF
ABI和EABI。ABI的作用是使符合ABI接口的不同的目标文件(哪怕是不同编译器编译出来的)能够很好的链接在一起进行工作(不需要程序的源文件)TI虽然继续支持COFF ABI,但不会再将编程语言的新的特性添加进来。我们现在应当把注意力放在EABI上,它是TI公司将持续进行功能延伸。下编日志就将对EABI进行深入探讨。

原创性文章,转载请注明出处 http://user.qzone.qq.com/2756567163

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-22 06:49:55

MSP430应用技巧1:COFF ABI与EABI的相关文章

MSP430应用技巧2:EABI接口的初始化

对于COFF ABI和EABI,我们应将注意力着眼于EABI上.由于它是我们今后项目开发首选的接口方式.本文就将对EABI接口的初始化方式进行深入介绍. 1.自己主动初始化 我们首先介绍一下自己主动初始化的概念,其英文原文例如以下:Any global variables declared as preinitialized must have initial values assigned to them before a C/C++ program starts running. The p

[Binary Hacking] ABI and EABI

Following are some general papers about ABI and EABI. Entrance https://en.wikipedia.org/wiki/Application_binary_interface PowerPc Embedded Application Binary Interface (EABI) : 32-Bit Implementation http://www.freescale.com/files/32bit/doc/app_note/P

[整理]EABI和OABI【转】

本文转载自:https://www.crifan.com/order_eabi_and_oabi/ 1.什么是ABIABI,application binary interface (ABI),应用程序二进制接口.既然是 接口,那就是某两种东西之间的沟通桥梁,此处有这些种情况:A.应用程序 <-> 操作系统:B.应用程序 <-> (应用程序所用到的)库C .应用程序各个组件之间 类似于API的作用是使得程序的代码间的兼容,ABI目的是使得程序的二进制(级别)的兼容. 2.什么是OA

Linux Kernel - Debug Guide (Linux内核调试指南 )

http://blog.csdn.net/blizmax6/article/details/6747601 linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 建立调试环境 发行版的选择和安装 安装交叉编译工具 bin工具集的使用 qemu的使用 initrd.img的原理与制作 x86虚拟调试环境的建立 arm虚拟调试环境的建立 arm开发板调试环

DSP中cmd文件(修改1)

DSP中cmd文件(修改1) 看TMS320C6000 Optimizing Compiler v7.6 User's Guide和TMS320C6000 Assembly Language Tools User's Guide ? CMD 的专业名称叫链接器配置文件,是存放链接器的配置信息的,其中比较关键的就是MEMORY和SECTIONS两个伪指令的使用. ? DSP工程文件夹中有两个cmd文件,其中一个为linker.cmd;另一个为c6455.cmd.c6455.cmd文件在工程中.工程

DSP6455的cmd文件

DSP6455的cmd文件 CMD 的专业名称叫链接器配置文件,存放链接器的配置信息,DSP编译器的编译结果是未定位的,DSP也没有操作系统来定位执行代码,DSP系统的配置需求也不尽相同,因此需要定义代码存储位置.CMD分配ROM和RAM空间,告诉链接程序怎样计算地址和分配空间.所以不同的芯片就有不同大小的ROM和RAM,存放用户程序的地方也不尽相同.所以要根据芯片进行修改. DSP 芯片的片内存储器, 只要没有被 TI 占用, 用户都可以全权支配. TI 设计了 "CMD文件"这种与

linux内核调试指南

linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 建立调试环境 发行版的选择和安装 安装交叉编译工具 bin工具集的使用 qemu的使用 initrd.img的原理与制作 x86虚拟调试环境的建立 arm虚拟调试环境的建立 arm开发板调试环境的建立 gdb基础 基本命令 gdb之gui gdb技巧 gdb宏 汇编基础--X86篇 用户手册 AT&

DSP中的cmd文件

DSP6455中cmd文件 CMD 的专业名称叫链接器配置文件,存放链接器的配置信息,DSP编译器的编译结果是未定位的,DSP也没有操作系统来定位执行代码,DSP系统的配置需求也不尽相同,因此需要定义代码存储位置.CMD分配ROM和RAM空间,告诉链接程序怎样计算地址和分配空间.所以不同的芯片就有不同大小的ROM和RAM,存放用户程序的地方也不尽相同.所以要根据芯片进行修改. DSP 芯片的片内存储器, 只要没有被 TI 占用, 用户都可以全权支配. TI 设计了 "CMD文件"这种与

[转载]arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别

arm交叉编译器gnueabi.none-eabi.arm-eabi.gnueabihf.gnueabi区别 (http://www.veryarm.com/296.html) 命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch - 体系架构,如ARM,MIPS vendor - 工具链提供商 os - 目标操作系统 eabi - 嵌入式应用二进制接口(Embedded Application Binary Interface) 根