我使用ARM编译器+链接器用于STM32 MCU。
当生成HEX时,我使用工具srec_cat来计算并将CRC写入HEX内的特定地址。当发生这种情况时,我可以在我的HEX中正确地看到这个CRC。
问题出在执行时间,此值消失并由值0重写。
这是我的分散文件:
LR_IROM1 0x08000000 0x000FE00 { ; load region size_region
ER_IROM1 0x08000000 0x00FE00 { ; load address = execution address ; 64kB - 12kB = 53248 B (ILR Output -O0 = 52496 B) ; For PTB MUST use optimization -O1 or stronger!
startup_stm32l100xba.o (RESET, +First)
vectortable.o (VECTORS)
* (+RO)
}
RW_IRAM1 0x20000000 0x00002000 { ; RW data
.ANY (+RW +ZI)
}
}
LR_IROM3 0x0800FE00 0x0000200 { ; // 512B for Production Constants
ER_CONST_ROM3 0x0800FE00 FIXED 0x0000200 { ; // 512B for Production Constants
;params.o (PARAM, +First)
}
}
我通过srec_cat工具在后期处理中做的是我在地址0x0800FE08写CRC。 当我通过STM32 Link实用程序读取HEX文件时,我可以正确地看到这个值。 但是当我调试地址0x0800FE08的代码值为0时。 我尝试过UNINIT参数,但它没有用。
对我而言,我在汇编文件中指定了特殊区域,其中我放置了一些由srec_cat工具重写的虚拟DWORD,然后我可以在执行时间中正确读取CRC值。 这是代码:
AREA PARAM, DATA, READWRITE
EXPORT APP_CRC
EXPORT WEL_CRC
__PARAM
APP_CRC DCD 0xAAAABBBB
WEL_CRC DCD 0xCCCCDDDD
ALIGN
AREA |.text|, CODE, READONLY
END
但必须有另一种方法如何保存HEX文件中的数据并在同一执行区域内同时使用at_address指令。 我希望通过以下方法将固定值放入地址0x0800FE00中。
const u32 U32_Product_SN 属性((at(0x0800FE00)))= 1;
我希望保留已经在地址0x0800FE08的后期处理操作添加的HEX文件中的内容。而且我不想使用汇编文件和AREA指令。
您是否知道如何保留srec_cat工具生成的CRC值,即使在运行时,执行时间?
答案 0 :(得分:0)
好的,我发现了问题。
很简单,当我使用CRC探索HEX文件时,所有内容都可以,但在调试模式下,它使用的是AXF(ELF文件)而不是HEX,它只属于我的后期处理修改。
因此,要在调试模式下正确查看CRC,我还必须修改AXF。