将部分分配给内存中的固定地址(闪存)

时间:2018-05-15 20:31:22

标签: c absolute sections

我很难在固定地址创建一个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

0 个答案:

没有答案