爱美容
当前位置: 首页 美容百科

hex格式与bin格式有啥区别(聊聊LiteOS中生成的BinHEXELF三种文件格式)

时间:2023-06-11 作者: 小编 阅读量: 2 栏目名: 美容百科

聊聊LiteOS中生成的BinHEXELF三种文件格式此账号为华为云开发者社区官方运营账号,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态本文分享自华为云社区《LiteOS下载到MCU中的三种文件格式Bin、HEX、ELF。

此账号为华为云开发者社区官方运营账号,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态

本文分享自华为云社区《LiteOS 下载到MCU中的三种文件格式Bin、HEX、ELF》,原文作者:o0龙龙0o。

我们在使用编译器在编译工程后会要求生成可执行文件,将这些文件烧录到MCU进行运行,达到我们测试和使用程序的目的,再使用工具链进行编译的时候往往生成.bin、.hex 、.elf 、.alf等文件,这些文件有什么区别呢?可以互相转换吗?LiteOS 有哪些可执行文件呢?本文意义进行阐述。

BIN

bin文件,是基本的二进制文件,是flash中IO保存的基本信息,是有汇编程序直接汇编得到的二进制代码,bin文件采用顺序记录flash中的信息,文本本身包含任任何地址信息,bin文件烧录就是指定flash开始地址后逐个拷贝即可。利用STM32CubeProm将LiteOS编译后生成的bin文件显示如下图,我们需要设定flash写入地址才能进行烧录。

HEX

hex文件格式是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex文件的方式有很多种,可以通过不同的编译器将C程序或者汇编程序编译生成hex;最常用的Hex格式是Intel HEX文件格式,即遵循Intel HEX文件格式的ASCII文本文件,文件的每一行都包含了 一个HEX记录。这些记录是由一些代表机器语言代码和常量的16进制数据组成的。Intel HEX文件常用来传输要存储在ROM 或者 EPROM中的程序和数据。大部分的EPROM编程器和FLASH能使用Intel HEX文件。

上面的Huawei_LiteOS.bin对应的HEX文件如下(用notepad打开)

:020000040800F2:2000000000000820F50E0008650F0008650F0008650F0008650F0008650F00080000000041:20002000000000000000000000000000650F0008650F000800000000650F0008650F0008D0...........................................................................................................................................................................................................................:208E0000D883050828830508D4820508148505081C8505082485050868CC03082C850508C8:0C8E20003485050804CD030804CD0308C8:00000001FF

文件会有头尾部的的说明。

文件头不的信息

:020000040800F2

02带边数据长度;紧跟着后面的0x00 0x00 为地址;再后面的0x04为数据类型,类型共分以下几类:

'00' //数据记录

'01' //文件结束记录

'02' //扩展段地址记录

'03' //开始段地址记录

'04' //扩展线性地址记录

'05' //开始线性地址记录

接着0x04后面的两个 0x08 0x00就是数据,表示偏移地址,最后一个0xF2是校验码。

第二行开始的记录地址和所对应的数据其格式是

:开始代码|地址|数据类型|数据|校验

:20|0000|00|00000820F50E0008650F0008650F0008650F0008650F0008650F000800000000|41

:20 记录数据长度为20个字节;

0000 数据在内中的起始地址

00 记录类型00(是一个数据记录)

00000820F50E0008650F0008650F0008650F0008650F0008650F000800000000 数据内容

41 这一行的校验

最后一行的内容表示文件结束记录

:00000001FF

hex文件同一样可以在STM32CubeProm打印出内存的内容(与之前的bin打印是一致的)。

ELF

在计算机科学中,是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件,是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和发布的,也是Linux的主要可执行文件格式。

elf(Executable and Linkable Format)可执行与可链接格式,是有别于hex和bin通过记录数据的格式,elf更多而记录程序的连接转储的格式文件,elf目标文件是由汇编器(assembler)和连接编辑器(link editor)生成的,内容是二进制,而非可读的文本形式,是可以直接在处理器上运行的代码。

简单的理解,elf文件将二进制(bin)文件和程序描述文件打包后的一种执行文件,下载到程序里的依然是bin文件的部分,但是仿真器可以依靠其余程序表述文件来获取程序执行的位置和二进制的对应。表意文件可以利用readelf在linux下读取,因为我系统的原因就不赘述了。

其他可执行文件:

.asf、.o、.out这些文件都是编译后的可执行文件,和elf以宣扬都是具有连接格式进行描述,可以利用仿真器进行仿真使用,只是编译格式和编译器设置的不同可以选择不同的文件格式。

可转换性

因为bin、hex都是只是记录数据的,但elf类型不仅记录数据还有程序描述,所以,elf可以转成bin和hex使用,但是反转。

对比一下,发现bin文件最小最简单,但是安全性差,功能性差,hex包含头尾和检验,就有很好的安全性,但是文件比bin大,功能没有elf强大;elf功能多,但是文件最大。

LIteOS如何生成这些文件的

liteOS通过makefile进行文件编译,也是通过makefile进行设置gcc编译文件的输出格式,在工程目录下的makefile代码中:

$(LD) $(LITEOS_LDFLAGS) $(LITEOS_TABLES_LDFLAGS) $(LITEOS_DYNLDFLAGS) -Map=$(OUT)/$@.map -o $(OUT)/$@.elf --start-group $(LITEOS_BASELIB) --end-group$(OBJCOPY) -O binary $(OUT)/$@.elf $(OUT)/$@.bin$(OBJDUMP) -t $(OUT)/$@.elf |sort >$(OUT)/$@.sym.sorted$(OBJDUMP) -d $(OUT)/$@.elf >$(OUT)/$@.asm$(SIZE) $(OUT)/$@.elf

代码中的解释后的代码

arm-none-eabi-gcc-o xx.elfarm-none-eabi-objcopy -O ihex xx.elf xx.hexarm-none-eabi-objcopy -O binary xx.elf xx.binout --format ihex write xx.hex

通过gcc编译的命令将结果生成为xx.elf的格式,在通过elf生成bin和hex的目标文件。

结论

在使用工程编译结果是,最好有bin或者hex同时具有elf文件,elf用于仿真和调试,但输出的到工厂的文件可以使用hex和bin。

点击关注,第一时间了解华为云新鲜技术~

    推荐阅读
  • 明日方舟雷蛇有皮肤吗(明日方舟春节雷蛇皮肤遭遇改动)

    明日方舟对于即将于春节时期登场的雷蛇新皮肤,根据之前早期的解包图显示,该皮肤遭遇到了改动,估计不少玩家没有注意到这一点,这里带来具体的详细改动内容和分析,一起来看看吧。雷蛇本身强度作为重装来说,在抗伤害方面是不称职的,但其作为功能性的充电宝绝对是超一流级别的,有很高的的实用度所以给个皮肤不算亏,但也要看看有没有特效,诚意是否足够再下决定。

  • 狼尾草为什么没有在公园里呢

    回答公园里有狼尾草,只是很少能看到,如深圳海滨公园、上海世纪公园就有狼尾草生长。狼尾草喜欢生长在光照充足的环境中,其生性耐旱、耐湿以及能耐半阴,且抗寒性也较强,当气温达到20°C以上时,它的生长速度会加快。

  • 夜间勃起更能反映男性的功能吗

    男人关心自己的性能力是天经地义的,但对于很多男人来说,准确地反映自己的行为总是让人困惑。夜间勃起比晨勃更能反映男性的功能,偶尔没有晨吐或性行为不好并不意味着男性性功能障碍,疲劳、抑郁、焦虑或与伴侣不和会影响男人的性表现。男科专家指出,偶尔缺乏早晨的疾病或不良的性行为并不一定意味着男性性功能障碍。相反,夜间睡眠中不受干扰的自然勃起确实反映了男人真正的勃起功能。

  • 湘菜牛肉炖萝卜家常做法(教你做美食鸡块炖萝卜)

    萝卜营养价值非常高,一定要多吃一些。这个萝卜已经洗干净了,把它切开,切成小一些的滚刀块。这个鸡块捞出已经放凉了,先来把这个鸡块剁成小一些的块,剁成小块烧的时候非常好入味。食材都准备好了,可以上锅来制作了。把之前切好的红萝卜放入锅中,加几滴老抽来调色。这样用大火煮开后,转入中小火慢炖15分钟。吃萝卜一定要把它炖熟炖透了,只有萝卜炖透了,这个萝卜才会更好吃。

  • 二胎剖宫产的过程(三胎妈妈5年内三次剖宫产子)

    高龄妈妈5年内三次怀孕,前两次都是剖宫产据介绍,这位孕妇王女士,今年39岁,来自徐州新沂。第二天上午,朱主任给王女士进行了剖宫产手术,因为王女士属于高龄、高危孕产妇,为了防止在手术过程中突发状况,手术室做好的各种应急准备,最终通过剖宫产顺利生下一个7.6斤重的健康宝宝,母子平安。疤痕子宫是指受伤后留下疤痕的子宫。剖宫产疤痕子宫对再次妊娠的孕期和晚期以及分娩和产后有较大的影响。

  • 嗓子疼泡水喝的野菜(农村野地里常长的绿色植物)

    小汐知道地稍瓜有通乳的功效,也是一次巧合听到的。根据了解,地稍瓜抗病虫能力极强,属于绿色生态食物,其嫩瓜可以生吃,也可以凉拌吃,喜欢吃的人,会觉得味道还可以。地稍瓜除了食用,更多的时候,被用于药用。身体燥热、上火,咽喉疼痛,地稍瓜煎煮服用,可生津止渴、清热降火、消炎止痛。在农村有很多像地稍瓜这样的植物,被收集起来,用于日常。

  • 箜篌阳春白雪(箜篌一曲千古意)

    我国古代有一种弹拨乐器,名为“箜篌”,又名空侯、坎,根据其形制和演奏方式的不同,分为卧箜篌、竖箜篌和凤首箜篌。卧箜篌原名箜篌,为了区别于后来的竖箜篌,而将其命名为“卧箜篌”。卧箜篌有几根弦尚不清楚,不过从相关记载来看,似乎少于琴弦数。竖箜篌的高度相当于一个人的大腿上部与额头之间的高度。当时,竖箜篌几乎能与所有的乐器在一起配合同台演奏。竖箜篌多置于胸前,两手齐奏,也有置于左胁或右胁部位的。

  • 当归煮鸡蛋可以减肥吗(当归煮鸡蛋的当归可以吃吗)

    当归鸡蛋可以减肥吗当归鸡蛋不可以减肥,但也不会发胖。当归鸡蛋什么时候吃好吃当归鸡蛋对于时间上来说没有定性的规定,早上吃晚上吃对于补营养来说没有区别。当归鸡蛋有什么作用当归性甘、辛、温,可以活血补血,使人气色红润;鸡蛋含有丰富的蛋白质,脂肪维生素和铁钙钾等人体所需要的矿物质,当归鸡蛋对女性气血不足、痛经、月经不调可以起到不错的疗效。

  • 高中生物全套知识点大全(高中生物教材中37个偏难怪知识点)

    高中生物教材中37个偏难怪知识点1、植物缺镁会影响光合作用,原因是P35镁是叶绿素的组成元素之一,缺镁时叶绿素的形成受到阻碍,影响光合作用2、硅尘进入肺部导致肺功能受损,原因是P46硅尘进入肺部后,被吞噬细胞吞噬,吞噬细胞中的溶酶体。

  • 3d四视图怎么调(只显示3D凸出标志部分)

    改变凸出厚度35pt。选择现在效果为白边图层>图层蒙版,在用黑色柔软画笔(B隐藏部分细节(下图1、2、3区域)。ctrlG图层编成组加上图层蒙版,只显示标志部分。选择内阴影,这里的内阴影主要是提高亮光。使用10像素半径,改变混合模式为正片叠底不透明度为80%。添加图层蒙版,只显示超人标志纹理。金属素材放到顶部使用混合模式为柔光不透明度为70%。CtrlShiftAltE盖印可见图层,混合模式改为叠加不透明度为40%。