SocialButterfly 发表于 2025-8-23 13:20

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.


公羊子丹 发表于 2025-8-24 07:27

这个警告意思是HEX文件里有空洞,你要么用fill参数把未覆盖区域填满。

周半梅 发表于 2025-8-24 07:28

srec_cat默认要求数据连续,如果有跳地址就会提示hole。

帛灿灿 发表于 2025-8-24 07:28

你已经用了-fill 0xFF,不过要确认起始和结束地址范围跟芯片flash完全一致。

童雨竹 发表于 2025-8-24 07:29

看下是不是PLK.hex里本身缺少某些地址段,编译链接时的scatter文件要检查。

万图 发表于 2025-8-24 07:30

如果只是warning,可以忽略,但做CRC最好保证区域完整。

Wordsworth 发表于 2025-8-24 07:31

可以试试加上-crop,把校验范围严格限制在实际代码区域。

Bblythe 发表于 2025-8-24 07:32

我印象里STM32算法参数需要最后4字节预留,确保不会被覆盖。

Pulitzer 发表于 2025-8-24 07:35

有人建议用-bin再转hex,这样地址就连续了,不会出现hole。

Uriah 发表于 2025-8-24 07:36

你要确认目标flash大小,0x08040000是不是对齐在正确边界。

Clyde011 发表于 2025-8-24 07:37

我之前也遇到过,最后是修改srec脚本顺序解决的,先fill再crop再CRC。

duo点 发表于 2025-8-25 15:41

内存区域未完全分配。

onlycook 发表于 2025-8-25 15:41

某些代码或数据段未被正确分配到内存区域。

七毛钱 发表于 2025-8-25 15:42

链接脚本中可能存在语法错误或逻辑错误,导致内存分配不连续。

内政奇才 发表于 2025-8-25 15:43

生成并分析 .map 文件,定位未分配的区域。

海滨消消 发表于 2025-8-25 15:43

调整内存定义或显式分配保留段。

豌豆爹 发表于 2025-8-25 15:43

检查编译器/链接器选项,避免不必要的内存占用。

麻花油条 发表于 2025-8-25 15:44

检查并优化链接脚本中的内存定义和段分配。
页: [1]
查看完整版本: stm32cubeide警告:calculation has at least one hole