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.

Compiler/MSP432P401R: Ram function in MSP432 (followup question)

Part Number: MSP432P401R

Tool/software: TI C/C++ Compiler

Hi TI forum community,

 I get compiler warnings that the library call "sprintf" is power instensive and I should move the function to RAM.

 The examples and links I've found in this forum about this topic refer to non-library, i.e. "my own code".

  How do I add this, below, to a library call that takes parameters and returns a value?

__attribute__((ramfunc))
void f(void) { ... }

thanks, 

bob s.

  • Both of the following links refer to ULP Advisor for MSP430, and not MSP432.  But nearly all of the information applies to both devices.

    Thanks and regards,

    -George

  • Hi,

    I'm looking at the line on the webpage for ULP Advisor Rule 5.3:

    "Add the following lines to the linker command file to redirect these objects into the FLASH_EXECUTE//RAM_EXECUTE area
    ...
    .text:rts430.lib_printf : { rts*.lib<*printf.obj>(.text) } load = FLASH_EXECUTE, run = RAM_EXECUTE"

    The "help" is from 2013, and I'm using CCS v6.1.3 (2016?), and appears to be out of date.
    That is, where is the "linker command file", now that the CCS is menu driven?

    Selecting project -> properties brings up a complex menu of choices including MSP Linker, Basic Options and Advanced Options.
    Advanced Options offers Command File Preprocessing, but then that only offers defining preprocessor macros.
    There are other options: Runtime Environment, Linktime Optimization, and Miscellaneous but I'm not sure...

    Any help?

    thanks,
    bob s.
  • robert schaefer said:
    Add the following lines to the linker command file

    The linker command file is yet another source file in the project.  It has a name similar to msp432p401r.cmd.  This is the file you should modify.

    For a general understanding of linker command files, please see the wiki article Linker Command File Primer.

    Your linker command file will have a lines similar to ...

    #ifdef  __TI_COMPILER_VERSION__
    #if     __TI_COMPILER_VERSION__ >= 15009000
        .TI.ramfunc : {} load=MAIN, run=SRAM_CODE, table(BINIT)
    #endif
    #endif

    The #if lines check that the compiler version symbol is available, and the compiler version is greater than or equal to 15.9.0.LTS.  Line 3 creates an output section named .TI.ramfunc.  It is made up of all the input sections named .TI.ramfunc.  This is the name of the section the compiler uses for functions marked with the ramfunc attribute.  It allocated space in the MAIN memory range for loading, and in the SRAM_CODE memory range for running.  An entry is made in the BINIT table.  The BINIT table is processed by the system startup code.  This processing copies this output section from the MAIN location to the SRAM_CODE location.

    The next step is to make changes to this code so something similar to these lines occurs ...

    robert schaefer said:
    .text:rts430.lib_printf : { rts*.lib<*printf.obj>(.text) } load = FLASH_EXECUTE, run = RAM_EXECUTE

    This first change is only a intermediate step to the final solution.  Change the .TI.ramfunc line to these lines ...

        .TI.ramfunc :
        {
           *(.TI.ramfunc)
        } load=MAIN, run=SRAM_CODE, table(BINIT)
    

    This does exactly the same thing as before.  The line *(.TI.ramfunc) says to collect all of the input sections with the name .TI.ramfunc.  The purpose of this change is to create a spot in the syntax where we can add the entry for the library input sections.  That looks like this ...

        .TI.ramfunc :
        {
           --library=rts*.lib<*printf*.obj>(.text)
           *(.TI.ramfunc)
        } load=MAIN, run=SRAM_CODE, table(BINIT)
    

    Line 3 is the addition.  The --library option tells the linker to expect the input file not in the current directory, but among the directories listed with the --include_path (or -I) options.  The syntax rts*.lib says to use whatever input file that starts with rts and ends with .lib.  Look in the linker map file to see which RTS library is used.  You will see something like rtsv7R4_T_be_eabi.lib.  The syntax <*printf*.obj>(.text) says to use all the of the input sections named .text from files in the RTS library that have the name printf in them.  One example is sprintf.obj.  

    Thanks and regards,

    -George

  • Thank you.

    I finally found the linker command file. Because I started my project with a copy of an example project it had the name of the original project - which has nothing to do with what I am doing now, so it was always there, I just disregarded it because I didn't know what that file was.

    New problem, the linker dies on the snipped you gave me.

    However, since I am using CCS twice, compiling at my desk on a mac, then recompiling on a Windows box to get to the target because only the windows box works with the XDS200 jtag debugger,

    I have another .cmd file that I can look at. On the Windows box, the linker modification is:

    #ifdef __TI_COMPILER_VERSION__
    #if __TI_COMPILER_VERSION__ >= 15009000
    ALIAS
    {
      SRAM_CODE (RWX): origin = 0x01000000
      SRAM_DATA (RW) : origin = 0x20000000
    } length = 0x00010000
    #else
      /* Hint: If the user wants to use ram functions, please observe that SRAM_CODE */
      /* and SRAM_DATA memory areas are overlapping. You need to take measures to separate */
      /* data from code in RAM. This is only valid for Compiler version earlier than 15.09.0.STS.*/
      SRAM_CODE (RWX): origin = 0x01000000, length = 0x00010000
      SRAM_DATA (RW) : origin = 0x20000000, length = 0x00010000
    #endif

    When I backfit the above lines to the mac version of CCS, the link succeeds. So then, the next step is to add: 

    .TI.ramfunc : {} load=MAIN, run=SRAM_CODE, table(BINIT)

    However, I have no idea where to add the line. I put it above ALIAS and the link step fails. I put it after the "ALIAS {" and the link step fails. I put it after the end bracket } and the link step fails.

    I would provide an error message but the error message changes depending on where I put the statement.

    What should I try next?


  • I presumed your linker command file already had a line similar to 

        .TI.ramfunc : {} load=MAIN, run=SRAM_CODE, table(BINIT)

    If that is not the case, then it does not make sense to use my changes as described.

    Why did I presume that?  When you start a new project in CCS, you indicate which device you use. Based on this choice, many details are automatically set.  Among these is the linker command file.  For ARM devices like MSP432, all the linker command files come from directory similar to ...

    C:\ti\ccsv7\ccs_base\arm\include

    I checked this directory and only found 2 linker command files for MSP432.  Both of them had the same .TI.ramfunc line.  Thus I presumed you linker command file has this line, and worked from there.

    At this point, I'm not sure what linker command file you have, or how it should be changed.  Please attach your original linker command file to your next post.  Add the file extension .txt, or the forum will reject it.

    Thanks and regards,

    -George

  • Sorry for the late reply, for some reason I did not get an email after your response and got side-tracked last week.

    uart_loopback_24mhz_brclk_ccs.txt
    /******************************************************************************
    *
    * Copyright (C) 2012 - 2015 Texas Instruments Incorporated - http://www.ti.com/
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
    * are met:
    *
    *  Redistributions of source code must retain the above copyright
    *  notice, this list of conditions and the following disclaimer.
    *
    *  Redistributions in binary form must reproduce the above copyright
    *  notice, this list of conditions and the following disclaimer in the
    *  documentation and/or other materials provided with the
    *  distribution.
    *
    *  Neither the name of Texas Instruments Incorporated nor the names of
    *  its contributors may be used to endorse or promote products derived
    *  from this software without specific prior written permission.
    *
    * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    *
    * Default linker command file for Texas Instruments MSP432P401R
    *
    * File creation date: 2015-09-03
    *
    *****************************************************************************/
    
    --retain=flashMailbox
    
    MEMORY
    {
        MAIN       (RX) : origin = 0x00000000, length = 0x00040000
        INFO       (RX) : origin = 0x00200000, length = 0x00004000
        #ifdef  __TI_COMPILER_VERSION__
    #if     __TI_COMPILER_VERSION__ >= 15009000
        .TI.ramfunc : {} load=MAIN, run=SRAM_CODE, table(BINIT)
    #else
    
        SRAM_CODE  (RWX): origin = 0x01000000, length = 0x00010000
        SRAM_DATA  (RW) : origin = 0x20000000, length = 0x00010000
        #endif
    }
    
    /* The following command line options are set as part of the CCS project.    */
    /* If you are building using the command line, or for some reason want to    */
    /* define them here, you can uncomment and modify these lines as needed.     */
    /* If you are using CCS for building, it is probably better to make any such */
    /* modifications in your CCS project and leave this file alone.              */
    /*                                                                           */
    /* A heap size of 1024 bytes is recommended when you plan to use printf()    */
    /* for debug output to the console window.                                   */
    /*                                                                           */
    /* --heap_size=1024                                                          */
    /* --stack_size=512                                                          */
    /* --library=rtsv7M4_T_le_eabi.lib                                           */
    
    /* Section allocation in memory */
    
    SECTIONS
    {
        .intvecs:   > 0x00000000
        .text   :   > MAIN
        .const  :   > MAIN
        .cinit  :   > MAIN
        .pinit  :   > MAIN
        .init_array  :   > MAIN
    
        .flashMailbox : > 0x00200000
    
        .vtable :   > 0x20000000
        .data   :   > SRAM_DATA
        .bss    :   > SRAM_DATA
        .sysmem :   > SRAM_DATA
        .stack  :   > SRAM_DATA (HIGH)
    }
    
    /* Symbolic definition of the WDTCTL register for RTS */
    WDTCTL_SYM = 0x4000480C;
    
    

  • The changes I recommend are in the linker command file I attach at the end of this post.  While I cannot test these changes, I'm very confident it will work.  Your main error is that you had a sections specification in the MEMORY directive.  

    An even better fix ... It appears you got this file from some TI software package.   Update to the most recent version of that package, and use the linker command file found there.

    Thanks and regards,

    -George

    update.txt
    /******************************************************************************
    *
    * Copyright (C) 2012 - 2015 Texas Instruments Incorporated - http://www.ti.com/
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
    * are met:
    *
    *  Redistributions of source code must retain the above copyright
    *  notice, this list of conditions and the following disclaimer.
    *
    *  Redistributions in binary form must reproduce the above copyright
    *  notice, this list of conditions and the following disclaimer in the
    *  documentation and/or other materials provided with the
    *  distribution.
    *
    *  Neither the name of Texas Instruments Incorporated nor the names of
    *  its contributors may be used to endorse or promote products derived
    *  from this software without specific prior written permission.
    *
    * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    *
    * Default linker command file for Texas Instruments MSP432P401R
    *
    * File creation date: 2015-09-03
    *
    *****************************************************************************/
    
    --retain=flashMailbox
    
    MEMORY
    {
        MAIN       (RX) : origin = 0x00000000, length = 0x00040000
        INFO       (RX) : origin = 0x00200000, length = 0x00004000
        SRAM_CODE  (RWX): origin = 0x01000000, length = 0x00010000
        SRAM_DATA  (RW) : origin = 0x20000000, length = 0x00010000
    }
    
    /* The following command line options are set as part of the CCS project.    */
    /* If you are building using the command line, or for some reason want to    */
    /* define them here, you can uncomment and modify these lines as needed.     */
    /* If you are using CCS for building, it is probably better to make any such */
    /* modifications in your CCS project and leave this file alone.              */
    /*                                                                           */
    /* A heap size of 1024 bytes is recommended when you plan to use printf()    */
    /* for debug output to the console window.                                   */
    /*                                                                           */
    /* --heap_size=1024                                                          */
    /* --stack_size=512                                                          */
    /* --library=rtsv7M4_T_le_eabi.lib                                           */
    
    /* Section allocation in memory */
    
    SECTIONS
    {
        .intvecs:   > 0x00000000
        .text   :   > MAIN
        .const  :   > MAIN
        .cinit  :   > MAIN
        .pinit  :   > MAIN
        .init_array  :   > MAIN
    
        .flashMailbox : > 0x00200000
    
        .vtable :   > 0x20000000
        .data   :   > SRAM_DATA
        .bss    :   > SRAM_DATA
        .sysmem :   > SRAM_DATA
        .stack  :   > SRAM_DATA (HIGH)
    
    #ifdef  __TI_COMPILER_VERSION__
    #if     __TI_COMPILER_VERSION__ >= 15009000
        .TI.ramfunc : {} load=MAIN, run=SRAM_CODE, table(BINIT)
    #endif
    #endif
    
    }
    
    /* Symbolic definition of the WDTCTL register for RTS */
    WDTCTL_SYM = 0x4000480C;
    
    

  • Thank you. The file you attached provided the clue/solution.
    I was making changes to the MEMORY section, the changes had to be in the SECTIONS section.
  • I spoke too soon. Just because it links doesn't mean it runs.
    Using the XDS200 debugger I see the code run away as soon as it enters its first sprintf.
    Looking back at the project build, I see a warning at table(BINIT),
    "../linker_directives.cmd", line 85: warning #10068-D: no matching section
    warning #10247-D: creating output section ".binit" without a SECTIONS specification
  • The .binit output section contains the copy table that is processed to effect the copy of the .ramfuncs output section from the MAIN memory range to the SRAM_CODE memory range.  This diagnostic ...

    robert schaefer said:
    warning #10247-D: creating output section ".binit" without a SECTIONS specification

    ... means .binit is allocated in system memory without any guidance from you.  Thus, it is probably allocated incorrectly.  

    When I look at similar linker command files for MSP432 devices, I see this line ...

        .binit        :  > MAIN

    So, try that first.

    Thanks and regards,

    -George

  • One error removed, one new error.
    Here's what I have in the file, hopefully I didn't add a typo:

    .binit : > MAIN
    #ifdef __TI_COMPILER_VERSION__
    #if __TI_COMPILER_VERSION__ >= 15009000
    .TI.ramfunc :
    {
    --library=rts*.lib<*printf*.obj>(.text)
    *(.TI.ramfunc)
    } load=MAIN, run=SRAM_CODE, table(BINIT)
    #endif
    #endif

    The compile error now is:
    "../linker_directives.cmd", line 86: warning #10068-D: no matching section

    Line 85 points to: *(.TI.ramfunc)
  • Please attach the linker map file you get after seeing the "no matching section" warning.  As before, add the file extension .txt.

    Thanks and regards,

    -George

  • linker directives file attached.

    linker_directives.txt
    /******************************************************************************
    *
    * Copyright (C) 2012 - 2015 Texas Instruments Incorporated - http://www.ti.com/
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
    * are met:
    *
    *  Redistributions of source code must retain the above copyright
    *  notice, this list of conditions and the following disclaimer.
    *
    *  Redistributions in binary form must reproduce the above copyright
    *  notice, this list of conditions and the following disclaimer in the
    *  documentation and/or other materials provided with the
    *  distribution.
    *
    *  Neither the name of Texas Instruments Incorporated nor the names of
    *  its contributors may be used to endorse or promote products derived
    *  from this software without specific prior written permission.
    *
    * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    *
    * Default linker command file for Texas Instruments MSP432P401R
    *
    * File creation date: 2015-09-03
    *
    *****************************************************************************/
    
    --retain=flashMailbox
    
    MEMORY
    {
        MAIN       (RX) : origin = 0x00000000, length = 0x00040000
        INFO       (RX) : origin = 0x00200000, length = 0x00004000
        SRAM_CODE  (RWX): origin = 0x01000000, length = 0x00010000
        SRAM_DATA  (RW) : origin = 0x20000000, length = 0x00010000
    }
    
    /* The following command line options are set as part of the CCS project.    */
    /* If you are building using the command line, or for some reason want to    */
    /* define them here, you can uncomment and modify these lines as needed.     */
    /* If you are using CCS for building, it is probably better to make any such */
    /* modifications in your CCS project and leave this file alone.              */
    /*                                                                           */
    /* A heap size of 1024 bytes is recommended when you plan to use printf()    */
    /* for debug output to the console window.                                   */
    /*                                                                           */
    /* --heap_size=1024                                                          */
    /* --stack_size=512                                                          */
    /* --library=rtsv7M4_T_le_eabi.lib                                           */
    
    /* Section allocation in memory */
    
    SECTIONS
    {
        .intvecs:   > 0x00000000
        .text   :   > MAIN
        .const  :   > MAIN
        .cinit  :   > MAIN
        .pinit  :   > MAIN
        .init_array  :   > MAIN
    
        .flashMailbox : > 0x00200000
    
        .vtable :   > 0x20000000
        .data   :   > SRAM_DATA
        .bss    :   > SRAM_DATA
        .sysmem :   > SRAM_DATA
        .stack  :   > SRAM_DATA (HIGH)
        .binit        :  > MAIN
    #ifdef  __TI_COMPILER_VERSION__
    #if     __TI_COMPILER_VERSION__ >= 15009000
    .TI.ramfunc :
    {
      --library=rts*.lib<*printf*.obj>(.text)
       *(.TI.ramfunc)
    } load=MAIN, run=SRAM_CODE, table(BINIT)
    #endif
    #endif
    }
    
    /* Symbolic definition of the WDTCTL register for RTS */
    WDTCTL_SYM = 0x4000480C;
    
    

  • Sorry, but you sent the wrong file.  You sent the linker command file.  I need the linker map file.  It is text file auto-generated by the linker, and has the file extension .map.

    Thanks and regards,

    -George

  • 2nd try

    RapidEnergyUnit.txt
    ******************************************************************************
                      TI ARM Linker Unix v15.12.1                  
    ******************************************************************************
    >> Linked Wed Mar 22 15:37:24 2017
    
    OUTPUT FILE NAME:   <RapidEnergyUnit.out>
    ENTRY POINT SYMBOL: "_c_int00"  address: 00008565
    
    
    MEMORY CONFIGURATION
    
             name            origin    length      used     unused   attr    fill
    ----------------------  --------  ---------  --------  --------  ----  --------
      MAIN                  00000000   00040000  0000a3cc  00035c34  R  X
      INFO                  00200000   00004000  00000000  00004000  R  X
      SRAM_CODE             01000000   00010000  00001170  0000ee90  RW X
      SRAM_DATA             20000000   00010000  000044a4  0000bb5c  RW  
    
    
    SEGMENT ALLOCATION MAP
    
    run origin  load origin   length   init length attrs members
    ----------  ----------- ---------- ----------- ----- -------
    00000000    00000000    00008c50   00008c50    r-x
      00000000    00000000    00008c50   00008c50    r-x .text
    00009dc0    00009dc0    0000060c   0000060c    r--
      00009dc0    00009dc0    00000280   00000280    r-- .const
      0000a040    0000a040    0000037c   0000037c    r-- .cinit
      0000a3bc    0000a3bc    00000010   00000010    r-- .binit
    01000000    00008c50    00001170   00001170    r-x
      01000000    00008c50    00001170   00001170    r-x .TI.ramfunc
    20000000    20000000    000042a8   00000000    rw-
      20000000    20000000    0000350c   00000000    rw- .bss
      20003510    20003510    00000800   00000000    rw- .sysmem
      20003d10    20003d10    00000598   00000000    rw- .data
    2000fe00    2000fe00    00000200   00000000    rw-
      2000fe00    2000fe00    00000200   00000000    rw- .stack
    
    
    SECTION ALLOCATION MAP
    
     output                                  attributes/
    section   page    origin      length       input sections
    --------  ----  ----------  ----------   ----------------
    .text      0    00000000    00008c50     
                      00000000    0000295c     reucmds.obj (.text)
                      0000295c    00001688     reuc_main.obj (.text)
                      00003fe4    00000b0c     processNVM.obj (.text)
                      00004af0    0000092a     rtsv7M4_T_le_v4SPD16_eabi.lib : _scanfi.obj (.text)
                      0000541a    00000002                                   : l_div0.obj (.text)
                      0000541c    00000710     processRTC.obj (.text)
                      00005b2c    000003dc     rtsv7M4_T_le_v4SPD16_eabi.lib : memory.obj (.text)
                      00005f08    0000029c                                   : mktime.obj (.text)
                      000061a4    00000264     utilities.obj (.text)
                      00006408    0000023c     rtsv7M4_T_le_v4SPD16_eabi.lib : strtod.obj (.text)
                      00006644    0000021e                                   : ll_div_t2.obj (.text)
                      00006862    000001f4                                   : ull_div_t2.obj (.text)
                      00006a56    00000002                                   : mpu_init.obj (.text)
                      00006a58    000001e4                                   : strtoll.obj (.text)
                      00006c3c    000001d4     msp432p4xx_driverlib.lib : flash.o (.text:FlashCtl_verifyMemory)
                      00006e10    000001b6     rtsv7M4_T_le_v4SPD16_eabi.lib : fd_add_t2.obj (.text)
                      00006fc6    00000002                                   : startup.obj (.text)
                      00006fc8    00000180     msp432p4xx_driverlib.lib : flash.o (.text:_FlashCtl_ProgramBurst)
                      00007148    0000016c     rtsv7M4_T_le_v4SPD16_eabi.lib : strtoull.obj (.text)
                      000072b4    00000136                                   : fd_div_t2.obj (.text)
                      000073ea    00000002     --HOLE-- [fill = 0]
                      000073ec    00000134                                   : strtol.obj (.text)
                      00007520    00000114                                   : strtoul.obj (.text)
                      00007634    0000010c     myQueue.obj (.text)
                      00007740    000000fc     rtsv7M4_T_le_v4SPD16_eabi.lib : fd_mul_t2.obj (.text)
                      0000783c    000000fc                                   : s_scalbn.obj (.text)
                      00007938    000000fa     msp432p4xx_driverlib.lib : flash.o (.text:FlashCtl_programMemory)
                      00007a32    00000002     --HOLE-- [fill = 0]
                      00007a34    000000ec                              : flash.o (.text:FlashCtl_eraseSector)
                      00007b20    000000e4                              : flash.o (.text:__FlashCtl_remaskBurstDataPost)
                      00007c04    000000e4                              : flash.o (.text:__FlashCtl_remaskBurstDataPre)
                      00007ce8    000000cc     rtsv7M4_T_le_v4SPD16_eabi.lib : sscanf.obj (.text)
                      00007db4    000000b0     msp432p4xx_driverlib.lib : flash.o (.text:_FlashCtl_Program32)
                      00007e64    000000ac                              : flash.o (.text:__FlashCtl_remaskData32Post)
                      00007f10    000000ac                              : flash.o (.text:__FlashCtl_remaskData32Pre)
                      00007fbc    000000a8                              : flash.o (.text:_FlashCtl_Program8)
                      00008064    0000009c     rtsv7M4_T_le_v4SPD16_eabi.lib : memcpy_t2.obj (.text)
                      00008100    00000086                                   : fd_cmp_t2.obj (.text:__aeabi_cdcmple)
                      00008186    00000086                                   : fd_cmp_t2.obj (.text:__aeabi_cdrcmple)
                      0000820c    0000007a                                   : memset_t2.obj (.text)
                      00008286    00000002     --HOLE-- [fill = 0]
                      00008288    00000070                                   : autoinit.obj (.text)
                      000082f8    0000006e                                   : fd_tos_t2.obj (.text)
                      00008366    00000002     --HOLE-- [fill = 0]
                      00008368    0000006c     msp432p4xx_driverlib.lib : flash.o (.text:__FlashCtl_remaskData8Pre)
                      000083d4    0000006a     rtsv7M4_T_le_v4SPD16_eabi.lib : copy_decompress_rle.obj (.text)
                      0000843e    00000002     --HOLE-- [fill = 0]
                      00008440    00000068     msp432p4xx_driverlib.lib : flash.o (.text:__FlashCtl_remaskData8Post)
                      000084a8    00000064     rtsv7M4_T_le_v4SPD16_eabi.lib : s_frexp.obj (.text)
                      0000850c    00000056                                   : ltoa.obj (.text)
                      00008562    00000002     --HOLE-- [fill = 0]
                      00008564    00000054                                   : boot.obj (.text)
                      000085b8    00000054                                   : exit.obj (.text)
                      0000860c    00000050     msp432p4xx_driverlib.lib : sysctl.o (.text:SysCtl_getTLVInfo)
                      0000865c    0000004c                              : flash.o (.text:FlashCtl_setReadMode)
                      000086a8    0000004c     rtsv7M4_T_le_v4SPD16_eabi.lib : atoi.obj (.text)
                      000086f4    0000004c                                   : cpy_tbl.obj (.text)
                      00008740    00000048     msp432p4xx_driverlib.lib : gpio.o (.text:GPIO_setAsPeripheralModuleFunctionInputPin)
                      00008788    00000048     rtsv7M4_T_le_v4SPD16_eabi.lib : fd_toi_t2.obj (.text)
                      000087d0    00000044                                   : fd_tou_t2.obj (.text)
                      00008814    0000003c     msp432p4xx_driverlib.lib : flash.o (.text:FlashCtl_clearProgramVerification)
                      00008850    00000038                              : flash.o (.text:FlashCtl_setProgramVerification)
                      00008888    00000038     rtsv7M4_T_le_v4SPD16_eabi.lib : fs_tod_t2.obj (.text)
                      000088c0    00000030                                   : strncpy.obj (.text)
                      000088f0    0000002e                                   : i_tofd_t2.obj (.text)
                      0000891e    0000002a                                   : strspn.obj (.text)
                      00008948    00000028     msp432p4xx_driverlib.lib : flash.o (.text:FlashCtl_setWaitState)
                      00008970    00000026     rtsv7M4_T_le_v4SPD16_eabi.lib : strncmp.obj (.text)
                      00008996    00000002     --HOLE-- [fill = 0]
                      00008998    00000024     msp432p4xx_driverlib.lib : cs.o (.text:CS_setDCOCenteredFrequency)
                      000089bc    00000024                              : flash.o (.text:FlashCtl_getReadMode)
                      000089e0    00000024     rtsv7M4_T_le_v4SPD16_eabi.lib : difftime.obj (.text)
                      00008a04    00000020     msp432p4xx_driverlib.lib : flash.o (.text:FlashCtl_enableWordProgramming)
                      00008a24    00000020     rtsv7M4_T_le_v4SPD16_eabi.lib : u_tofd_t2.obj (.text)
                      00008a44    0000001e                                   : strcat.obj (.text)
                      00008a62    00000002     --HOLE-- [fill = 0]
                      00008a64    0000001c     msp432p4xx_driverlib.lib : cs.o (.text:CS_setReferenceOscillatorFrequency)
                      00008a80    0000001c                              : flash.o (.text:FlashCtl_getWaitState)
                      00008a9c    0000001c     rtsv7M4_T_le_v4SPD16_eabi.lib : memccpy.obj (.text)
                      00008ab8    00000018                                   : args_main.obj (.text)
                      00008ad0    00000018                                   : ll_mul_t2.obj (.text)
                      00008ae8    00000018                                   : strcmp.obj (.text)
                      00008b00    00000018                                   : strrchr.obj (.text)
                      00008b18    00000016                                   : strchr.obj (.text)
                      00008b2e    00000002     --HOLE-- [fill = 0]
                      00008b30    00000014                                   : _lock.obj (.text)
                      00008b44    00000014                                   : s_copysign.obj (.text)
                      00008b58    00000014                                   : strcpy.obj (.text)
                      00008b6c    00000014                                   : strlen.obj (.text)
                      00008b80    00000010     msp432p4xx_driverlib.lib : flash.o (.text:FlashCtl_disableWordProgramming)
                      00008b90    00000010                              : interrupt.o (.text:Interrupt_disableMaster)
                      00008ba0    00000010                              : interrupt.o (.text:Interrupt_enableMaster)
                      00008bb0    00000010     rtsv7M4_T_le_v4SPD16_eabi.lib : isalnum.obj (.text)
                      00008bc0    00000010                                   : isdigit.obj (.text)
                      00008bd0    00000010                                   : ispunct.obj (.text)
                      00008be0    00000010                                   : isxdigit.obj (.text)
                      00008bf0    0000000e                                   : copy_decompress_none.obj (.text:decompress:none)
                      00008bfe    0000000c     msp432p4xx_driverlib.lib : cpu.o (.text:CPU_cpsid)
                      00008c0a    0000000c                              : cpu.o (.text:CPU_cpsie)
                      00008c16    00000002     --HOLE-- [fill = 0]
                      00008c18    0000000c                              : flash.o (.text:FlashCtl_getInterruptStatus)
                      00008c24    0000000c                              : sysctl.o (.text:SysCtl_getFlashSize)
                      00008c30    0000000a                              : cpu.o (.text:CPU_primask)
                      00008c3a    00000006     rtsv7M4_T_le_v4SPD16_eabi.lib : copy_decompress_rle.obj (.text:decompress:rle24)
                      00008c40    00000004     msp432p4xx_driverlib.lib : i2c.o (.text:I2C_setSlaveAddress)
                      00008c44    00000004     rtsv7M4_T_le_v4SPD16_eabi.lib : pre_init.obj (.text)
                      00008c48    00000008                                   : sprintf.obj (.tramp.sprintf.1)
    
    .TI.ramfunc 
    *          0    00008c50    00001170     RUN ADDR = 01000000
                      00008c50    00000060     rtsv7M4_T_le_v4SPD16_eabi.lib : sprintf.obj (.text)
                      00008cb0    00001110                                   : _printfi.obj (.text)
    
    .const     0    00009dc0    00000280     
                      00009dc0    00000101     rtsv7M4_T_le_v4SPD16_eabi.lib : ctype.obj (.const:.string:_ctypes_)
                      00009ec1    00000007     --HOLE-- [fill = 0]
                      00009ec8    00000098                                   : strtod.obj (.const:$O1$$)
                      00009f60    00000060                                   : mktime.obj (.const:$O1$$)
                      00009fc0    00000024     reuc_main.obj (.const:uartConfig_24Mhz_9600b)
                      00009fe4    00000024     reuc_main.obj (.const:uartConfig_48Mhz_9600b)
                      0000a008    00000014     reuc_main.obj (.const:i2cConfig24)
                      0000a01c    00000014     reuc_main.obj (.const:i2cConfig48)
                      0000a030    00000010     rtsv7M4_T_le_v4SPD16_eabi.lib : _scanfi.obj (.const:$O1$$)
    
    .cinit     0    0000a040    0000037c     
                      0000a040    00000357     (.cinit..data.load) [load image, compression = rle]
                      0000a397    00000001     --HOLE-- [fill = 0]
                      0000a398    0000000b     (.cinit..bss.load) [load image, compression = rle]
                      0000a3a3    00000001     --HOLE-- [fill = 0]
                      0000a3a4    00000008     (__TI_handler_table)
                      0000a3ac    00000010     (__TI_cinit_table)
    
    .init_array 
    *          0    00000000    00000000     UNINITIALIZED
    
    .binit     0    0000a3bc    00000010     
                      0000a3bc    00000010     (.binit)
    
    .bss       0    20000000    0000350c     UNINITIALIZED
                      20000000    00001000     (.common:gAppReadBuffer)
                      20001000    00001000     (.common:gAppWriteBuffer)
                      20002000    00000400     (.common:g_extra)
                      20002400    00000400     (.common:g_info)
                      20002800    00000400     (.common:g_rdbuf_0)
                      20002c00    00000400     (.common:g_rdbuf_1)
                      20003000    00000400     (.common:g_rdbuf_3)
                      20003400    00000040     reuc_main.obj (.bss:I2C_RXData)
                      20003440    00000020     (.common:g_charArray)
                      20003460    00000020     (.common:g_charArray2)
                      20003480    00000020     (.common:g_funcStr)
                      200034a0    00000020     (.common:nvm_stats)
                      200034c0    00000011     reuc_main.obj (.bss)
                      200034d1    00000003     --HOLE--
                      200034d4    00000010     (.common:nvm_info)
                      200034e4    00000004     (.common:g_bytecnt)
                      200034e8    00000004     (.common:g_es_count)
                      200034ec    00000004     (.common:g_es_sz)
                      200034f0    00000004     (.common:g_nvm_pages)
                      200034f4    00000004     (.common:g_nvm_sz)
                      200034f8    00000004     (.common:g_qbuf)
                      200034fc    00000004     (.common:g_rcvBuf)
                      20003500    00000004     (.common:g_tmp)
                      20003504    00000004     (.common:g_ws_count)
                      20003508    00000004     (.common:g_ws_sz)
    
    .sysmem    0    20003510    00000800     UNINITIALIZED
                      20003510    00000008     rtsv7M4_T_le_v4SPD16_eabi.lib : memory.obj (.sysmem)
                      20003518    000007f8     --HOLE--
    
    .data      0    20003d10    00000598     UNINITIALIZED
                      20003d10    0000020a     reucmds.obj (.data:reucmd_help)
                      20003f1a    00000002     --HOLE--
                      20003f1c    00000190     reucmds.obj (.data:g_callTable)
                      200040ac    00000080     processNVM.obj (.data:g_s2cTable)
                      2000412c    0000004c     reuc_main.obj (.data)
                      20004178    00000040     reuc_main.obj (.data:I2C_TXData)
                      200041b8    00000040     msp432p4xx_driverlib.lib : flash.o (.data:__getBurstProgramRegs)
                      200041f8    00000030                              : gpio.o (.data:GPIO_PORT_TO_BASE)
                      20004228    0000002c     processRTC.obj (.data)
                      20004254    00000018     reucmds.obj (.data)
                      2000426c    00000010     rtsv7M4_T_le_v4SPD16_eabi.lib : tmzone.obj (.data:_tz)
                      2000427c    0000000c                                   : exit.obj (.data:$O1$$)
                      20004288    0000000c                                   : memory.obj (.data:$O1$$)
                      20004294    00000008                                   : _lock.obj (.data:$O1$$)
                      2000429c    00000004     processNVM.obj (.data)
                      200042a0    00000004     rtsv7M4_T_le_v4SPD16_eabi.lib : errno.obj (.data)
                      200042a4    00000004                                   : stkdepth_vars.obj (.data)
    
    .stack     0    2000fe00    00000200     UNINITIALIZED
                      2000fe00    00000200     --HOLE--
    
    MODULE SUMMARY
    
           Module                     code    ro data   rw data
           ------                     ----    -------   -------
        ./
           reucmds.obj                10588   0         1014   
           processNVM.obj             2828    0         8404   
           reuc_main.obj              5768    112       3297   
           utilities.obj              612     0         2048   
           processRTC.obj             1808    0         76     
           myQueue.obj                268     0         0      
        +--+--------------------------+-------+---------+---------+
           Total:                     21872   112       14839  
                                                               
        /Applications/ti/ccsv6/tools/compiler/ti-cgt-arm_15.12.1.LTS/lib/rtsv7M4_T_le_v4SPD16_eabi.lib
           _printfi.obj               8736    0         0      
           _scanfi.obj                2346    16        0      
           memory.obj                 988     0         12     
           mktime.obj                 668     96        0      
           strtod.obj                 572     152       0      
           ll_div_t2.obj              542     0         0      
           ull_div_t2.obj             500     0         0      
           strtoll.obj                484     0         0      
           fd_add_t2.obj              438     0         0      
           strtoull.obj               364     0         0      
           fd_div_t2.obj              310     0         0      
           strtol.obj                 308     0         0      
           strtoul.obj                276     0         0      
           fd_cmp_t2.obj              268     0         0      
           ctype.obj                  0       257       0      
           fd_mul_t2.obj              252     0         0      
           s_scalbn.obj               252     0         0      
           sscanf.obj                 204     0         0      
           sprintf.obj                200     0         0      
           memcpy_t2.obj              156     0         0      
           memset_t2.obj              122     0         0      
           autoinit.obj               112     0         0      
           copy_decompress_rle.obj    112     0         0      
           fd_tos_t2.obj              110     0         0      
           s_frexp.obj                100     0         0      
           exit.obj                   84      0         12     
           ltoa.obj                   86      0         0      
           boot.obj                   84      0         0      
           atoi.obj                   76      0         0      
           cpy_tbl.obj                76      0         0      
           fd_toi_t2.obj              72      0         0      
           fd_tou_t2.obj              68      0         0      
           fs_tod_t2.obj              56      0         0      
           strncpy.obj                48      0         0      
           i_tofd_t2.obj              46      0         0      
           strspn.obj                 42      0         0      
           strncmp.obj                38      0         0      
           difftime.obj               36      0         0      
           u_tofd_t2.obj              32      0         0      
           strcat.obj                 30      0         0      
           _lock.obj                  20      0         8      
           memccpy.obj                28      0         0      
           args_main.obj              24      0         0      
           ll_mul_t2.obj              24      0         0      
           strcmp.obj                 24      0         0      
           strrchr.obj                24      0         0      
           strchr.obj                 22      0         0      
           s_copysign.obj             20      0         0      
           strcpy.obj                 20      0         0      
           strlen.obj                 20      0         0      
           isalnum.obj                16      0         0      
           isdigit.obj                16      0         0      
           ispunct.obj                16      0         0      
           isxdigit.obj               16      0         0      
           tmzone.obj                 0       0         16     
           copy_decompress_none.obj   14      0         0      
           errno.obj                  0       0         4      
           pre_init.obj               4       0         0      
           stkdepth_vars.obj          0       0         4      
           l_div0.obj                 2       0         0      
           mpu_init.obj               2       0         0      
           startup.obj                2       0         0      
        +--+--------------------------+-------+---------+---------+
           Total:                     19608   521       56     
                                                               
        /Applications/ti/msp/MSPWare_3_30_00_18/driverlib/driverlib/MSP432P4xx/ccs/msp432p4xx_driverlib.lib
           flash.o                    3050    0         64     
           gpio.o                     72      0         48     
           sysctl.o                   92      0         0      
           cs.o                       64      0         0      
           cpu.o                      34      0         0      
           interrupt.o                32      0         0      
           i2c.o                      4       0         0      
        +--+--------------------------+-------+---------+---------+
           Total:                     3348    0         112    
                                                               
           Heap:                      0       0         2048   
           Stack:                     0       0         512    
           Linker Generated:          0       906       0      
        +--+--------------------------+-------+---------+---------+
           Grand Total:               44828   1539      17567  
    
    
    LINKER GENERATED COPY TABLES
    
    __TI_cinit_table @ 0000a3ac records: 2, size/record: 8, table size: 16
    	.data: load addr=0000a040, load size=00000357 bytes, run addr=20003d10, run size=00000598 bytes, compression=rle
    	.bss: load addr=0000a398, load size=0000000b bytes, run addr=20000000, run size=0000350c bytes, compression=rle
    binit @ 0000a3bc records: 1, size/record: 12, table size: 16
    	.TI.ramfunc: load addr=00008c50, load size=00001170, run addr=01000000, run size=00001170, compression=none
    
    
    LINKER GENERATED HANDLER TABLE
    
    __TI_handler_table @ 0000a3a4 records: 2, size/record: 4, table size: 8
    	index: 0, handler: __TI_decompress_rle24
    	index: 1, handler: __TI_decompress_none
    
    
    FAR CALL TRAMPOLINES
    
    callee name               trampoline name
       callee addr  tramp addr   call addr  call info
    --------------  -----------  ---------  ----------------
    sprintf                   $Tramp$TT$S$$sprintf
       01000001     00008c48     000001c6   reucmds.obj (.text)
                                 00000200   reucmds.obj (.text)
                                 00000232   reucmds.obj (.text)
                                 00000270   reucmds.obj (.text)
                                 0000029e   reucmds.obj (.text)
                                 000002d2   reucmds.obj (.text)
                                 00000448   reucmds.obj (.text)
                                 00000458   reucmds.obj (.text)
                                 000004de   reucmds.obj (.text)
                                 00000518   reucmds.obj (.text)
                                 0000054a   reucmds.obj (.text)
                                 0000058a   reucmds.obj (.text)
                                 000005b8   reucmds.obj (.text)
                                 000005ee   reucmds.obj (.text)
                                 00000604   reucmds.obj (.text)
                                 00000644   reucmds.obj (.text)
                                 000006f4   reucmds.obj (.text)
                                 00000794   reucmds.obj (.text)
                                 000007dc   reucmds.obj (.text)
                                 000008b0   reucmds.obj (.text)
                                 000009b6   reucmds.obj (.text)
                                 000009ec   reucmds.obj (.text)
                                 00000b4c   reucmds.obj (.text)
                                 00000bb0   reucmds.obj (.text)
                                 00000bd0   reucmds.obj (.text)
                                 00000c4e   reucmds.obj (.text)
                                 00000ca8   reucmds.obj (.text)
                                 00000d1c   reucmds.obj (.text)
                                 00000d78   reucmds.obj (.text)
                                 00000d92   reucmds.obj (.text)
                                 00000f42   reucmds.obj (.text)
                                 00000faa   reucmds.obj (.text)
                                 00001046   reucmds.obj (.text)
                                 00001098   reucmds.obj (.text)
                                 000010dc   reucmds.obj (.text)
                                 000011d0   reucmds.obj (.text)
                                 00001268   reucmds.obj (.text)
                                 000012a4   reucmds.obj (.text)
                                 00001320   reucmds.obj (.text)
                                 00001420   reucmds.obj (.text)
                                 000014be   reucmds.obj (.text)
                                 0000150a   reucmds.obj (.text)
                                 00001646   reucmds.obj (.text)
                                 00001664   reucmds.obj (.text)
                                 0000169a   reucmds.obj (.text)
                                 000017d4   reucmds.obj (.text)
                                 000017e4   reucmds.obj (.text)
                                 000018aa   reucmds.obj (.text)
                                 000019b6   reucmds.obj (.text)
                                 000019c6   reucmds.obj (.text)
                                 00001a50   reucmds.obj (.text)
                                 00001bb0   reucmds.obj (.text)
                                 00001bc0   reucmds.obj (.text)
                                 00001c52   reucmds.obj (.text)
                                 00001cc8   reucmds.obj (.text)
                                 00001cd8   reucmds.obj (.text)
                                 00001d6e   reucmds.obj (.text)
                                 00001df8   reucmds.obj (.text)
                                 00001e08   reucmds.obj (.text)
                                 00001e92   reucmds.obj (.text)
                                 00001f42   reucmds.obj (.text)
                                 00001fb8   reucmds.obj (.text)
                                 0000202c   reucmds.obj (.text)
                                 00002060   reucmds.obj (.text)
                                 000020ac   reucmds.obj (.text)
                                 000020e2   reucmds.obj (.text)
                                 0000215e   reucmds.obj (.text)
                                 000021d2   reucmds.obj (.text)
                                 00002214   reucmds.obj (.text)
                                 000022be   reucmds.obj (.text)
                                 000023be   reucmds.obj (.text)
                                 000023ce   reucmds.obj (.text)
                                 000028c6   reucmds.obj (.text)
                                 000029ec   reuc_main.obj (.text)
                                 00002e0a   reuc_main.obj (.text)
                                 00003038   reuc_main.obj (.text)
                                 000030d8   reuc_main.obj (.text)
                                 0000310e   reuc_main.obj (.text)
                                 00003154   reuc_main.obj (.text)
                                 000031b2   reuc_main.obj (.text)
                                 0000354c   reuc_main.obj (.text)
                                 00003574   reuc_main.obj (.text)
                                 0000363c   reuc_main.obj (.text)
                                 0000403a   processNVM.obj (.text)
                                 0000405a   processNVM.obj (.text)
                                 000040aa   processNVM.obj (.text)
                                 000040b8   processNVM.obj (.text)
                                 000041f8   processNVM.obj (.text)
                                 0000461c   processNVM.obj (.text)
                                 00004754   processNVM.obj (.text)
                                 00004988   processNVM.obj (.text)
                                 00005580   processRTC.obj (.text)
                                 0000559a   processRTC.obj (.text)
                                 000055ae   processRTC.obj (.text)
                                 000059ce   processRTC.obj (.text)
                                 000059e4   processRTC.obj (.text)
                                 00005a38   processRTC.obj (.text)
                                 00005a60   processRTC.obj (.text)
                                 00005a84   processRTC.obj (.text)
                                 0000637c   utilities.obj (.text)
                                 000063a2   utilities.obj (.text)
    
    [1 trampolines]
    [101 trampoline calls]
    
    
    GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name 
    
    address   name                                      
    -------   ----                                      
    00003f0d  ADC14_IRQHandler                          
    0000566b  BCD2Bin                                   
    000085b9  C$$EXIT                                   
    00008bff  CPU_cpsid                                 
    00008c0b  CPU_cpsie                                 
    00008c31  CPU_primask                               
    00008999  CS_setDCOCenteredFrequency                
    00008a65  CS_setReferenceOscillatorFrequency        
    00002c09  DelayMs                                   
    00000001  DequeueCmd                                
    00003845  EUSCIA0_IRQHandler                        
    0000398d  EUSCIA1_IRQHandler                        
    00003afd  EUSCIA3_IRQHandler                        
    00003d1d  EUSCIB2_IRQHandler                        
    00008815  FlashCtl_clearProgramVerification         
    00008b81  FlashCtl_disableWordProgramming           
    00008a05  FlashCtl_enableWordProgramming            
    00007a35  FlashCtl_eraseSector                      
    00008c19  FlashCtl_getInterruptStatus               
    000089bd  FlashCtl_getReadMode                      
    00008a81  FlashCtl_getWaitState                     
    00007939  FlashCtl_programMemory                    
    00008851  FlashCtl_setProgramVerification           
    0000865d  FlashCtl_setReadMode                      
    00008949  FlashCtl_setWaitState                     
    00006c3d  FlashCtl_verifyMemory                     
    00008741  GPIO_setAsPeripheralModuleFunctionInputPin
    00004921  GetInfoNVM                                
    000041bf  GetStatsNVM                               
    00008c41  I2C_setSlaveAddress                       
    00002bd5  InABadPlace                               
    000008ed  IndexOfCall                               
    00004a09  InitInfoNVM                               
    00004127  InitStatsNVM                              
    00008b91  Interrupt_disableMaster                   
    00008ba1  Interrupt_enableMaster                    
    00004211  ParamBoundsNVM                            
    00003fe5  PrintNVM                                  
    00007635  QueueCreate                               
    000076bd  QueueDelete                               
    00007659  QueueDestroy                              
    00007665  QueueEnter                                
    00007715  QueueIsEmpty                              
    00007725  QueueIsFull                               
    00003c95  RTC_C_IRQHandler                          
    UNDEFED   SHT$$INIT_ARRAY$$Base                     
    UNDEFED   SHT$$INIT_ARRAY$$Limit                    
    00004999  SetInfoNVM                                
    00008c25  SysCtl_getFlashSize                       
    0000860d  SysCtl_getTLVInfo                         
    00003c79  SysTick_Handler                           
    000058cb  Time2TI                                   
    000056a9  Time2tm                                   
    000055cb  TimeBCD2Fields                            
    0000469d  UnlockEraseWriteLockVerify                
    4000480c  WDTCTL_SYM                                
    00007b21  __FlashCtl_remaskBurstDataPost            
    00007c05  __FlashCtl_remaskBurstDataPre             
    00007e65  __FlashCtl_remaskData32Post               
    00007f11  __FlashCtl_remaskData32Pre                
    00008441  __FlashCtl_remaskData8Post                
    00008369  __FlashCtl_remaskData8Pre                 
    20010000  __STACK_END                               
    00000200  __STACK_SIZE                              
    00000800  __SYSMEM_SIZE                             
    0000a3ac  __TI_CINIT_Base                           
    0000a3bc  __TI_CINIT_Limit                          
    0000a3a4  __TI_Handler_Table_Base                   
    0000a3ac  __TI_Handler_Table_Limit                  
    00008289  __TI_auto_init                            
    2000427c  __TI_cleanup_ptr                          
    00008bf1  __TI_decompress_none                      
    00008c3b  __TI_decompress_rle24                     
    20004280  __TI_dtors_ptr                            
    20004284  __TI_enable_exit_profile_output           
    ffffffff  __TI_pprof_out_hndl                       
    01000e6b  __TI_printfi                              
    ffffffff  __TI_prof_data_size                       
    ffffffff  __TI_prof_data_start                      
    00004f6d  __TI_scanfi                               
    00000000  __TI_static_base__                        
    0000a3bc  __TI_table_binit                          
    00008101  __aeabi_cdcmpeq                           
    00008101  __aeabi_cdcmple                           
    00008187  __aeabi_cdrcmple                          
    000082f9  __aeabi_d2f                               
    00008789  __aeabi_d2iz                              
    000087d1  __aeabi_d2uiz                             
    00006e1b  __aeabi_dadd                              
    000072b5  __aeabi_ddiv                              
    00007741  __aeabi_dmul                              
    00006e11  __aeabi_dsub                              
    00008889  __aeabi_f2d                               
    000088f1  __aeabi_i2d                               
    0000541b  __aeabi_ldiv0                             
    00006645  __aeabi_ldivmod                           
    00008ad1  __aeabi_lmul                              
    0000820d  __aeabi_memclr                            
    0000820d  __aeabi_memclr4                           
    0000820d  __aeabi_memclr8                           
    00008065  __aeabi_memcpy                            
    00008065  __aeabi_memcpy4                           
    00008065  __aeabi_memcpy8                           
    0000820f  __aeabi_memset                            
    0000820f  __aeabi_memset4                           
    0000820f  __aeabi_memset8                           
    00008a25  __aeabi_ui2d                              
    00006863  __aeabi_uldivmod                          
    0000a3bc  __binit__                                 
    ffffffff  __c_args__                                
    000089e1  __difftime32                              
    00005f09  __mktime32                                
    00006a57  __mpu_init                                
    2000fe00  __stack                                   
    00008ab9  _args_main                                
    00008565  _c_int00                                  
    00009dc0  _ctypes_                                  
    20004294  _lock                                     
    00008b3f  _nop                                      
    00008b37  _register_lock                            
    00008b31  _register_unlock                          
    20003510  _sys_memory                               
    00006fc7  _system_post_cinit                        
    00008c45  _system_pre_init                          
    2000426c  _tz                                       
    20004298  _unlock                                   
    000034d5  a2d_get                                   
    000033d1  a2d_init                                  
    00003535  a2d_test                                  
    000085bd  abort                                     
    000086a9  atoi                                      
    0000a3bc  binit                                     
    00005ed5  calloc                                    
    00002491  cmdProcessCmd                             
    000086f5  copy_in                                   
    00008b45  copysign                                  
    00008b45  copysignl                                 
    000089e1  difftime                                  
    00005885  disableAlarm                              
    0000635f  dumpBuffer                                
    00000047  emptyLine                                 
    00004641  eraseAllNVM                               
    0000450b  eraseNVM                                  
    200042a0  errno                                     
    000085c5  exit                                      
    00005c23  free                                      
    000084a9  frexp                                     
    000084a9  frexpl                                    
    20000000  gAppReadBuffer                            
    20001000  gAppWriteBuffer                           
    2000424c  g_alarmCall_f                             
    2000423c  g_alarmDateVal                            
    20004250  g_alarmTask_f                             
    20004240  g_alarmTimeVal                            
    20004248  g_alarm_set                               
    20004244  g_alarm_trig                              
    200034e4  g_bytecnt                                 
    20003f1c  g_callTable                               
    20003440  g_charArray                               
    20003460  g_charArray2                              
    2000416c  g_coreMhz                                 
    20004130  g_eol_f_0                                 
    20004140  g_eol_f_1                                 
    20004150  g_eol_f_3                                 
    200034e8  g_es_count                                
    200034ec  g_es_sz                                   
    20002000  g_extra                                   
    20003480  g_funcStr                                 
    20002400  g_info                                    
    20004268  g_interact_422_f                          
    20004264  g_interact_USB_f                          
    200034f0  g_nvm_pages                               
    200034f4  g_nvm_sz                                  
    2000429c  g_nvm_tot_sz                              
    20004134  g_oflow_f_0                               
    20004144  g_oflow_f_1                               
    20004154  g_oflow_f_3                               
    20004254  g_q1                                      
    200034f8  g_qbuf                                    
    200034fc  g_rcvBuf                                  
    20004138  g_rcvctr_0                                
    20004148  g_rcvctr_1                                
    20004158  g_rcvctr_3                                
    20002800  g_rdbuf_0                                 
    20002c00  g_rdbuf_1                                 
    20003000  g_rdbuf_3                                 
    2000412c  g_ridx_0                                  
    2000413c  g_ridx_1                                  
    2000414c  g_ridx_3                                  
    20004230  g_rtccDateVal                             
    2000422c  g_rtccTimeVal                             
    20004228  g_rtccTime_valid                          
    200040ac  g_s2cTable                                
    20004238  g_save_rtccDateVal                        
    20004234  g_save_rtccTimeVal                        
    20004258  g_sleep_f                                 
    2000415c  g_systick                                 
    20004260  g_task_count                              
    20003500  g_tmp                                     
    20004168  g_uartbase                                
    2000425c  g_wdt_f                                   
    20003504  g_ws_count                                
    20003508  g_ws_sz                                   
    00006333  getHexParam                               
    00006349  getIntParam                               
    00001a7b  getInteractState422                       
    00001a81  getInteractStateUSB                       
    0000631d  getParam                                  
    00006227  getParamByType                            
    000054b9  getRTC                                    
    00005749  getTime                                   
    00002ced  getUartBase                               
    00002bb1  getUsart                                  
    00002a85  getUsartOp                                
    00002b01  getUsartSel                               
    0000a008  i2cConfig24                               
    0000a01c  i2cConfig48                               
    000032dd  i2c_init                                  
    00002ea1  i2c_put_get                               
    00003269  i2c_test                                  
    00002395  iaStatus                                  
    00000941  initCallTable                             
    000044c1  isWriteProtected                          
    00008bb1  isalnum                                   
    00008bc1  isdigit                                   
    00008bd1  ispunct                                   
    00008be1  isxdigit                                  
    0000783d  ldexp                                     
    0000783d  ldexpl                                    
    0000850d  ltoa                                      
    000036e9  main                                      
    200042a4  main_func_sp                              
    00005bbb  malloc                                    
    00005df1  memalign                                  
    00008a9d  memccpy                                   
    00008065  memcpy                                    
    00008215  memset                                    
    00005b2d  minit                                     
    00005f09  mktime                                    
    000061e1  myIsxdigit                                
    200034d4  nvm_info                                  
    200034a0  nvm_stats                                 
    000042d9  page2bank                                 
    000003c9  parseAlarm                                
    00000833  parseCall                                 
    000000f1  parseDate                                 
    0000226f  parseFwd                                  
    00001ec1  parseI2C                                  
    00001b59  parseInteract422                          
    00001c71  parseInteractUSB                          
    00000e75  parseNVM                                  
    00001a69  parseReset                                
    0000195f  parseSleep                                
    00000a89  parseTask                                 
    00001d95  parseUsart                                
    0000177d  parseWDT                                  
    000059ad  printAlarmStatus                          
    0000099d  printCallTable                            
    0000556d  printDateTime                             
    00002a4f  putUsart                                  
    00002a61  putUsartOp                                
    0000295d  putUsartSel                               
    00004875  readNVM                                   
    000058a7  readyForSleep                             
    00005ce5  realloc                                   
    000035a1  reu_init                                  
    20003d10  reucmd_help                               
    000000af  rmspace                                   
    20004164  rtcc_alarm_ctr                            
    20004160  rtcc_event_ctr                            
    0000783d  scalbn                                    
    0000783d  scalbnl                                   
    000057d1  secToAlarm                                
    00004277  sector2address                            
    000044e3  sector2code                               
    00005929  setAlarmDate                              
    00001aa9  setInteractState422                       
    00001aed  setInteractStateUSB                       
    0000541d  setRTC                                    
    00002cad  setUartBase                               
    01000001  sprintf                                   
    00007cfb  sscanf                                    
    000036a9  startup_test                              
    00008a45  strcat                                    
    00008b19  strchr                                    
    00008ae9  strcmp                                    
    00008b59  strcpy                                    
    00008b6d  strlen                                    
    00008971  strncmp                                   
    000088c1  strncpy                                   
    000061a5  strncpySafe                               
    00008b01  strrchr                                   
    0000891f  strspn                                    
    00006409  strtod                                    
    000073ed  strtol                                    
    00006409  strtold                                   
    00006a59  strtoll                                   
    00007521  strtoul                                   
    00007149  strtoull                                  
    00009fc0  uartConfig_24Mhz_9600b                    
    00009fe4  uartConfig_48Mhz_9600b                    
    00002d25  uart_init                                 
    0000434d  verify_sector_fill                        
    00004415  verify_sector_mem                         
    00007ce9  vsscanf                                   
    00004769  writeNVM                                  
    
    
    GLOBAL SYMBOLS: SORTED BY Symbol Address 
    
    address   name                                      
    -------   ----                                      
    00000000  __TI_static_base__                        
    00000001  DequeueCmd                                
    00000047  emptyLine                                 
    000000af  rmspace                                   
    000000f1  parseDate                                 
    00000200  __STACK_SIZE                              
    000003c9  parseAlarm                                
    00000800  __SYSMEM_SIZE                             
    00000833  parseCall                                 
    000008ed  IndexOfCall                               
    00000941  initCallTable                             
    0000099d  printCallTable                            
    00000a89  parseTask                                 
    00000e75  parseNVM                                  
    0000177d  parseWDT                                  
    0000195f  parseSleep                                
    00001a69  parseReset                                
    00001a7b  getInteractState422                       
    00001a81  getInteractStateUSB                       
    00001aa9  setInteractState422                       
    00001aed  setInteractStateUSB                       
    00001b59  parseInteract422                          
    00001c71  parseInteractUSB                          
    00001d95  parseUsart                                
    00001ec1  parseI2C                                  
    0000226f  parseFwd                                  
    00002395  iaStatus                                  
    00002491  cmdProcessCmd                             
    0000295d  putUsartSel                               
    00002a4f  putUsart                                  
    00002a61  putUsartOp                                
    00002a85  getUsartOp                                
    00002b01  getUsartSel                               
    00002bb1  getUsart                                  
    00002bd5  InABadPlace                               
    00002c09  DelayMs                                   
    00002cad  setUartBase                               
    00002ced  getUartBase                               
    00002d25  uart_init                                 
    00002ea1  i2c_put_get                               
    00003269  i2c_test                                  
    000032dd  i2c_init                                  
    000033d1  a2d_init                                  
    000034d5  a2d_get                                   
    00003535  a2d_test                                  
    000035a1  reu_init                                  
    000036a9  startup_test                              
    000036e9  main                                      
    00003845  EUSCIA0_IRQHandler                        
    0000398d  EUSCIA1_IRQHandler                        
    00003afd  EUSCIA3_IRQHandler                        
    00003c79  SysTick_Handler                           
    00003c95  RTC_C_IRQHandler                          
    00003d1d  EUSCIB2_IRQHandler                        
    00003f0d  ADC14_IRQHandler                          
    00003fe5  PrintNVM                                  
    00004127  InitStatsNVM                              
    000041bf  GetStatsNVM                               
    00004211  ParamBoundsNVM                            
    00004277  sector2address                            
    000042d9  page2bank                                 
    0000434d  verify_sector_fill                        
    00004415  verify_sector_mem                         
    000044c1  isWriteProtected                          
    000044e3  sector2code                               
    0000450b  eraseNVM                                  
    00004641  eraseAllNVM                               
    0000469d  UnlockEraseWriteLockVerify                
    00004769  writeNVM                                  
    00004875  readNVM                                   
    00004921  GetInfoNVM                                
    00004999  SetInfoNVM                                
    00004a09  InitInfoNVM                               
    00004f6d  __TI_scanfi                               
    0000541b  __aeabi_ldiv0                             
    0000541d  setRTC                                    
    000054b9  getRTC                                    
    0000556d  printDateTime                             
    000055cb  TimeBCD2Fields                            
    0000566b  BCD2Bin                                   
    000056a9  Time2tm                                   
    00005749  getTime                                   
    000057d1  secToAlarm                                
    00005885  disableAlarm                              
    000058a7  readyForSleep                             
    000058cb  Time2TI                                   
    00005929  setAlarmDate                              
    000059ad  printAlarmStatus                          
    00005b2d  minit                                     
    00005bbb  malloc                                    
    00005c23  free                                      
    00005ce5  realloc                                   
    00005df1  memalign                                  
    00005ed5  calloc                                    
    00005f09  __mktime32                                
    00005f09  mktime                                    
    000061a5  strncpySafe                               
    000061e1  myIsxdigit                                
    00006227  getParamByType                            
    0000631d  getParam                                  
    00006333  getHexParam                               
    00006349  getIntParam                               
    0000635f  dumpBuffer                                
    00006409  strtod                                    
    00006409  strtold                                   
    00006645  __aeabi_ldivmod                           
    00006863  __aeabi_uldivmod                          
    00006a57  __mpu_init                                
    00006a59  strtoll                                   
    00006c3d  FlashCtl_verifyMemory                     
    00006e11  __aeabi_dsub                              
    00006e1b  __aeabi_dadd                              
    00006fc7  _system_post_cinit                        
    00007149  strtoull                                  
    000072b5  __aeabi_ddiv                              
    000073ed  strtol                                    
    00007521  strtoul                                   
    00007635  QueueCreate                               
    00007659  QueueDestroy                              
    00007665  QueueEnter                                
    000076bd  QueueDelete                               
    00007715  QueueIsEmpty                              
    00007725  QueueIsFull                               
    00007741  __aeabi_dmul                              
    0000783d  ldexp                                     
    0000783d  ldexpl                                    
    0000783d  scalbn                                    
    0000783d  scalbnl                                   
    00007939  FlashCtl_programMemory                    
    00007a35  FlashCtl_eraseSector                      
    00007b21  __FlashCtl_remaskBurstDataPost            
    00007c05  __FlashCtl_remaskBurstDataPre             
    00007ce9  vsscanf                                   
    00007cfb  sscanf                                    
    00007e65  __FlashCtl_remaskData32Post               
    00007f11  __FlashCtl_remaskData32Pre                
    00008065  __aeabi_memcpy                            
    00008065  __aeabi_memcpy4                           
    00008065  __aeabi_memcpy8                           
    00008065  memcpy                                    
    00008101  __aeabi_cdcmpeq                           
    00008101  __aeabi_cdcmple                           
    00008187  __aeabi_cdrcmple                          
    0000820d  __aeabi_memclr                            
    0000820d  __aeabi_memclr4                           
    0000820d  __aeabi_memclr8                           
    0000820f  __aeabi_memset                            
    0000820f  __aeabi_memset4                           
    0000820f  __aeabi_memset8                           
    00008215  memset                                    
    00008289  __TI_auto_init                            
    000082f9  __aeabi_d2f                               
    00008369  __FlashCtl_remaskData8Pre                 
    00008441  __FlashCtl_remaskData8Post                
    000084a9  frexp                                     
    000084a9  frexpl                                    
    0000850d  ltoa                                      
    00008565  _c_int00                                  
    000085b9  C$$EXIT                                   
    000085bd  abort                                     
    000085c5  exit                                      
    0000860d  SysCtl_getTLVInfo                         
    0000865d  FlashCtl_setReadMode                      
    000086a9  atoi                                      
    000086f5  copy_in                                   
    00008741  GPIO_setAsPeripheralModuleFunctionInputPin
    00008789  __aeabi_d2iz                              
    000087d1  __aeabi_d2uiz                             
    00008815  FlashCtl_clearProgramVerification         
    00008851  FlashCtl_setProgramVerification           
    00008889  __aeabi_f2d                               
    000088c1  strncpy                                   
    000088f1  __aeabi_i2d                               
    0000891f  strspn                                    
    00008949  FlashCtl_setWaitState                     
    00008971  strncmp                                   
    00008999  CS_setDCOCenteredFrequency                
    000089bd  FlashCtl_getReadMode                      
    000089e1  __difftime32                              
    000089e1  difftime                                  
    00008a05  FlashCtl_enableWordProgramming            
    00008a25  __aeabi_ui2d                              
    00008a45  strcat                                    
    00008a65  CS_setReferenceOscillatorFrequency        
    00008a81  FlashCtl_getWaitState                     
    00008a9d  memccpy                                   
    00008ab9  _args_main                                
    00008ad1  __aeabi_lmul                              
    00008ae9  strcmp                                    
    00008b01  strrchr                                   
    00008b19  strchr                                    
    00008b31  _register_unlock                          
    00008b37  _register_lock                            
    00008b3f  _nop                                      
    00008b45  copysign                                  
    00008b45  copysignl                                 
    00008b59  strcpy                                    
    00008b6d  strlen                                    
    00008b81  FlashCtl_disableWordProgramming           
    00008b91  Interrupt_disableMaster                   
    00008ba1  Interrupt_enableMaster                    
    00008bb1  isalnum                                   
    00008bc1  isdigit                                   
    00008bd1  ispunct                                   
    00008be1  isxdigit                                  
    00008bf1  __TI_decompress_none                      
    00008bff  CPU_cpsid                                 
    00008c0b  CPU_cpsie                                 
    00008c19  FlashCtl_getInterruptStatus               
    00008c25  SysCtl_getFlashSize                       
    00008c31  CPU_primask                               
    00008c3b  __TI_decompress_rle24                     
    00008c41  I2C_setSlaveAddress                       
    00008c45  _system_pre_init                          
    00009dc0  _ctypes_                                  
    00009fc0  uartConfig_24Mhz_9600b                    
    00009fe4  uartConfig_48Mhz_9600b                    
    0000a008  i2cConfig24                               
    0000a01c  i2cConfig48                               
    0000a3a4  __TI_Handler_Table_Base                   
    0000a3ac  __TI_CINIT_Base                           
    0000a3ac  __TI_Handler_Table_Limit                  
    0000a3bc  __TI_CINIT_Limit                          
    0000a3bc  __TI_table_binit                          
    0000a3bc  __binit__                                 
    0000a3bc  binit                                     
    01000001  sprintf                                   
    01000e6b  __TI_printfi                              
    20000000  gAppReadBuffer                            
    20001000  gAppWriteBuffer                           
    20002000  g_extra                                   
    20002400  g_info                                    
    20002800  g_rdbuf_0                                 
    20002c00  g_rdbuf_1                                 
    20003000  g_rdbuf_3                                 
    20003440  g_charArray                               
    20003460  g_charArray2                              
    20003480  g_funcStr                                 
    200034a0  nvm_stats                                 
    200034d4  nvm_info                                  
    200034e4  g_bytecnt                                 
    200034e8  g_es_count                                
    200034ec  g_es_sz                                   
    200034f0  g_nvm_pages                               
    200034f4  g_nvm_sz                                  
    200034f8  g_qbuf                                    
    200034fc  g_rcvBuf                                  
    20003500  g_tmp                                     
    20003504  g_ws_count                                
    20003508  g_ws_sz                                   
    20003510  _sys_memory                               
    20003d10  reucmd_help                               
    20003f1c  g_callTable                               
    200040ac  g_s2cTable                                
    2000412c  g_ridx_0                                  
    20004130  g_eol_f_0                                 
    20004134  g_oflow_f_0                               
    20004138  g_rcvctr_0                                
    2000413c  g_ridx_1                                  
    20004140  g_eol_f_1                                 
    20004144  g_oflow_f_1                               
    20004148  g_rcvctr_1                                
    2000414c  g_ridx_3                                  
    20004150  g_eol_f_3                                 
    20004154  g_oflow_f_3                               
    20004158  g_rcvctr_3                                
    2000415c  g_systick                                 
    20004160  rtcc_event_ctr                            
    20004164  rtcc_alarm_ctr                            
    20004168  g_uartbase                                
    2000416c  g_coreMhz                                 
    20004228  g_rtccTime_valid                          
    2000422c  g_rtccTimeVal                             
    20004230  g_rtccDateVal                             
    20004234  g_save_rtccTimeVal                        
    20004238  g_save_rtccDateVal                        
    2000423c  g_alarmDateVal                            
    20004240  g_alarmTimeVal                            
    20004244  g_alarm_trig                              
    20004248  g_alarm_set                               
    2000424c  g_alarmCall_f                             
    20004250  g_alarmTask_f                             
    20004254  g_q1                                      
    20004258  g_sleep_f                                 
    2000425c  g_wdt_f                                   
    20004260  g_task_count                              
    20004264  g_interact_USB_f                          
    20004268  g_interact_422_f                          
    2000426c  _tz                                       
    2000427c  __TI_cleanup_ptr                          
    20004280  __TI_dtors_ptr                            
    20004284  __TI_enable_exit_profile_output           
    20004294  _lock                                     
    20004298  _unlock                                   
    2000429c  g_nvm_tot_sz                              
    200042a0  errno                                     
    200042a4  main_func_sp                              
    2000fe00  __stack                                   
    20010000  __STACK_END                               
    4000480c  WDTCTL_SYM                                
    ffffffff  __TI_pprof_out_hndl                       
    ffffffff  __TI_prof_data_size                       
    ffffffff  __TI_prof_data_start                      
    ffffffff  __c_args__                                
    UNDEFED   SHT$$INIT_ARRAY$$Base                     
    UNDEFED   SHT$$INIT_ARRAY$$Limit                    
    
    [306 symbols]
    

  • The map file has these lines in it ...

    .TI.ramfunc 
    *          0    00008c50    00001170     RUN ADDR = 01000000
                      00008c50    00000060     rtsv7M4_T_le_v4SPD16_eabi.lib : sprintf.obj (.text)
                      00008cb0    00001110                                   : _printfi.obj (.text)

    This says the .TI.ramfunc output section starts at load address 0x00008c50, and has a run address 0x01000000.  It has only two input sections, which are those .text input sections from printf related functions in rtsv7M4_T_le_v4SPD16_eabi.lib.

    You get the "no matching sections" warning because this line in your linker command file ...

       *(.TI.ramfunc)
    

    ... corresponds to no input sections.  You must not build with the option --ramfunc, or apply the ramfunc attribute to any functions.  Both of those features are described in the ARM compiler manual.  Search for ramfunc to find the details.  If you intend for none your functions to be in RAM, then you can ignore the warning.

    Thanks and regards,

    -George

  • Hi George,

    Now I'm more confused than when I started.

    Let me start from the beginning.

    When I compile, I get the warning: "Detected sprintf() operation(s). Recommend moving them to RAM during run time or not using as these are processing/power intensive."

    Please assume I have no clue, that even if there is an explanation  in the compiler manual that I don't understand how to map the  manual description to a CCS button-to-press.

    But if I can find the --ramfunc switch somewhere in the CCS tool "properties"  maze of abstruse features, then will ALL library functions will be moved into RAM, and I won't need to add  additional statements to the linker command file?

    bob s.

  • What is your overall goal?  That will help me understand what to focus on.

    The overall goal of the ULP advice is help you reduce the power used by your system.  It requires less power to execute out of SRAM than flash.  Thus it makes sense to put the functions that use more cycles in SRAM.  If your system calls sprintf, it is reasonable to assume that takes lots of cycles, and thus it makes sense to put that routine in SRAM.

    Most of our discussion covered the details of how to get sprintf (and related functions) in SRAM.  I suspect you may not be aware of this next part.  The sprintf routine actually starts out in flash.  During system startup, information in the .binit section is used to effect a copy from flash to SRAM.  For the rest of system execution, sprintf is present in SRAM, as if it had been there all along.

    The lines in your linker command file that arrange this are the following:

    .TI.ramfunc :
    {
      --library=rts*.lib<*printf*.obj>(.text)
       *(.TI.ramfunc)
    } load=MAIN, run=SRAM_CODE, table(BINIT)
    

    Line 1 names the output section .TI.ramfunc.  Line 3 says to use as input sections all the the .text sections from files in the RTS library with printf in the file name.  To be even more specific, this applies only to the printf functions in the RTS library your code actually calls.  Line 4 says to include any input section that is named .TI.ramfunc.  More on this later.  Line 5 says to allocate this output section to the MAIN memory range for loading, allocate this output section to the SRAM_CODE memory range fo execution, and put an entry in the BINIT copy table.  The BINIT copy table is automatically processed by the startup code to copy this output section from MAIN to SRAM_CODE.  In this particular case, the table entry has the load address, run address, and length of the .TI.ramfunc output section.  The location of the BINIT table entry is in a different output section named .binit.  Though the names are similar, and they are related, please think of them as separate things.  BINIT is a copy table, and .binit is the output section which contains it.

    More on line 4 ... You might be confused that the output section is named .TI.ramfunc, and there are also input sections named .TI.ramfunc.  It is OK to reuse section names like that.  In fact, it is common.  Even though the names are the same, don't lose the distinction between input sections and the output sections which contain them.

    Yet more on line 4 ...  You get a diagnostic "no matching section" about this line.  You must have no input sections named .TI.ramfunc.  There are two ways to get input sections named .TI.ramfunc.  If you build with the option --ramfunc, then every function is in a .TI.ramfunc input section.  Given that you have limited SRAM, this is probably not what you want.  The other method is to apply the ramfunc function attribute.

    __attribute__((ramfunc))
    void function_name(void)
    {
      /* code here */
    }

    With this method, you can be selective about which functions go in SRAM.  Whether to actually put any of your own functions in SRAM is up to you.  If you decide no, then you can ignore the "no matching section" warning.

    Thanks and regards,

    -George