使用"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 是一个静态分配的变量