This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器:Object File Format,a.out,COFF,ELF。 微控制器执行这些文件格式

Guru**** 1993015 points
Other Parts Discussed in Thread: TMS320F2812
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/583272/compiler-object-file-format-a-out-coff-elf-microcontroller-execution-of-these-file-formats

主题中讨论的其他部件:TMS320F2812

工具/软件:TI C/C++编译器

您好,  

我的问题看起来很傻,所以提前很抱歉。 以下是我的问题。

A)为什么对象文件(a.out,COFF,ELF)被划分为.text,.data,.bss等逻辑部分?其背后的原因是什么? 为什么我们需要在对象文件中包含部分??

B)对所有这些文件格式有何需求,例如如果我们有.out格式,为什么 开发COFF格式,类似ELF文件格式???? 什么因素迫使我们需要新的文件格式????

c)微处理器是如何执行的,就像我们有 个.out文件并将其刻录到例如TMS320F2812 DSC闪存一样,微处理器如何区分不同的部分,它如何执行这个 a.out文件? 微控制器与 PC中的对象文件创建新进程时通常需要的输出标头有关什么????

D)执行对象文件时,链接程序分配给对象文件中不同部分/变量的地址如何在RAM中得到满足,例如,如果链接程序提供的地址从0到MAX_SIZE,当操作系统加载程序在不同页面上加载此进程时,帧不从位置0开始, 那么,在执行过程中,此过程如何期望从0到MAX_SIZE的地址? 是否使用了虚拟地址空间或偏移?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    A-因为虽然您的程序可能会交错数据和代码,但在机器中这样做是没有意义的。 如果在循环之前为'I'留出了内存位置,编译器将必须围绕它进行分支。 对于编译器来说,将所有内容分开是很有意义的,这样它就可以更好地跟踪内容。 此外,如果您是从闪存运行,则您的变量无论如何都不会存在。

    B-因为每个操作系统设计人员都认为他们可以做得更好。 8^)

    C -控制器通常不在乎,它只是加载全部内容,在指定点开始执行,并让程序解决问题。

    D-这取决于操作系统,处理器和其他一些因素。 请注意,在我们的案例中,有*NO*操作系统。 它只是您的程序。 在C术语中,它是一个符合标准的独立式实现-尽管调试器倾向于使其模糊一些。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不会直接回答您的问题,而是会给您一些相关的想法。

    有关TI工具使用的目标文件格式的概述,请参阅Wiki文章 A Brief History of TI Object File Formats(TI目标文件格式的简要历史)。

    要查看一些与目标文件中找到的结构一起工作的代码,请查看 cG_xml包中的bootimage脚本

    谢谢,此致,

    -George