我遇到的大多数 ARM 汇编程序都使用 .data 和 .text 节指令。但是,我注意到两件事:
很多时候,GCC 编译器本身生成的汇编代码只会使用 .text 指令,在代码中的某处不使用 .data 指令对变量进行分组。
即使我不使用 .text 部分,我的程序仍然可以正常编译和运行。
我的问题:这些指令是必需的吗?如果是,为什么?如果是,为什么我的程序没有它们仍然可以工作?
当您想决定在传输程序时将定义的部分放置在哪里以及它们在哪里执行时,有时需要使用这些部分指令,在 ROM 中,在 RAM 中等。然后您可以编写自己的链接器脚本,如以下示例(ld
链接描述文件格式):
MEMORY
{
RAM (rw) : ORIGIN = 0x00000000, LENGTH = 128M
ROM (rx) : ORIGIN = 0xffff0000, LENGTH = 64K
}
SECTIONS
{
.startup :
{
*(.text.vectors)
sdram_init.o(.sdram_init)
main.o(.text_main)
} > ROM
.data :
{
*(.data*)
} > RAM
}
如果您使用默认链接器行为,我认为您不需要使用指令显式声明您的部分。