OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8556|回复: 13

Hex文件解析地址不对,第二行的开始地址小于第一行的结束地址

[复制链接]

1

主题

9

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2022-12-25
在线时间
4 小时
发表于 2022-12-26 18:32:06 | 显示全部楼层 |阅读模式
1金钱

为什么第二行的开始地址小于第一行的结束地址
这是Hex源文件

我是上位机工程师请教下为什么会出现这种情况,Hex文件好像能正常使用
祝各位大神都是无症状,不发热,不咳嗽

最佳答案

查看完整内容[请看2#楼]

你看你的hex文件里面的数据第二行,第一个是0x20,表示这行有32个字节,但是第二行到第三行的偏移地址只有0x10,所以工具认为数据地址覆盖了,但如果某些微控制器的flash是以字为单位偏移的,即一个地址下的数据是16位的,是不是就合理了;如果这个hex文件无法下载到你的微控制器里,那可能是编译器生成hex的时候偏移弄错了,如果这个hex文件能下载到你的微控制器里面并能正常运行,那就是你微控制器flash比较特殊
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

2103

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4588
金钱
4588
注册时间
2015-1-10
在线时间
574 小时
发表于 2022-12-26 18:32:07 | 显示全部楼层
cdc8596 发表于 2022-12-27 11:52
:02000004800476
:200020009D8280000090000000000000000000000000000000000000000000000000000091
:200 ...

你看你的hex文件里面的数据第二行,第一个是0x20,表示这行有32个字节,但是第二行到第三行的偏移地址只有0x10,所以工具认为数据地址覆盖了,但如果某些微控制器的flash是以字为单位偏移的,即一个地址下的数据是16位的,是不是就合理了;如果这个hex文件无法下载到你的微控制器里,那可能是编译器生成hex的时候偏移弄错了,如果这个hex文件能下载到你的微控制器里面并能正常运行,那就是你微控制器flash比较特殊
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2022-12-25
在线时间
4 小时
 楼主| 发表于 2022-12-26 19:03:41 | 显示全部楼层
源文件是这一个
:02000004003EBC
:20800000761F0240920000068AD48AD40FF461041AC400011EF40006B2BD59A95200611B97
:208010001BA103E868071BA11F4069068D401F406F038D4003E8761F024292015206600B2B
:20802000767E861A520460072901761F0242560301A11E068BBE0006B2BD8BA48AD18AD427
回复

使用道具 举报

11

主题

2103

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4588
金钱
4588
注册时间
2015-1-10
在线时间
574 小时
发表于 2022-12-27 09:08:45 | 显示全部楼层
cdc8596 发表于 2022-12-26 19:03
源文件是这一个
:02000004003EBC
:20800000761F0240920000068AD48AD40FF461041AC400011EF40006B2BD59A952 ...

这不是对的吗
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2022-12-25
在线时间
4 小时
 楼主| 发表于 2022-12-27 09:28:07 | 显示全部楼层

起始地址        结束地址
4096000        4096031
4096016        4096047
第一行的起始地址是3E8000换算成十进制是4096000,每行有32个字节的数据所以结束地址是4096031,但是第二行的起始地址是3E8010,换算成十进制是4096016,这就出现了第二行数据的起始地址小于第一行数据的结束地址
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2022-12-25
在线时间
4 小时
 楼主| 发表于 2022-12-27 09:31:03 | 显示全部楼层

这样是不是没有问题,符合Hex文件的格式,我是做上位机开发的,对下位机了解的比较少
回复

使用道具 举报

11

主题

2103

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4588
金钱
4588
注册时间
2015-1-10
在线时间
574 小时
发表于 2022-12-27 10:03:26 | 显示全部楼层
本帖最后由 阿侑kevin 于 2022-12-27 13:45 编辑
cdc8596 发表于 2022-12-27 09:31
这样是不是没有问题,符合Hex文件的格式,我是做上位机开发的,对下位机了解的比较少

下位机不是这么算的,其中每行32个字节,但是地址偏移是16,应该是编译器生成的时候是以字为单位存储的,比如TI的C2000 DSP的内存就是这样的,参考:https://blog.csdn.net/sinat_40003796/article/details/119563635
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2022-12-25
在线时间
4 小时
 楼主| 发表于 2022-12-27 11:04:19 | 显示全部楼层
阿侑kevin 发表于 2022-12-27 10:03
下位机不是这么算的,其中每行32个字节,但是地址偏移是16,应该是下位机flash是以字为单位存储的,比如T ...

但是我看了下你这篇博客,是按照我说的这种方式记录的地址啊,每行16个数据,下一行的起始地址比上一行大16,而且我下载的好几个工具解析这个Hex文件报的都是地址覆盖的错误
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2022-12-25
在线时间
4 小时
 楼主| 发表于 2022-12-27 11:52:06 | 显示全部楼层
阿侑kevin 发表于 2022-12-27 10:03
下位机不是这么算的,其中每行32个字节,但是地址偏移是16,应该是下位机flash是以字为单位存储的,比如T ...

:02000004800476
:200020009D8280000090000000000000000000000000000000000000000000000000000091
:200040000000000000000000000000000000000000000000000000000000000000000000A0
:20006000000000000000000000000000000000000000000000000000000000000000000080
:20008000000000000000000000000000000000000000000000000000000000000000000060
:2000A000000000000000000000000000000000000000000000000000000000000000000040
:2000C000000000000000000000000000000000000000000000000000000000000000000020
:2000E000000000000000000000000000000000000000000000000000000000000000000000
:200100004DC0E18F8FF80F818F3800F091D001F8428FD9FFF4E5910000D790FCD9DD5010AE
:20012000DF28CA00F68E910000F0C5720000820FD9FFFFF6642FFCFF910000D7D9DD501048
:20014000D4C29100003719C2040019C40800B5325410402A0D0080040D0080043B00B8F0C3
:20016000CD4FE00F0D00C0040D00C0044D00E0FF0D008004B70F14F0CD0FE00F0D00C004AF
:20018000A22486A4820FBF141F00604F82033BC00110824082673B000160B0FF60226C20A8
:2001A000021E020F1702605E027E026F1702604E8F0501F0A64FDF2387001B020420C21366
:2001C000FDF0EE7F0D008004CD8FE30F0D00C0040D00C004DF088E006D01080A8F1800F0B8
:2001E0009130002FD9220006428F902F19FF0440960859FF04406D01FF096D01F7090D00F7
:200200008004822FCDCF20090D00C0040D00C0046D01F2090D008004821FCD4F20090D0055
:20022000C0044D4020F96F0FFEFF6D01DF090D0080044CC3CD8FE20F0D00C0040D00800434
:20024000820FCDCF20090D00C0040D00C0046D01D309910000274CC4592F5810910000F71C
:200260004CC559FF5C1091000080D988000091000090D999000099225810402099FF5C101D
:2002800040F1910080FFD9FF14026D01AF094CF09602680F6D01B009DF081E0019C41C0099
:2002A00019C51800821F6D01AD0901D800D6CCC82CD0DC0F0CD1DF1F457F0CD1DF1FFCFFE4
:2002C0001DFF40FF0D008004CDCFE30F0D00C0041DFF75FF82F46D012F077BF001487BF00A
这是我下载的一个Hex文件每行32个数据,这个的地址位就是每行相差32
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2022-12-25
在线时间
4 小时
 楼主| 发表于 2022-12-27 18:55:33 | 显示全部楼层
阿侑kevin 发表于 2022-12-27 14:00
你看你的hex文件里面的数据第二行,第一个是0x20,表示这行有32个字节,但是第二行到第三行的偏移地址只 ...

感谢大神是你说的这样的这边的微控处理器是C2000系列,以字为单位
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2022-12-25
在线时间
4 小时
 楼主| 发表于 2022-12-27 20:09:30 | 显示全部楼层
阿侑kevin 发表于 2022-12-27 10:03
下位机不是这么算的,其中每行32个字节,但是地址偏移是16,应该是编译器生成的时候是以字为单位存储的, ...

再请教一个问题,就是生成的Bin文件中包含地址信息吗?我查了一些资料好像都不包含地址信息,把文件解析出来之后按照起始地址排了一下序,然后就把数据写进去了
回复

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3990
金钱
3990
注册时间
2015-11-14
在线时间
541 小时
发表于 2022-12-28 00:12:43 | 显示全部楼层
cdc8596 发表于 2022-12-27 20:09
再请教一个问题,就是生成的Bin文件中包含地址信息吗?我查了一些资料好像都不包含地址信息,把文件解析出来 ...

bin文件不包含地址信息, 并且HEX文件不一定是按照地址顺序来的。HEX可能会出现一段地址没有数据记录的, 在51单片机编译出来的代码居多。如果hex记录了0x08000000, 又记录了0x10000000, HEX文件可能不大, 但是bin文件就会非常大. 应为bin文件不能跳地址, 所以说有时候可能bin文件比hex文件还大
回复

使用道具 举报

7

主题

480

帖子

0

精华

高级会员

Rank: 4

积分
771
金钱
771
注册时间
2021-4-15
在线时间
304 小时
发表于 2022-12-28 10:57:44 | 显示全部楼层
你都查到这份上了 你不查查bin是怎么使用的么!本来就是要自己填地址的
日常敲键--头秃一片
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2022-12-25
在线时间
4 小时
 楼主| 发表于 2022-12-31 09:29:10 | 显示全部楼层
日渐秃兀 发表于 2022-12-28 10:57
你都查到这份上了 你不查查bin是怎么使用的么!本来就是要自己填地址的

呵呵!我上位机开发的,对芯片这一块基本不了解
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 19:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表