我很难在固定地址创建一个Section,这样我就可以将CRC值放在内存的顶部。我在.ReservedCRC
的固定内存地址创建了一个名为0x0001 FFFC
的新部分(或者至少这是我想要做的。但是查看映射文件时,链接器没有放置该部分中的数据。为什么const数组StoredCRC
不是固定地址0x0001 FFFC
?
以下是我为解决此问题所做的工作。将StoredCRC
数组放在ReservedCRC
部分中保持不变。
__attribute__( ( section(".ReservedCRC") ) )const unsigned long StoredCRC[1]
= {0x69FB9601};
我在闪存的最顶部向MEMORY添加了一个名为CRC
的区域,其长度为4字节,用于CRC存储。
MEMORY
{
FLASH (rx) : ORIGIN = 0x0, LENGTH = 0x1FFFC /* 128k */
CRC (rx) : ORIGIN = 0x1FFFC, LENGTH = 4
/* RAM_CODE (rwx) : ORIGIN = 0x10000000, LENGTH = 0x8000 32k executable
code area in RAM */
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x8000 /* 32k */
}
SECTIONS
{
(other section definitions)
/**************************************
Create new section for CRC storage
at fixed location at the top of
flash in "CRC" memory region.
**************************************/
.ReservedCRC 0x0001FFFC:
{
. = ALIGN(4);
KEEP(*(.ReservedCRC*))
} > CRC
}
地图文件
.ReservedCRC 0x0001fffc 0x4
0x0001fffc . = ALIGN (0x4)
*(.rodata*)
*(.ReservedCRC*)
.ReservedCRC 0x0001fffc 0x4 ./Source/functions.o
0x0001fffc StoredCRC