Мне трудно создать секцию по фиксированному адресу, чтобы я мог поместить значение CRC в верхнюю часть памяти.Я создал новый раздел под названием .ReservedCRC
с фиксированным адресом памяти 0x0001 FFFC
(или, по крайней мере, это то, что я хотел бы сделать. Но, глядя на файл карты, компоновщик не поместил данные в этораздел. Почему константный массив StoredCRC
не был размещен по фиксированному адресу 0x0001 FFFC
?
Вот что я сделал, чтобы это исправить. Размещение массива StoredCRC
в разделе ReservedCRC
осталось без изменений.
__attribute__( ( section(".ReservedCRC") ) )const unsigned long StoredCRC[1]
= {0x69FB9601};
Я добавил область в ПАМЯТЬ с именем 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