当我们编写微控制器时,我们将C文件转换为hex文件然后将其刻录到控制器中。
我的问题是,为什么只有hex文件,那个hex文件是二进制可执行文件的十六进制版本? 如果是,那么为什么我们不使用二进制文件呢?
答案 0 :(得分:1)
如果你在谈论一个“intel hex”文件,原因是它是ascii,这使得它易于检查和解析。是的,它在某种程度上是无效的,但与原始二进制文件相比,它可能更小。对于原始二进制文件,您只有一个相关的地址,起始地址(未嵌入文件中)的十六进制文件或motorola srecord,这是一种类似且经常使用的格式。 ihex和srec格式基本上都是ascii / hex数字行,表示起始地址,长度数据和校验和的类型。那里有非数据线,但其中大部分都是数据。因此,如果您的程序在地址0x1000处有几个字节,在0x80000000处有几个字节,则.bin文件将在其最小的0x8000000-0x1000加上几个字节,但通常为0x80000000 +几个字节(右,2千兆字节)。其中ihex或srec总数为几十个字节。 ihex和srec内置了校验和,以帮助防止损坏的文件,当然不是完美的,但总比没有好......
从那以后,elf和coff等格式变得流行起来。这些也是基于数据块而不是完整的内存映像。这些是二进制的,而不是ascii格式,但它们不仅仅是一个内存映像。提供具有地址,类型等的数据块。因为ihex和srec的创建和解析非常简单,所以它们将继续使用很长时间,因此在引导加载程序中不需要很多资源来处理接收ihex或srec文件。 (当然,与二进制文件相同,但二进制文件中有大量的填充数据,导致大量不必要的传输时间)。