摘要:我们在使用编译器在编译工程后会要求生成可执行文件,将这些文件烧录到MCU进行运行,达到我们测试和使用程序的目的,再使用工具链进行编译的时候往往生成。bin、.hex 、.elf 、.alf等文。..
我们在使用编译器在编译工程后会要求生成可执行文件,将这些文件烧录到MCU进行运行,达到我们测试和使用程序的目的,再使用工具链进行编译的时候往往生成。bin、.hex 、.elf 、.alf等文件,这些文件有什么区别呢?可以互相转换吗?LiteOS 有哪些可执行文件呢?本文意义进行阐述。
一、LiteOS可执行文件格式
1.1 BIN
bin文件,是基本的二进制文件,是flash中IO保存的基本信息,是有汇编程序直接汇编得到的二进制代码,bin文件采用顺序记录flash中的信息,文本本身包含任任何地址信息,bin文件烧录就是指定flash开始地址后逐个拷贝即可。利用STM32CubeProm将LiteOS编译后生成的bin文件显示如下图,我们需要设定flash写入地址才能进行烧录。
1.2 HEX
hex文件格式是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex文件的方式有很多种,可以通过不同的编译器将C程序或者汇编程序编译生成hex;最常用Hex式是Intel HEX文件格式,即遵循Intel HEX文件格式的ASCII文本文件,文件的每一行都包含了 一个HEX记录。这些记录是由一些代表机器语言代码和常量的16进制数据组成的。Intel HEX文件常用来传输要存储在ROM 或者 EPROM中的程序和数据。大部分的EPROM编程器和FLASH能使用Intel HEX文件。
1 | 上面的Huawei_LiteOS.bin对应的HEX文件如下(用notepad++打开) |
1 | :020000040800F2 |
文件会有头尾部的的说明。
文件头部的信息
:020000040800F2
02带边数据长度;紧跟着后面的0x00 0x00 为地址;再后面的0x04为数据类型,类型共分以下几类:
‘00’ //数据记录 ‘01’ //文件结束记录 ‘02’ //扩展段地址记录 ‘03’ //开始段地址记录 ‘04’ //扩展线性地址记录 ‘05’ //开始线性地址记录 接着0x04后面的两个 0x08 0x00就是数据,表示偏移地址,最后一个0xF2是校验码。
第二行开始的记录地址和所对应的数据其格式是
:开始代码|地址|数据类型|数据|校验
:20|0000|00|00000820F50E0008650F0008650F0008650F0008650F0008650F000800000000|41
1 |
|
$(LD) $(LITEOS_LDFLAGS) $(LITEOS_TABLES_LDFLAGS) $(LITEOS_DYNLDFLAGS) -Map=$(OUT)/[email protected] -o $(OUT)/[email protected] –start-group $(LITEOS_BASELIB) –end-group
$(OBJCOPY) -O binary $(OUT)/[email protected] $(OUT)/[email protected]
$(OBJDUMP) -t $(OUT)/[email protected] |sort >$(OUT)/[email protected]
$(OBJDUMP) -d $(OUT)/[email protected] >$(OUT)/[email protected]
$(SIZE) $(OUT)/[email protected]
1 | `代码中的解释后的代码```text |
通过gcc编译的命令将结果生成为xx.elf的格式,在通过elf生成bin和hex的目标文件。
1.6 结论
在使用工程编译结果是,最好有bin或者hex同时具有elf文件,elf用于仿真和调试,但输出的到工厂的文件可以使用hex和bin。
本文标题: 聊聊LiteOS中生成的Bin-HEX-ELF三种文件格式
发布时间: 2025年02月06日 00:00
最后更新: 2025年12月30日 08:54
原始链接: https://haoxiang.eu.org/8dcf79c4/
版权声明: 本文著作权归作者所有,均采用CC BY-NC-SA 4.0许可协议,转载请注明出处!

