GCC绝对位置数据放置和潜在的冲突与ROM

问题描述 投票:0回答:1

LLETSALE我的设备在ROM中带有预载的数据(4个字节),电话为0x08016f111。我正在尝试保留和访问应用程序中该地址中的数据。为此,我将变量放在绝对地址:

/* C application code */
__attribute__((section(".noinit"))) extern const uint32_t __TESTVALUE__; // __TESTVALUE__ defined in the .ld script

// Now accessing __TESTVALUE__ gives me the value at address 0x08016F111
/* GCC Linker Script */
MEMORY
{
  ROM (rx)  : ORIGIN = 0x08000000,  LENGTH = 1024K
}
PROVIDE(__TESTVALUE__= 0x08016F111); /* used in C code */

SECTIONS
{
    .isr_vector:
    {
        /* code here */
    } > ROM
    .text:
    {
        /* code here */
    } > ROM
    
    /*...*/
}

该代码的运行良好,我可以看到应该在地址0x0816f111中的值。但是我有一个问题。由于该地址属于ROM的区域,因此ROM的一个部分可能会覆盖该地址的数据(例如,Linker会从ROM的另一个部分(例如.TEXT)放置数据,例如.text,地址为0x08016f111,或者确实可以。因为我已经完成了

PROVIDE(__TESTVALUE__= 0x08016F111);

如果导致某些东西被覆盖,除了将ROM分配到链接文件中的多个区域之外,还有另一种方法可以实现我要做的事情吗?也许是一种说出链接文件“请不要在flash中使用此指定地址范围”的方法?

摘要:

可能会在0x08016f111
    上覆盖链接器文件
  • 如果那么,告诉链接文件的最佳方法是保留此子集的该子集?
linker arm embedded stm32 bare-metal
1个回答
0
投票
0x08016F111

0x0816F111

。大概其中之一是错字。

loght,除非是一个字节数组或类似的方式,否则似乎是一个4字节存储区域的“奇数”地址(双关语)。
我甚至不想问为什么您的“设备都在ROM中使用预载的数据(4个字节),请致电0x08016F111。这本身似乎很奇怪。有这样的原因吗?
	

© www.soinside.com 2019 - 2025. All rights reserved.