stm32cubeide警告:calculation has at least one hole
我写一个引导程序,需要计算校验和。通过 stm32cubeide 的 Srecord 工具获取 CRC。
Srecord 按照以下脚本运行:
# srec_cat command file: srec_crc_dump_to_file.txt#===============================================#-disable-sequence-warning#Input filePLK.hex -Intel#Fill hole with 0xFF-fill 0xFF 0x8000000 0x08040000#CRC Algorithm at given address-STM32 0x08040000#-crop 0x08040000 0x08040004-Output_Block_Size=16#Produce output-o PLK_SRECORD.hex -Intel导致问题,srec_cat: PLK.hex: 47492: warning: The data presented for STM32 calculation hasat least one hole in it.
这个警告意思是HEX文件里有空洞,你要么用fill参数把未覆盖区域填满。 srec_cat默认要求数据连续,如果有跳地址就会提示hole。 你已经用了-fill 0xFF,不过要确认起始和结束地址范围跟芯片flash完全一致。 看下是不是PLK.hex里本身缺少某些地址段,编译链接时的scatter文件要检查。 如果只是warning,可以忽略,但做CRC最好保证区域完整。 可以试试加上-crop,把校验范围严格限制在实际代码区域。 我印象里STM32算法参数需要最后4字节预留,确保不会被覆盖。 有人建议用-bin再转hex,这样地址就连续了,不会出现hole。 你要确认目标flash大小,0x08040000是不是对齐在正确边界。 我之前也遇到过,最后是修改srec脚本顺序解决的,先fill再crop再CRC。 内存区域未完全分配。 某些代码或数据段未被正确分配到内存区域。 链接脚本中可能存在语法错误或逻辑错误,导致内存分配不连续。 生成并分析 .map 文件,定位未分配的区域。 调整内存定义或显式分配保留段。 检查编译器/链接器选项,避免不必要的内存占用。 检查并优化链接脚本中的内存定义和段分配。
页:
[1]