使用"riscv32/64-unknown-elf-gcc"时如何设置数据内存地址?
How do i set up data memory address when using "riscv32/64-unknown-elf-gcc"?
我设计了RISCV32IM处理器,我用“riscv32/64-unknown-elf-gcc”生成测试代码。
指令内存设置已经用下面的选项解决了(-Ttext选项),但是数据内存设置还没有解决。
riscv64-unknown-elf-gcc -v -march=rv32im -mabi=ilp32 -nostartfiles -x c -Ttext 40000000 -o main.o main.c
请问是否可以设置我想要的数据内存地址?
看起来你需要 link linker script
,比如:
OUTPUT_ARCH( "riscv" )
ENTRY(_start)
SECTIONS
{
. = 0x40000000;
.text.init : { *(.text.init) }
. = ALIGN(0x1000);
.text : { *(.text) }
. = ALIGN(0x1000);
.data : { *(.data) }
.bss : { *(.bss) }
_end = .;
}
_start
是起始符号,0x40000000是内存起始地址,
后跟按 0x1000 对齐的部分名称。
text
这是程序本身
data
是一个静态初始化的变量
bss
是一个静态分配的变量
我设计了RISCV32IM处理器,我用“riscv32/64-unknown-elf-gcc”生成测试代码。 指令内存设置已经用下面的选项解决了(-Ttext选项),但是数据内存设置还没有解决。
riscv64-unknown-elf-gcc -v -march=rv32im -mabi=ilp32 -nostartfiles -x c -Ttext 40000000 -o main.o main.c
请问是否可以设置我想要的数据内存地址?
看起来你需要 link linker script
,比如:
OUTPUT_ARCH( "riscv" )
ENTRY(_start)
SECTIONS
{
. = 0x40000000;
.text.init : { *(.text.init) }
. = ALIGN(0x1000);
.text : { *(.text) }
. = ALIGN(0x1000);
.data : { *(.data) }
.bss : { *(.bss) }
_end = .;
}
_start
是起始符号,0x40000000是内存起始地址, 后跟按 0x1000 对齐的部分名称。text
这是程序本身data
是一个静态初始化的变量bss
是一个静态分配的变量