根据我的理解,下面的命令是将“__image_copy_start”的值加载到r1寄存器。
ldr r1, =__image_copy_start
我想了解如何将值分配给“__image_copy_start”。我找不到任何赋值给“__image_copy_start”的赋值语句,但我可以在“arch / arc / lib / sections.c”文件中看到以下声明。
char __image_copy_start[0] __attribute__((section(".__image_copy_start")));
char __image_copy_end[0] __attribute__((section(".__image_copy_end")));
似乎__attribute__((section("")))
用于将变量放在特殊部分中(在上面的语句中,“__ image_copy_start [0]”将放在“.__ image_copy_start”部分)。你能帮助理解以下内容吗?
答案 0 :(得分:0)
__image_copy_start
稍后由链接器分配。
值来自链接描述文件。编译器只是将变量留空,只是将符号表中的引用保留给链接器以完成作业。当链接时,链接器在那里放置一个地址,该地址对应于" __image_copy_start
"部分。 A"部分"在链接器的上下文中只是意味着一些地址空间。它可以修复地址范围或按顺序放置。
C代码中的技巧只是告诉编译器&链接器创建一个指针,该指针将被初始化,指向本节的开头。