嘗試外擴SRAM,以下是我的ld代碼,修改字段標紅
ENTRY( _start )
__stack_size = 2048;
PROVIDE( _stack_size = __stack_size );
MEMORY
{
/* CH32V30x_D8C - CH32V305RB-CH32V305FB
? ?CH32V30x_D8 - CH32V303CB-CH32V303RB
*/
/*
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 128K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K
*/
? ??
/* CH32V30x_D8C - CH32V307VC-CH32V307WC-CH32V307RC
? ?CH32V30x_D8 - CH32V303VC-CH32V303RC
? ?FLASH + RAM supports the following configuration
? ?FLASH-192K + RAM-128K
? ?FLASH-224K + RAM-96K
? ?FLASH-256K + RAM-64K??
? ?FLASH-288K + RAM-32K??
*/
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 256K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K
SRAM (xrw) : ORIGIN = 0x60000000, LENGTH = 64K
}
SECTIONS
{
.init :
{
_sinit = .;
. = ALIGN(4);
KEEP(*(SORT_NONE(.init)))
. = ALIGN(4);
_einit = .;
} >FLASH AT>FLASH
? .vector :
? {
? ? ? *(.vector);
? . = ALIGN(64);
? } >FLASH AT>FLASH
.text :
{
. = ALIGN(4);
*(.text)
*(.text.*)
*(.rodata)
*(.rodata*)
*(.gnu.linkonce.t.*)
. = ALIGN(4);
} >FLASH AT>FLASH?
.fini :
{
KEEP(*(SORT_NONE(.fini)))
. = ALIGN(4);
} >FLASH AT>FLASH
PROVIDE( _etext = . );
PROVIDE( _eitcm = . );
.preinit_array? :
{
? PROVIDE_HIDDEN (__preinit_array_start = .);
? KEEP (*(.preinit_array))
? PROVIDE_HIDDEN (__preinit_array_end = .);
} >FLASH AT>FLASH?
.init_array? ? ?:
{
? PROVIDE_HIDDEN (__init_array_start = .);
? KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
? KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
? PROVIDE_HIDDEN (__init_array_end = .);
} >FLASH AT>FLASH?
.fini_array? ? ?:
{
? PROVIDE_HIDDEN (__fini_array_start = .);
? KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
? KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
? PROVIDE_HIDDEN (__fini_array_end = .);
} >FLASH AT>FLASH?
.ctors? ? ? ? ? :
{
? /* gcc uses crtbegin.o to find the start of
? ? ?the constructors, so we make sure it is
? ? ?first.? Because this is a wildcard, it
? ? ?doesn't matter if the user does not
? ? ?actually link against crtbegin.o; the
? ? ?linker won't look for a file to match a
? ? ?wildcard.? The wildcard also means that it
? ? ?doesn't matter which directory crtbegin.o
? ? ?is in.? */
? KEEP (*crtbegin.o(.ctors))
? KEEP (*crtbegin?.o(.ctors))
? /* We don't want to include the .ctor section from
? ? ?the crtend.o file until after the sorted ctors.
? ? ?The .ctor section from the crtend file contains the
? ? ?end of ctors marker and it must be last */
? KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
? KEEP (*(SORT(.ctors.*)))
? KEEP (*(.ctors))
} >FLASH AT>FLASH?
.dtors? ? ? ? ? :
{
? KEEP (*crtbegin.o(.dtors))
? KEEP (*crtbegin?.o(.dtors))
? KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
? KEEP (*(SORT(.dtors.*)))
? KEEP (*(.dtors))
} >FLASH AT>FLASH?
.dalign :
{
. = ALIGN(4);
PROVIDE(_data_vma = .);
} >RAM AT>FLASH
.dlalign :
{
. = ALIGN(4);?
PROVIDE(_data_lma = .);
} >FLASH AT>FLASH
.data :
{
? ? *(.gnu.linkonce.r.*)
? ? *(.data .data.*)
? ? *(.gnu.linkonce.d.*)
. = ALIGN(8);
? ? PROVIDE( __global_pointer$ = . + 0x800 );
? ? *(.sdata .sdata.*)
*(.sdata2.*)
? ? *(.gnu.linkonce.s.*)
? ? . = ALIGN(8);
? ? *(.srodata.cst16)
? ? *(.srodata.cst8)
? ? *(.srodata.cst4)
? ? *(.srodata.cst2)
? ? *(.srodata .srodata.*)
? ? . = ALIGN(4);
PROVIDE( _edata = .);
} >RAM AT>FLASH
.bss :
{
. = ALIGN(4);
PROVIDE( _sbss = .);
? ? ? *(.sbss*)
? ? ? ? *(.gnu.linkonce.sb.*)
*(.bss*)
? ? ? *(.gnu.linkonce.b.*)
*(COMMON*)
. = ALIGN(4);
PROVIDE( _ebss = .);
} >RAM AT>FLASH
PROVIDE( _end = _ebss);
PROVIDE( end = . );
? ? .stack ORIGIN(RAM) + LENGTH(RAM) - __stack_size :
? ? {
? ? ? ? PROVIDE( _heap_end = . );? ??
? ? ? ? . = ALIGN(4);
? ? ? ? PROVIDE(_susrstack = . );
? ? ? ? . = . + __stack_size;
? ? ? ? PROVIDE( _eusrstack = .);
? ? } >RAM?
.sram :
{
. = ALIGN(4);?
ORIGIN(SRAM);
. = ALIGN(4);?
} >SRAM
}
我在程序里面定義
static lv_color_t buf_1[MY_DISP_HOR_RES * 10]? ?__attribute__((section(".sram")));
清除obj文件重新編譯后出現(xiàn)如下錯誤
c:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe:C:\Users\wky\Desktop\CH32V307 硬件SPI_DMA LCD\CH32V307 硬件SPI_DMA LCD\Ld\Link.ld:1: syntax error
collect2.exe: error: ld returned 1 exit status
make: *** [makefile:114: CH32V307VCT6.elf] Error 1
我不明白是什么原因。