我已经在网上搜索过,尤其是avr-gcc网站。 我想知道源代码的输出文件的结构,用avr-gcc编译。
标准Microsoft .EXE文件的示例:
00h DW Signature word.
"N" is low-order byte.
"E" is high-order byte.
02h DB Version number of the linker.
03h DB Revision number of the linker.
有人可以告诉我avr-gcc输出文件结构吗?
谢谢。 -MW
编辑:
正如Rev1.0所说,它是Intel-HEX格式。
答案 0 :(得分:0)
既然你谈到AVR,你可能意味着HEX文件的格式?它被编码为Intel HEX格式。
编辑关于您在评论中提出的问题:
我看到标题有“DATA”字段。那个领域究竟是什么?纯粹的装配?
HEX文件的每一行称为“记录”。有几种类型的记录。根据记录类型,数据内容具有不同的含义。 “数据记录”保存实际的固件/程序数据。那是最低级别的机器代码,而不是汇编。它完全代表器件编程后驻留在闪存中的数据。
答案 1 :(得分:0)
有人可以告诉我avr-gcc输出文件的结构吗?
avr-gcc只是一个驱动程序,它调用不同文件和文件格式的子进程。例如,编译器正确地读取预处理的输入(文本)并编写程序集(文本)。
GNU汇编器读取由编译器生成的汇编(*.s
,文本)并写入目标文件(*.o
,ELF32)
GNU链接器/定位器读取此目标文件并解析对libgcc(*.a
,ELF32)之类的库的引用,并生成最终的可执行文件(ELF32)。
根据装载机的不同,您可以直接使用ELF(例如,与avrdude一起使用)。
如果您还需要Intex HEX或AVR看到的普通二进制文件,则可以通过GNU Binutils中的avr-objcopy
将ELF32转换为所需的输出。
通常,人们希望保留ELF的时间尽可能长,因为IHEX之类的格式是“哑”的。它们没有符号信息或调试信息之类的其他信息,这些格式仅用于将程序上传到AVR,但是大多数现代工具也可以理解ELF。