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