主题中讨论的其他器件:UNIFLASH
工具与软件:
编译器版本为 TI v20.2.7.LTS。
将.out 文件输出到.bin 文件后、当我使用 UniFlash 将.bin 文件烧录到芯片时、固件无法正常工作。
开始分析 bin 文件的内容:
ArmHex 工具会为 bin 文件输出以下相关参数:
--fill=0xFF --map="xxx.map" --romwidth=32 --diag_wrap=off --binary -o "xxx.bin" "xxx.out"
添加输出 mapflie 以分析 bin 文件组合。
然后、使用 UniFlash 工具将.out 文件刻录到芯片中、导出闪存内容并另存为 a.bin 文件。 使用文件比较工具比较两个文件:
此处两个文件之间第一个差异的地址为0x003b304、而差异内容如下图所示:
在上图中、可从闪存导出的 bin 文件的内容位于左侧、由 ArmHex 工具生成的 bin 文件的内容位于右侧。
将 the.bin 映射文件与.out 映射文件进行比较。
================================================================================== .out mapfile: SEGMENT ALLOCATION MAP run origin load origin length init length attrs members ---------- ----------- ---------- ----------- ----- ------- 00000000 00000000 0003b304 0003b304 r-x 00000000 00000000 00000020 00000020 r-x .intvecs 00000020 00000020 00000100 00000100 r-- section_image_header 00000120 00000120 0003b1e4 0003b1e4 r-x .text 0003b320 0003b320 000027d4 000027d4 r-- 0003b320 0003b320 000027d4 000027d4 r-- .const 0003db00 0003db00 00000618 00000618 r-- 0003db00 0003db00 00000618 00000618 r-- __param 0003e120 0003e120 00000048 00000048 r-- 0003e120 0003e120 00000048 00000048 r-- clisection 0003e180 0003e180 000002b8 000002b8 r-- 0003e180 0003e180 000002b8 000002b8 r-- .cinit 08010000 08010000 0002c638 00000000 rw- 08010000 08010000 0001a8c0 00000000 rw- .bss 0802a8c0 0802a8c0 00009d76 00000000 rw- .data 08034638 08034638 00008000 00000000 rw- .sysmem ================================================================================== .bin mapfile: OUTPUT TRANSLATION MAP -------------------------------------------------------------------------------- 00000000..ffffffff Page=0 Memory Width=8 ROM Width=8 -------------------------------------------------------------------------------- OUTPUT FILES: xxx.bin [b0..b7] CONTENTS: 00000000..0000001f xxx.out(.intvecs) 00000020..0000011f xxx.out(section_image_header) 00000120..0003b303 xxx.out(.text) 0003b320..0003daf3 xxx.out(.const) 0003db00..0003e117 xxx.out(__param) 0003e120..0003e167 xxx.out(clisection) 0003e180..0003e437 xxx.out(.cinit)
从两个映射文件中、您都可以看到.text 字段的地址为0x00000120到0x0003b303、以下.const 字段的地址为0x0003b320到0x0003daf3。
两个映射文件的描述是相同的、这意味着地址范围0x0003b304到0x0003b31应该用0xFF 或其他无用数据填充。
但是、在实际的 bin 文件内容中、可以发现 ArmHex 文件生成的 bin 文件中.const 字段的内容会连续写入地址0x0003b304、从而导致所有后续内容产生地址错位。
因此、ArmHex 生成的 bin 文件无法单独与映射文件输出对应、也无法正常运行。
需要提供一些技术支持来帮助解决这个问题。