cancel
Showing results for 
Search instead for 
Did you mean: 

CubeIDE V1.18.0 Does not link project correctly

Garnett.Robert
Senior III

Hi,

 

I have a touchGFX V4.23.2 project  written with CubeIDE at least four IDE versions ago and have not had any upgrade problems until I upgraded from 1.17.0 to 1.18.0.

 

When I do a clean build I end up with memory link assignment errors:

 

Snag_24f16061.png

When I do a build using 1.17.0 of the IDE i get an error free compilation and the project runs fine on the target.

Snag_24f24b0f.png

I have checked that the build using 1.18.0 is using the correct linker script and that is OK.

I also checked the section attributes on the variable that go into the external ram and flash.

I note that a new version of gcc has been included, (Updated to GCC 13 as default toolchain) maybe there is a problem with that.

Any ideas on this?

 

My linker script is shown below.

 

 

 

/* Entry Point */
ENTRY(Reset_Handler)

/* Highest address of the user mode stack */
 _sstack = ORIGIN(DTC_STACK);
_estack = ORIGIN(DTC_STACK) + LENGTH(DTC_STACK);	/* end of "RAM" Ram type memory */

_Min_Heap_Size  = 4k ;	/* required amount of heap  */
_Min_Stack_Size = 4k ;	/* required amount of stack */

/* Memories definition */
MEMORY
{
  ITCMRAM    			(xr)    : ORIGIN = 0x00000000,   LENGTH = 64K

  DTC_STACK    			(xrw)  : ORIGIN = 0x20000000,   LENGTH = _Min_Heap_Size + _Min_Stack_Size
  DTCM_MISC				(xrw)    : ORIGIN = 0x20002000,   LENGTH = 120K

  RAM        			(xrw)    : ORIGIN = 0x24000000,   LENGTH = 256K
  RAMFB      			(xrw)    : ORIGIN = 0x24040000,   LENGTH = 768K
  FLASH      			(rx)     : ORIGIN = 0x08000000,   LENGTH = 2048K
  OSPI	     			(xrw)    : ORIGIN = 0x90000000,   LENGTH = 63936K
  OSPI_BACKUP1 		(xrw)    : ORIGIN = 0x93ff0000,   LENGTH = 4k
  OSPI_BACKUP2 		(xrw)    : ORIGIN = 0x93ff1000,   LENGTH = 4K
  D2SRAM1	 			    (rw)	 : ORIGIN = 0x30000000,   LENGTH = 32K
  D2SRAM2	 			    (rw)	 : ORIGIN = 0x30010000,   LENGTH = 64K
  SRD_SRAM    			(rwx)	 : ORIGIN = 0x38000000,   LENGTH = 31k
  BACKUP_SRAM 			(rw)	 : ORIGIN = 0x38800000,   LENGTH = 4k
  EXT_RAM_STATS_OUT	(xrw)  : ORIGIN = 0xD0000000,   LENGTH = 16384K
}


/* Sections */
SECTIONS
{
  /* The startup code into "FLASH" Rom type memory */
  .isr_vector :
  {
    . = ALIGN(4);
    KEEP(*(.isr_vector)) /* Startup code */
    . = ALIGN(4);
  } >FLASH


  /* The program code and other data into "FLASH" Rom type memory */
  .text :
  {
    . = ALIGN(4);
    *(.text)           /* .text sections (code) */
    *(.text*)          /* .text* sections (code) */

    *(.glue_7)         /* glue arm to thumb code */
    *(.glue_7t)        /* glue thumb to arm code */
    *(.eh_frame)

    KEEP (*(.init))
    KEEP (*(.fini))

    . = ALIGN(4);
    _etext = .;        /* define a global symbols at end of code */
  } >FLASH


  /* Constant data into "FLASH" Rom type memory */
  .rodata :
  {
    . = ALIGN(4);
    *(.rodata)         /* .rodata sections (constants, strings, etc.) */
    *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */
    . = ALIGN(4);
  } >FLASH


  .ARM.extab   : {
    . = ALIGN(4);
    *(.ARM.extab* .gnu.linkonce.armextab.*)
    . = ALIGN(4);
  } >FLASH


  .ARM : {
    . = ALIGN(4);
    __exidx_start = .;
    *(.ARM.exidx*)
    __exidx_end = .;
    . = ALIGN(4);
  } >FLASH


  .preinit_array     :
  {
    . = ALIGN(4);
    PROVIDE_HIDDEN (__preinit_array_start = .);
    KEEP (*(.preinit_array*))
    PROVIDE_HIDDEN (__preinit_array_end = .);
    . = ALIGN(4);
  } >FLASH


  .init_array :
  {
    . = ALIGN(4);
    PROVIDE_HIDDEN (__init_array_start = .);
    KEEP (*(SORT(.init_array.*)))
    KEEP (*(.init_array*))
    PROVIDE_HIDDEN (__init_array_end = .);
    . = ALIGN(4);
  } >FLASH


  .fini_array :
  {
    . = ALIGN(4);
    PROVIDE_HIDDEN (__fini_array_start = .);
    KEEP (*(SORT(.fini_array.*)))
    KEEP (*(.fini_array*))
    PROVIDE_HIDDEN (__fini_array_end = .);
    . = ALIGN(4);
  } >FLASH


  /* Code into ITCMRAM */
  _itcm_load_ = LOADADDR(.itcm);
  .itcm :
  {
  	. = ALIGN(4);
	_itcm_start_ = .;
	*(.isr_vector_itcm)
	*(.ITCM_SECTION)
	. = ALIGN(4);
 	_itcm_end_ = .;
  } >ITCMRAM AT >FLASH


  /* Used by the startup to initialize data */
  _sidata = LOADADDR(.data);

  /* Initialized data sections into "RAM" Ram type memory */
  .data :
  {
    . = ALIGN(4);
    _sdata = .;        /* create a global symbol at data start */
    *(.data)           /* .data sections */
    *(.data*)          /* .data* sections */
    . = ALIGN(4);
    _edata = .;        /* define a global symbol at data end */
  } >RAM AT> FLASH


  /* Uninitialized data section into "RAM" Ram type memory */
  . = ALIGN(4);
  .bss :
  {
    /* This is used by the startup in order to initialize the .bss section */
    _sbss = .;         /* define a global symbol at bss start */
    __bss_start__ = _sbss;
    *(.bss)
    *(.bss*)
    *(COMMON)
    . = ALIGN(4);
    _ebss = .;         /* define a global symbol at bss end */
    __bss_end__ = _ebss;
  } >RAM


  /* User_heap_stack section, used to check that there is enough "RAM" Ram  type memory left */
  ._user_heap_stack :
  {
    . = ALIGN(8);
    PROVIDE ( end = . );
    PROVIDE ( _end = . );
    . = . + _Min_Heap_Size;
    . = . + _Min_Stack_Size;
    . = ALIGN(8);
  } >DTC_STACK

/*
     .heap : {
        __heap_start__ = .;
        end = __heap_start__;
        _end = end;
        __end = end;
        . = . + _Min_Heap_Size;
        KEEP(*(.heap))
        __heap_end__ = .;
        __HeapLimit = __heap_end__;
    } > DTC_STACK

    .stack : ALIGN(0x8) {
        _stack = .;
        __stack = .;
        . = . + _Min_Stack_Size;
        __StackTop = . ;
        KEEP(*(.stack))
    } > DTC_STACK
*/


  	.DTCM_MISC : {
  . = ALIGN(4);
  _sDTCM_MISC = .;
  __sDTCM_MISC__ = _sDTCM_MISC;
  *(.DTCM_MISC) /* All nominated variables */
  	. = ALIGN(4);
  _eDTCM_MISC = .;
  __eDTCM_MISC__ = _eDTCM_MISC;
  } >DTCM_MISC


  /* Backup Ram*/
  .proxVars (NOLOAD) :
  {
  	_bubss = .;
  	__bubss__start = _bubss;
  	*(.PROX_VARS_BACK)

  	. = ALIGN(4);
  	_ebubss = .;
  	__ebubss__ = _ebubss;
  }	>BACKUP_SRAM /* Battery Backed RAM */



  /* I2C DMA  Ram*/
  .i2cDMA_Ram  (NOLOAD) :
  {
  	_bubss = .;
  	__bubss__start = _bubss;
  	*(.PROX_I2C_TX_BUFF)
  	*(.PROX_I2C_RX_BUFF)
  	*(.ADC1_DMA_BUFF)
	*(.WI_FI_RX_Ram)
  	. = ALIGN(4);
  	_ebubss = .;
  	__ebubss__ = _ebubss;
  }	>D2SRAM1 /* BDomain 2 AHB  RAM */



  /* ADC2  Ram*/
  .ADC2_DMA_BUFF   :
  {
  	_bubss = .;
  	__bubss__start = _bubss;
  	*(.ADC2_DMA_BUFF)
	*(.WI_FI_TX_Ram)
	*(.UART1_TX_DMA_RAM)
  	. = ALIGN(4);
  	_ebubss = .;
  	__ebubss__ = _ebubss;
  }	>D2SRAM2 /* BDomain 2 AHB  RAM */


  .RAM_D3_PLAY_BUFF (NOLOAD) : {
  . = ALIGN(4);
  _sRAM_D3_REC_BUFF3 = .;
    . = ALIGN(4);
   _eRAM_D3_REC_BUFF = .;
   } >SRD_SRAM

  .EXT_RAM_STATS_OUT (NOLOAD) : {
  . = ALIGN(4);
  _sEXT_RAM_STATS_OUT = .;
    . = ALIGN(4);
   _eEXT_RAM_STATS_OUT = .;
   } >EXT_RAM_STATS_OUT


  .OSPI_BACKUP_PARS1 (NOLOAD) :
  {
  _sOSPI_BACKUP_PARS1 = .;
  __sOSPI_BACKUP_PARS1 = _sOSPI_BACKUP_PARS1;
   * (.OSPI_BACKUP_PARS1)
    . = ALIGN(4);
   _eOSPI_BACKUP_PARS1 = .;
   __eOSPI_BACKUP_PARS1 = _eOSPI_BACKUP_PARS1;
   } >OSPI_BACKUP1


  .OSPI_BACKUP_PARS2 (NOLOAD) :
  {
  _sOSPI_BACKUP_PARS2 = .;
  __sOSPI_BACKUP_PARS2 = _sOSPI_BACKUP_PARS2;
   * (.OSPI_BACKUP_PARS2)
    . = ALIGN(4);
   _eOSPI_BACKUP_PARS2 = .;
   __eOSPI_BACKUP_PARS2 = _eOSPI_BACKUP_PARS2;
   } >OSPI_BACKUP2


  /* Remove information from the compiler libraries */
  /DISCARD/ :
  {
    libc.a ( * )
    libm.a ( * )
    libgcc.a ( * )
  }

  .ARM.attributes 0 : { *(.ARM.attributes) }

    FramebufferSection :
  {
    *(TouchGFX_Framebuffer TouchGFX_Framebuffer.*)
    *(.gnu.linkonce.r.*)
    . = ALIGN(0x4);
  } >RAMFB

  FontFlashSection :
  {
    *(FontFlashSection FontFlashSection.*)
    *(.gnu.linkonce.r.*)
    . = ALIGN(0x4);
  } >OSPI

  TextFlashSection :
  {
    *(TextFlashSection TextFlashSection.*)
    *(.gnu.linkonce.r.*)
    . = ALIGN(0x4);
  } >OSPI

  ExtFlashSection :
  {
    *(ExtFlashSection ExtFlashSection.*)
    *(.gnu.linkonce.r.*)
    . = ALIGN(0x4);
  } >OSPI
}

 

 

 

0 REPLIES 0