HOWTO: Execute a library function from RAM memory using GNU build tools

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

HOWTO: Execute a library function from RAM memory using GNU build tools

HOWTO: Execute a library function from RAM memory using GNU build tools

The document describes the steps that need to be done in order to place and execute a library function from a custom memory section - typically RAM using GNU Build tools. The instructions are applicable to any GNU tool-chain. It is demonstrated on a New S32DS Project created in S32 Design Studio for ARM.

Lets assume that we'd like to execute memcpy() function from the standard library (NewLib).

1) The first step is to exclude specific library object file(s) from the input section (using EXCLUDE_FILE) so they will not be linked into the standard .text* flash section. 

The input section associated with EXCLUDE_FILE shall not interfere with the same input section used later in section list (e.g. with *(.text*) input section deleted from the list below). EXCLUDE_FILE in behaves the same was as *.(text*) rule - it only exclude selected file(s) but places all the remaining (non-excluded) input data.

/* The program code and other data goes into internal flash */
  .text :
  {
    . = ALIGN(4);
    *(.text)                 /* .text sections (code) */

     /* Exclude file(s) from NewLib libc.a from .text.* section  */     
     *(EXCLUDE_FILE (*libc.a:lib_a-memcpy-stub.o) .text*)   
 
    *(.rodata)               /* .rodata sections (constants, strings, etc.) */
    *(.rodata*)              /* .rodata* sections (constants, strings, etc.) */
    *(.glue_7)               /* glue arm to thumb code */
    *(.glue_7t)              /* glue thumb to arm code */
    *(.eh_frame)
    KEEP (*(.init))
    KEEP (*(.fini))
    . = ALIGN(4);
  } > m_text

2) Now let's place the memcpy object into a code_ram section which is already defined in the project .ld file. This section is dedicated to a code that shall be executed from RAM (startup routine initializes this section). For more details see HOWTO: Run a routine from RAM in S32 Design Studio  .

The following line places the code (.text* section) from the object file (lib_a-memcpy-stub.o) from the standard NewLib (libc.a) 

*libc.a:lib_a-memcpy-stub.o (.text*)

into .code section:

.code : AT(__CODE_ROM)
  {
    . = ALIGN(4);
    __CODE_RAM = .;
    __code_start__ = .;      /* Create a global symbol at code start. */
    __code_ram_start__ = .;

    *(.code_ram)             /* Custom section for storing code in RAM */

    *libc.a:lib_a-memcpy-stub.o (.text*)   /* add memcpy from the NewLib library here*/ 
  
    . = ALIGN(4);
    __code_end__ = .;        /* Define a global symbol at code end. */
    __code_ram_end__ = .;
  } > m_data

After building the project you can check the map file to confirm memcpy is indeed placed into .code section in RAM memory:

.code           0x1fff881c       0x18 load address 0x00000d90
                0x1fff881c                . = ALIGN (0x4)
                0x1fff881c                __CODE_RAM = .
                0x1fff881c                __code_start__ = .
                0x1fff881c                __code_ram_start__ = .
 *(.code_ram)
 *libc.a:lib_a-memcpy-stub.o(.text*)
 .text.memcpy   0x1fff881c       0x16 C:/NXP/S32DS_ARM_v2018.R1/Cross_Tools/gcc-6.3-arm32-eabi/arm-none-eabi/newlib/lib/thumb/v7e-m\libc.a(lib_a-memcpy-stub.o)
                0x1fff881c                memcpy
                0x1fff8834                . = ALIGN (0x4)
 *fill*         0x1fff8832        0x2 
                0x1fff8834                __code_end__ = .
                0x1fff8834                __code_ram_end__ = .
                0x00000da8                __CODE_END = (__CODE_ROM + (__code_end__ - __code_start__))
                0x00000da8                __CUSTOM_ROM = __CODE_END

Note

If you are placing a function into RAM always consider to add sub-functions called by that function (typically located in a different object file).

Tags (4)
%3CLINGO-SUB%20id%3D%22lingo-sub-1106568%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EHOWTO%3A%20Execute%20a%20library%20function%20from%20RAM%20memory%20using%20GNU%20build%20tools%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1106568%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EThe%20document%20describes%20the%20steps%20that%20need%20to%20be%20done%20in%20order%20to%20place%20and%20execute%20a%20library%20function%20from%20a%20custom%20memory%20section%20-%20typically%20RAM%20using%20GNU%20Build%20tools.%20The%20instructions%20are%20applicable%20to%20any%20GNU%20tool-chain.%20It%20is%20demonstrated%20on%20a%20New%20S32DS%20Project%20created%20in%20S32%20Design%20Studio%20for%20ARM.%3C%2FP%3E%3CP%3ELets%20assume%20that%20we'd%20like%20to%20execute%20%3CEM%3Ememcpy()%3C%2FEM%3E%20function%20from%20the%20standard%20library%20(NewLib).%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3E%3CSTRONG%3E1%3C%2FSTRONG%3E)%20The%20first%20step%20is%20to%20exclude%20specific%20library%20object%20file(s)%20from%20the%20input%20section%20(using%26nbsp%3B%3CSTRONG%3EEXCLUDE_FILE%3C%2FSTRONG%3E)%20so%20they%20will%20not%20be%20linked%20into%20the%20standard%20.text*%20flash%20section.%26nbsp%3B%3C%2FP%3E%3CP%3EThe%20input%20section%20associated%20with%20%3CSTRONG%3EEXCLUDE_FILE%3C%2FSTRONG%3E%20shall%20not%20interfere%20with%20the%20same%20input%20section%20used%20later%20in%20section%20list%20(e.g.%20with%20*(.text*)%20input%20section%20deleted%20from%20the%20list%20below).%20%3CSTRONG%3EEXCLUDE_FILE%3C%2FSTRONG%3E%20in%20behaves%20the%20same%20was%20as%20*.(text*)%20rule%20-%20it%20only%20exclude%20selected%20file(s)%20but%20places%20all%20the%20remaining%20(non-excluded)%20input%20data.%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CPRE%20class%3D%22language-c%20line-numbers%22%3E%3CCODE%3E%3CSPAN%20class%3D%22comment%20token%22%3E%2F*%20The%20program%20code%20and%20other%20data%20goes%20into%20internal%20flash%20*%2F%3C%2FSPAN%3E%0A%20%20%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Etext%20%3CSPAN%20class%3D%22punctuation%20token%22%3E%3A%3C%2FSPAN%3E%0A%20%20%3CSPAN%20class%3D%22punctuation%20token%22%3E%7B%3C%2FSPAN%3E%0A%20%20%20%20%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22operator%20token%22%3E%3D%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22token%20function%22%3EALIGN%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E%3CSPAN%20class%3D%22number%20token%22%3E4%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E%3B%3C%2FSPAN%3E%0A%20%20%20%20%3CSPAN%20class%3D%22operator%20token%22%3E*%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Etext%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CSPAN%20class%3D%22comment%20token%22%3E%2F*%20.text%20sections%20(code)%20*%2F%3C%2FSPAN%3E%0A%0A%20%20%20%20%20%3CSPAN%20class%3D%22comment%20token%22%3E%2F*%20Exclude%20file(s)%20from%20NewLib%20libc.a%20from%20.text.*%20section%20%20*%2F%3C%2FSPAN%3E%20%20%20%20%20%0A%20%20%20%20%20%3CSPAN%20class%3D%22operator%20token%22%3E*%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3EEXCLUDE_FILE%20%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E%3CSPAN%20class%3D%22operator%20token%22%3E*%3C%2FSPAN%3Elibc%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Ea%3CSPAN%20class%3D%22punctuation%20token%22%3E%3A%3C%2FSPAN%3Elib_a%3CSPAN%20class%3D%22operator%20token%22%3E-%3C%2FSPAN%3Ememcpy%3CSPAN%20class%3D%22operator%20token%22%3E-%3C%2FSPAN%3Estub%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Eo%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Etext%3CSPAN%20class%3D%22operator%20token%22%3E*%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%20%20%20%0A%20%0A%20%20%20%20%3CSPAN%20class%3D%22operator%20token%22%3E*%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Erodata%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CSPAN%20class%3D%22comment%20token%22%3E%2F*%20.rodata%20sections%20(constants%2C%20strings%2C%20etc.)%20*%2F%3C%2FSPAN%3E%0A%20%20%20%20%3CSPAN%20class%3D%22operator%20token%22%3E*%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Erodata%3CSPAN%20class%3D%22operator%20token%22%3E*%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CSPAN%20class%3D%22comment%20token%22%3E%2F*%20.rodata*%20sections%20(constants%2C%20strings%2C%20etc.)%20*%2F%3C%2FSPAN%3E%0A%20%20%20%20%3CSPAN%20class%3D%22operator%20token%22%3E*%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Eglue_7%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CSPAN%20class%3D%22comment%20token%22%3E%2F*%20glue%20arm%20to%20thumb%20code%20*%2F%3C%2FSPAN%3E%0A%20%20%20%20%3CSPAN%20class%3D%22operator%20token%22%3E*%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Eglue_7t%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CSPAN%20class%3D%22comment%20token%22%3E%2F*%20glue%20thumb%20to%20arm%20code%20*%2F%3C%2FSPAN%3E%0A%20%20%20%20%3CSPAN%20class%3D%22operator%20token%22%3E*%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Eeh_frame%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%0A%20%20%20%20KEEP%20%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E%3CSPAN%20class%3D%22operator%20token%22%3E*%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Einit%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%0A%20%20%20%20KEEP%20%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E%3CSPAN%20class%3D%22operator%20token%22%3E*%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Efini%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%0A%20%20%20%20%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22operator%20token%22%3E%3D%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22token%20function%22%3EALIGN%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E%3CSPAN%20class%3D%22number%20token%22%3E4%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E%3B%3C%2FSPAN%3E%0A%20%20%3CSPAN%20class%3D%22punctuation%20token%22%3E%7D%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22operator%20token%22%3E%26gt%3B%3C%2FSPAN%3E%20m_text%3CSPAN%20class%3D%22line-numbers-rows%22%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%3C%2FP%3E%3CP%3E%3CSTRONG%3E2%3C%2FSTRONG%3E)%20Now%20let's%20place%20the%20%3CEM%3Ememcpy%3C%2FEM%3E%20object%20into%20a%20code_ram%20section%20which%20is%20already%20defined%20in%20the%20project%20.ld%20file.%20This%20section%20is%20dedicated%20to%20a%20code%20that%20shall%20be%20executed%20from%20RAM%20(startup%20routine%20initializes%20this%20section).%20For%20more%20details%20see%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Fdocs%2FDOC-334030%22%20target%3D%22_blank%22%3EHOWTO%3A%20Run%20a%20routine%20from%20RAM%20in%20S32%20Design%20Studio%20%3C%2FA%3E%26nbsp%3B.%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3EThe%20following%20line%20places%20the%20code%20(.text*%20section)%20from%20the%20object%20file%20(lib_a-memcpy-stub.o)%20from%20the%20standard%20NewLib%20(libc.a)%26nbsp%3B%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CPRE%20class%3D%22language-c%20line-numbers%22%3E%3CCODE%3E%3CSPAN%20class%3D%22operator%20token%22%3E*%3C%2FSPAN%3Elibc%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Ea%3CSPAN%20class%3D%22punctuation%20token%22%3E%3A%3C%2FSPAN%3Elib_a%3CSPAN%20class%3D%22operator%20token%22%3E-%3C%2FSPAN%3Ememcpy%3CSPAN%20class%3D%22operator%20token%22%3E-%3C%2FSPAN%3Estub%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Eo%20%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Etext%3CSPAN%20class%3D%22operator%20token%22%3E*%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%3CSPAN%20class%3D%22line-numbers-rows%22%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%3C%2FP%3E%3CP%3Einto%20.code%20section%3A%3C%2FP%3E%3CPRE%20class%3D%22language-c%20line-numbers%22%3E%3CCODE%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Ecode%20%3CSPAN%20class%3D%22punctuation%20token%22%3E%3A%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22token%20function%22%3EAT%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E__CODE_ROM%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%0A%20%20%3CSPAN%20class%3D%22punctuation%20token%22%3E%7B%3C%2FSPAN%3E%0A%20%20%20%20%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22operator%20token%22%3E%3D%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22token%20function%22%3EALIGN%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E%3CSPAN%20class%3D%22number%20token%22%3E4%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E%3B%3C%2FSPAN%3E%0A%20%20%20%20__CODE_RAM%20%3CSPAN%20class%3D%22operator%20token%22%3E%3D%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E%3B%3C%2FSPAN%3E%0A%20%20%20%20__code_start__%20%3CSPAN%20class%3D%22operator%20token%22%3E%3D%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E%3B%3C%2FSPAN%3E%20%20%20%20%20%20%3CSPAN%20class%3D%22comment%20token%22%3E%2F*%20Create%20a%20global%20symbol%20at%20code%20start.%20*%2F%3C%2FSPAN%3E%0A%20%20%20%20__code_ram_start__%20%3CSPAN%20class%3D%22operator%20token%22%3E%3D%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E%3B%3C%2FSPAN%3E%0A%0A%20%20%20%20%3CSPAN%20class%3D%22operator%20token%22%3E*%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Ecode_ram%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%3CSPAN%20class%3D%22comment%20token%22%3E%2F*%20Custom%20section%20for%20storing%20code%20in%20RAM%20*%2F%3C%2FSPAN%3E%0A%0A%20%20%20%20%3CSPAN%20class%3D%22operator%20token%22%3E*%3C%2FSPAN%3Elibc%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Ea%3CSPAN%20class%3D%22punctuation%20token%22%3E%3A%3C%2FSPAN%3Elib_a%3CSPAN%20class%3D%22operator%20token%22%3E-%3C%2FSPAN%3Ememcpy%3CSPAN%20class%3D%22operator%20token%22%3E-%3C%2FSPAN%3Estub%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Eo%20%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Etext%3CSPAN%20class%3D%22operator%20token%22%3E*%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%20%20%20%3CSPAN%20class%3D%22comment%20token%22%3E%2F*%20add%20memcpy%20from%20the%20NewLib%20library%20here*%2F%3C%2FSPAN%3E%20%0A%20%20%0A%20%20%20%20%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22operator%20token%22%3E%3D%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22token%20function%22%3EALIGN%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E%3CSPAN%20class%3D%22number%20token%22%3E4%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E%3B%3C%2FSPAN%3E%0A%20%20%20%20__code_end__%20%3CSPAN%20class%3D%22operator%20token%22%3E%3D%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E%3B%3C%2FSPAN%3E%20%20%20%20%20%20%20%20%3CSPAN%20class%3D%22comment%20token%22%3E%2F*%20Define%20a%20global%20symbol%20at%20code%20end.%20*%2F%3C%2FSPAN%3E%0A%20%20%20%20__code_ram_end__%20%3CSPAN%20class%3D%22operator%20token%22%3E%3D%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E%3B%3C%2FSPAN%3E%0A%20%20%3CSPAN%20class%3D%22punctuation%20token%22%3E%7D%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22operator%20token%22%3E%26gt%3B%3C%2FSPAN%3E%20m_data%3CSPAN%20class%3D%22line-numbers-rows%22%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%3C%2FP%3E%3CP%3EAfter%20building%20the%20project%20you%20can%26nbsp%3Bcheck%20the%20map%20file%20to%20confirm%20memcpy%20is%20indeed%20placed%20into%20.code%20section%20in%20RAM%20memory%3A%3C%2FP%3E%3CPRE%20class%3D%22language-c%20line-numbers%22%3E%3CCODE%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Ecode%20%20%20%20%20%20%20%20%20%20%20%3CSPAN%20class%3D%22number%20token%22%3E0x1fff881c%3C%2FSPAN%3E%20%20%20%20%20%20%20%3CSPAN%20class%3D%22number%20token%22%3E0x18%3C%2FSPAN%3E%20load%20address%20%3CSPAN%20class%3D%22number%20token%22%3E0x00000d90%3C%2FSPAN%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CSPAN%20class%3D%22number%20token%22%3E0x1fff881c%3C%2FSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22operator%20token%22%3E%3D%3C%2FSPAN%3E%20ALIGN%20%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E%3CSPAN%20class%3D%22number%20token%22%3E0x4%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CSPAN%20class%3D%22number%20token%22%3E0x1fff881c%3C%2FSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20__CODE_RAM%20%3CSPAN%20class%3D%22operator%20token%22%3E%3D%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CSPAN%20class%3D%22number%20token%22%3E0x1fff881c%3C%2FSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20__code_start__%20%3CSPAN%20class%3D%22operator%20token%22%3E%3D%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CSPAN%20class%3D%22number%20token%22%3E0x1fff881c%3C%2FSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20__code_ram_start__%20%3CSPAN%20class%3D%22operator%20token%22%3E%3D%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3E%0A%20%3CSPAN%20class%3D%22operator%20token%22%3E*%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Ecode_ram%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%0A%20%3CSPAN%20class%3D%22operator%20token%22%3E*%3C%2FSPAN%3Elibc%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Ea%3CSPAN%20class%3D%22punctuation%20token%22%3E%3A%3C%2FSPAN%3Elib_a%3CSPAN%20class%3D%22operator%20token%22%3E-%3C%2FSPAN%3Ememcpy%3CSPAN%20class%3D%22operator%20token%22%3E-%3C%2FSPAN%3Estub%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3E%3CSPAN%20class%3D%22token%20function%22%3Eo%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Etext%3CSPAN%20class%3D%22operator%20token%22%3E*%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%0A%20%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Etext%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Ememcpy%20%20%20%3CSPAN%20class%3D%22number%20token%22%3E0x1fff881c%3C%2FSPAN%3E%20%20%20%20%20%20%20%3CSPAN%20class%3D%22number%20token%22%3E0x16%3C%2FSPAN%3E%20C%3CSPAN%20class%3D%22punctuation%20token%22%3E%3A%3C%2FSPAN%3E%3CSPAN%20class%3D%22operator%20token%22%3E%2F%3C%2FSPAN%3ENXP%3CSPAN%20class%3D%22operator%20token%22%3E%2F%3C%2FSPAN%3ES32DS_ARM_v2018%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3ER1%3CSPAN%20class%3D%22operator%20token%22%3E%2F%3C%2FSPAN%3ECross_Tools%3CSPAN%20class%3D%22operator%20token%22%3E%2F%3C%2FSPAN%3Egcc%3CSPAN%20class%3D%22number%20token%22%3E-6.3%3C%2FSPAN%3E%3CSPAN%20class%3D%22operator%20token%22%3E-%3C%2FSPAN%3Earm32%3CSPAN%20class%3D%22operator%20token%22%3E-%3C%2FSPAN%3Eeabi%3CSPAN%20class%3D%22operator%20token%22%3E%2F%3C%2FSPAN%3Earm%3CSPAN%20class%3D%22operator%20token%22%3E-%3C%2FSPAN%3Enone%3CSPAN%20class%3D%22operator%20token%22%3E-%3C%2FSPAN%3Eeabi%3CSPAN%20class%3D%22operator%20token%22%3E%2F%3C%2FSPAN%3Enewlib%3CSPAN%20class%3D%22operator%20token%22%3E%2F%3C%2FSPAN%3Elib%3CSPAN%20class%3D%22operator%20token%22%3E%2F%3C%2FSPAN%3Ethumb%3CSPAN%20class%3D%22operator%20token%22%3E%2F%3C%2FSPAN%3Ev7e%3CSPAN%20class%3D%22operator%20token%22%3E-%3C%2FSPAN%3Em%5Clibc%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3E%3CSPAN%20class%3D%22token%20function%22%3Ea%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3Elib_a%3CSPAN%20class%3D%22operator%20token%22%3E-%3C%2FSPAN%3Ememcpy%3CSPAN%20class%3D%22operator%20token%22%3E-%3C%2FSPAN%3Estub%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3Eo%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CSPAN%20class%3D%22number%20token%22%3E0x1fff881c%3C%2FSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20memcpy%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CSPAN%20class%3D%22number%20token%22%3E0x1fff8834%3C%2FSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22operator%20token%22%3E%3D%3C%2FSPAN%3E%20ALIGN%20%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E%3CSPAN%20class%3D%22number%20token%22%3E0x4%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%0A%20%3CSPAN%20class%3D%22operator%20token%22%3E*%3C%2FSPAN%3Efill%3CSPAN%20class%3D%22operator%20token%22%3E*%3C%2FSPAN%3E%20%20%20%20%20%20%20%20%20%3CSPAN%20class%3D%22number%20token%22%3E0x1fff8832%3C%2FSPAN%3E%20%20%20%20%20%20%20%20%3CSPAN%20class%3D%22number%20token%22%3E0x2%3C%2FSPAN%3E%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CSPAN%20class%3D%22number%20token%22%3E0x1fff8834%3C%2FSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20__code_end__%20%3CSPAN%20class%3D%22operator%20token%22%3E%3D%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CSPAN%20class%3D%22number%20token%22%3E0x1fff8834%3C%2FSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20__code_ram_end__%20%3CSPAN%20class%3D%22operator%20token%22%3E%3D%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22punctuation%20token%22%3E.%3C%2FSPAN%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CSPAN%20class%3D%22number%20token%22%3E0x00000da8%3C%2FSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20__CODE_END%20%3CSPAN%20class%3D%22operator%20token%22%3E%3D%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E__CODE_ROM%20%3CSPAN%20class%3D%22operator%20token%22%3E%2B%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22punctuation%20token%22%3E(%3C%2FSPAN%3E__code_end__%20%3CSPAN%20class%3D%22operator%20token%22%3E-%3C%2FSPAN%3E%20__code_start__%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%3CSPAN%20class%3D%22punctuation%20token%22%3E)%3C%2FSPAN%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CSPAN%20class%3D%22number%20token%22%3E0x00000da8%3C%2FSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20__CUSTOM_ROM%20%3CSPAN%20class%3D%22operator%20token%22%3E%3D%3C%2FSPAN%3E%20__CODE_END%3CSPAN%20class%3D%22line-numbers-rows%22%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3CSPAN%3E%E2%80%8D%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%3C%2FP%3E%3CH5%20id%3D%22toc-hId-1782797876%22%20id%3D%22toc-hId-1782797876%22%20id%3D%22toc-hId--1595084398%22%3ENote%3C%2FH5%3E%3CP%3EIf%20you%20are%20placing%20a%20function%20into%20RAM%20always%20consider%20to%20add%20sub-functions%20called%20by%20that%20function%20(typically%20located%20in%20a%20different%20object%20file).%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-1106568%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CLINGO-LABEL%3ECC%2B%2B%20Libraries%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3ECompiler%20-%20Assembler%20-%20Linker%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E
100% helpful (1/1)
Version history
Last update:
‎09-10-2020 01:59 AM
Updated by: