This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28379D: memcpy command will work in RAM configuration ??

Part Number: TMS320F28379D

Hi all,

The memcpy is notworking as expected if MCU boot from RAM(i.e build configuration is ram), application will be crashed, added rts2800_fpu32.lib.

Please let me know how to fix the issue.

Looks like, If wanted to debug memcpy in RAM mode need to impliment memcpy in assembly lanuguage, is it right?

Thanks

  • Hello,

    How have you confirmed the memcpy() call is causing the application to crash? For example, does the application run properly if you removed the memcpy() call? When stepping through the code to debug, does the application crash as soon as the program reaches the memcpy() or somewhere else in the code?

    Just to clarify, do you mean that the application will crash when rts2800_fpu32.lib is added? If so, does the application run fine if that library were excluded?

    A suggestion is to check where the buffers used by the memcpy() are located in memory. How are they allocated? Can you check your linker command file?

    I’d also suggest checking that you’re using a recent compiler version such as TI v16.9.x.LTS.

    Regards,
    Elizabeth
  • Hi Joy,

    Thanks for you are reply.
    It is sure with memcpy the application crashes, whereever memcpy called added for loop logic to copy , there is no issue.
    The memset is working, looks like linker file need to change.
    To fit my application I modified the linker sections, Please find linker file below, the buffers sizes not much big, all together it may come under 50bytes. If you know the fix please let me know.

    **********************************************
    MEMORY
    {
    PAGE 0 :
    /* BEGIN is used for the "boot to SARAM" bootloader mode */

    BEGIN : origin = 0x000000, length = 0x000002
    RAMM0 : origin = 0x000122, length = 0x0002DE
    RAMD0 : origin = 0x00B000, length = 0x000800
    /* RAMLS0 : origin = 0x008000, length = 0x000800
    RAMLS1 : origin = 0x008800, length = 0x000800
    RAMLS2 : origin = 0x009000, length = 0x000800
    RAMLS3 : origin = 0x009800, length = 0x000800
    RAMLS4 : origin = 0x00A000, length = 0x000800 */
    RAMLS_0_1_2_3_4 : origin = 0x008000, length = 0x002800
    RESET : origin = 0x3FFFC0, length = 0x000002

    PAGE 1 :

    BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */
    RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */
    RAMD1 : origin = 0x00B800, length = 0x000800

    RAMLS5 : origin = 0x00A800, length = 0x000800

    RAMGS0 : origin = 0x00C000, length = 0x001000
    RAMGS1 : origin = 0x00D000, length = 0x001000
    RAMGS2 : origin = 0x00E000, length = 0x001000
    RAMGS3 : origin = 0x00F000, length = 0x001000
    RAMGS4 : origin = 0x010000, length = 0x001000
    RAMGS5 : origin = 0x011000, length = 0x001000
    RAMGS6 : origin = 0x012000, length = 0x001000
    RAMGS7 : origin = 0x013000, length = 0x001000
    RAMGS8 : origin = 0x014000, length = 0x001000
    RAMGS9 : origin = 0x015000, length = 0x001000
    RAMGS10 : origin = 0x016000, length = 0x001000
    RAMGS11 : origin = 0x017000, length = 0x001000
    RAMGS12 : origin = 0x018000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
    RAMGS13 : origin = 0x019000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
    RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
    RAMGS15 : origin = 0x01B000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */

    CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400
    CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400

    CANA_MSG_RAM : origin = 0x049000, length = 0x000800
    CANB_MSG_RAM : origin = 0x04B000, length = 0x000800
    }


    SECTIONS
    {
    codestart : > BEGIN, PAGE = 0
    /*.text : > RAMM0 | RAMD0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4, PAGE = 0*/
    .text : >> RAMM0 | RAMD0 | RAMLS_0_1_2_3_4, PAGE = 0 /*Option: Split between M0,D0 and large LSx sections*/
    /* .text : > RAMLS_1_2_3_4, PAGE = 0 */ /*Option: Combined LSx sections*/
    .cinit : > RAMM0, PAGE = 0
    .pinit : > RAMM0, PAGE = 0
    .switch : > RAMM0, PAGE = 0
    .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */

    .stack : > RAMM1, PAGE = 1
    .ebss : > RAMLS5, PAGE = 1
    /* .econst : > RAMLS5, PAGE = 1*/
    /* .econst : >> RAMLS5 | RAMGS0, PAGE = 1 */ /*Run time issues*/
    .econst : >> RAMLS5 | RAMM1, PAGE = 1
    .esysmem : > RAMLS5, PAGE = 1
    Filter_RegsFile : > RAMGS0, PAGE = 1

    ramgs0 : > RAMGS0, PAGE = 1
    ramgs1 : > RAMGS1, PAGE = 1

    #ifdef __TI_COMPILER_VERSION__
    #if __TI_COMPILER_VERSION__ >= 15009000
    .TI.ramfunc : {} > RAMM0, PAGE = 0
    #else
    ramfuncs : > RAMM0 PAGE = 0
    #endif
    #endif

    /* The following section definitions are required when using the IPC API Drivers */
    GROUP : > CPU1TOCPU2RAM, PAGE = 1
    {
    PUTBUFFER
    PUTWRITEIDX
    GETREADIDX
    }

    GROUP : > CPU2TOCPU1RAM, PAGE = 1
    {
    GETBUFFER : TYPE = DSECT
    GETWRITEIDX : TYPE = DSECT
    PUTREADIDX : TYPE = DSECT
    }

    /* The following section definition are for SDFM examples */
    Filter1_RegsFile : > RAMGS1, PAGE = 1, fill=0x1111
    Filter2_RegsFile : > RAMGS2, PAGE = 1, fill=0x2222
    Filter3_RegsFile : > RAMGS3, PAGE = 1, fill=0x3333
    Filter4_RegsFile : > RAMGS4, PAGE = 1, fill=0x4444
    Difference_RegsFile : >RAMGS5, PAGE = 1, fill=0x3333
    }
    **********************************************
  • Hi Elizabeth Joy,

    When stepping in debugging mode as soon as application reaches to memcpy() application is crashing.

    Found the issue, am porting the f28335 application(old) to f28379d(new), the old application has build on ccsv6 and compiler is not v16.9LTS, even if size argument is zero in memcpy in that compiler application is not crahsing, actually it is unwanted code now it has been removed.

    Am using CCSv7 , v16.9LTS compiler, here if size argument is zero application is crashing.

    Please can you share me if you have any user guide or refrence document w.r.to application migration from old compiler to new compiler v16.9LTS.

    Thanks

  • Hi,

    Please see the compiler user’s guide for v16.9.0.LTS here:
    www.ti.com/.../spru514k.pdf

    You can also look through the Compilers wiki for more resources:
    processors.wiki.ti.com/.../Category:Compiler

    Regards,
    Elizabeth