TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS570LC4357: Arm Hex Utility 生成的bin文件内容错位问题

Part Number:TMS570LC4357Other Parts Discussed in Thread:UNIFLASH

编译器版本为: TI v20.2.7.LTS

我这里使用.out文件输出到.bin文件后,bin文件使用UniFlash烧录到芯片上之后,固件无法正常工作。

开始尝试分析bin文件内容:

ArmHex工具输出bin文件部分相关的参数配置如下:

--fill=0xFF --map="xxx.map" --romwidth=32 --diag_wrap=off --binary -o "xxx.bin" "xxx.out"

添加输出map用于分析bin文件组成。

然后使用UniFlash工具将.out文件烧录至芯片,再将flash上内容导出并保存成.bin文件。通过文件对比工具比对两个文件差异:

我这里两个文件产生的第一个差异的地址是 0x003b304,差异内容如下图所示:

上图中左侧为flash内导出的能够正常运行的bin文件内容,右侧为通过ArmHex工具生成的bin文件内容。

结合上面的现象对比.bin的map文件和.out的map文件。

==================================================================================
.out mapfile:

SEGMENT ALLOCATION MAP

run origin  load originlengthinit length attrs members
----------  ----------- ---------- ----------- ----- -------
00000000000000000003b3040003b304r-x00000000000000000000002000000020r-x .intvecs00000020000000200000010000000100r-- section_image_header00000120000001200003b1e40003b1e4r-x .text
0003b3200003b320000027d4000027d4r--0003b3200003b320000027d4000027d4r-- .const
0003db000003db000000061800000618r--0003db000003db000000061800000618r-- __param
0003e1200003e1200000004800000048r--0003e1200003e1200000004800000048r-- clisection
0003e1800003e180000002b8000002b8r--0003e1800003e180000002b8000002b8r-- .cinit
08010000080100000002c63800000000rw-08010000080100000001a8c000000000rw- .bss0802a8c00802a8c000009d7600000000rw- .data08034638080346380000800000000000rw- .sysmem


==================================================================================
.bin mapfile:

OUTPUT TRANSLATION MAP
--------------------------------------------------------------------------------
00000000..ffffffff  Page=0  Memory Width=8  ROM Width=8
--------------------------------------------------------------------------------OUTPUT FILES: xxx.bin [b0..b7]CONTENTS: 00000000..0000001fxxx.out(.intvecs)00000020..0000011fxxx.out(section_image_header)00000120..0003b303xxx.out(.text)0003b320..0003daf3xxx.out(.const)0003db00..0003e117xxx.out(__param)0003e120..0003e167xxx.out(clisection)0003e180..0003e437xxx.out(.cinit)

从两个map文件都可以看出  .text 字段所占地址是 0x00000120~0x0003b303 , 后面的 .const字段所占地址为 0x0003b320~0x0003daf3。

两个map文件描述的内容是一致的,意味着地址 0x0003b304~0x0003b31 这个区间应由0xFF或其他无用数据填充。

但是实际bin文件内容里可以发现,由ArmHex文件生成的bin文件里 .const这个字段的内容被连续的写在了0x0003b304这个地址上,导致了后续所有内容产生了地址上的错位。

所以实际使用ArmHex生成的bin文件与自己输出的map文件无法对应上,也无法正常运行。

这里需要提供一些技术支持来帮我解决一下这个问题。

Junjie Shi:

关于上面的问题的思考,hex文件相较于bin文件多了对数据地址的描述。然后尝试生成hex文件再继续测试。发现生成的hex文件烧录上芯片是可以正常运行代码的。

这时候再使用第三方工具将hex文件转换为bin文件。这次转换后的bin文件烧录上芯片可以运行了。

再对比转换后的bin文件与之前使用out文件烧录然后从flash上导出的bin文件,验证了猜想。第三方工具对0x0003b304~0x0003b31这个地址内填充的为0xff。

所以想了解一下是不是生成bin文件还需要由额外的一些配置项来解决这个问题。

,

Junjie Shi:

在英文论坛发帖询问,问题已解决。

对应的链接: TMS570LC4357: Arm Hex Utility generates bin file content misalignment issue

,

Lydia:

感谢分享~

赞(0)
未经允许不得转载:TI中文支持网 » TMS570LC4357: Arm Hex Utility 生成的bin文件内容错位问题
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1