我想在 .text(代码)部分中的特定地址 (0x080017FC) 定位一个 32 位常量值。
老实说,当谈到将链接描述文件修改到这种程度时,我很天真,觉得我不知道该怎么做。
我修改了我的链接描述文件以在 .text 部分中包含这个新部分 (.systemid)。
.text :
{
. = ALIGN(4);
KEEP(*(.systemid))
*(.text) /* .text sections (code) */
*(.text*) /* .text* sections (code) */
*(.glue_7) /* glue arm to thumb code */
*(.glue_7t) /* glue thumb to arm code */
*(.eh_frame)
KEEP (*(.init))
KEEP (*(.fini))
. = ALIGN(4);
_etext = .; /* define a global symbols at end of code */
} >FLASH
为了确保它不会被优化掉,我使用了 KEEP。
然后我在新部分 (.systemid)
中声明了我的常量。这是我开始想知道我应该做什么的地方。如果 .systemid
是一个单独的部分,我会声明常量如下:
const uint32_t __attribute__((used, section (".systemid"))) SYSTEM_ID_U32 = 0x11223344;
但既然这是一节中的一节,难道不是吗?:
uint32_t __attribute__((used, section (".text.systemid"))) SYSTEM_ID_U32 = 0x11223344;
因此链接器会将常量定位在 .text section (0x000001A0)
的开头。太好了,它在文本部分内,但地址不正确。我想将常量定位在 0x08001F7C
.
为了尝试实现这一点,我将以下内容传递给链接器:
-Wl,--section-start=.text.systemid=0x080017FC
再次我不确定它应该是.systemid
还是.text.systemid
无论哪种方式,它都没有将常量定位在0x080017FC
如何让我的常量位于 0x080017FC
(代码)部分内的 .text
而没有任何重叠错误?