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.

locating STS objects in L3 memory

This is a follow-up to this post:

http://e2e.ti.com/support/development_tools/compiler/f/343/t/61222.aspx

I can now locate STS objects in L3 memory on the C6747, but CCS IDE does not update when they are located here.  Is there some limitation as to where we can put BIOS objects?  I did the same for LOG objects and those still seem to work.  SO why can't STS objects be placed in L3?  I can halt code and view memory to see that the objects are getting updated with counts, but the statistics view will not refresh and display the statistics - not even after a halt.

I'm using CCS3.3 with BIOS 5.33

thanks,

Mike

  • There should be no restriction on placement of STS objects.  I just built an app and placed STS object in L3.  I am using CCSv3 and BIOS 5.33.05.  I ran it on the 6747 simulator and STS view is updating.   I will try on evm board tomorrow.   If you can make a test case that runs on EVM board (or uses only on-chip memory so we can run on an EVM) we can take a look.

    Regards,
    -Karl-

  • thanks Karl.  I just tried again putting STS and LOG objects in L2 and L3 memory.  Here is the linker cmd file syntax I use:

      GROUP:
    {
    host_accessed_data_sect
    } > HOST_ACCESSED_RAM

    GROUP:
    {
    .log_output_section:
    {
    .\Debug\wally2_appcfg.obj(.LOG_status$buf)
    }
    .sts_output_section:
    {
    .\Debug\wally2_appcfg.obj(.sts)
    }
    tx_fir_data_sect
    } > L3_CBA_RAM

    HOST_ACCESSED_RAM = L2; L3_CBA_RAM = L3
    I confirmed again this morning that with this setting, CCS IDE will not get the STS stats. The LOG seems to work -
    messages are output to the message log, but on the statistics view, nothing updates.

    Now, after more investigation, I can get it to work. The issue seems to be whether it's relocated in the linker file
    or the tcf file. In the tcf file, I have to use this command:
    bios.STS.OBJMEMSEG = prog.get("L3_CBA_RAM");
    And I cannot do anything in the linker file.  It seems to be the only way it works.  How come the STS memory 
    section cannot be relocated via a linker file? For LOG objects it seems to work fine.

    Also, I can't use both the tcf command and linker command. What I want is to be able to place STS objects in L3
    and use the linker file to place this section relative to other memory sections I'm putting in
    L3 (hence the need for the GROUP directive).
    So in the above linker file snippet, I need to remove the .sts_output_section. This creates kind of another problem.
    I don't know how to direct the build where to place the STS code in L3. It seems to place it at the end of used L3,
    but what if I want to place it elsewhere?

    LOG objects seem to have so such restrictions. I can use the .log_output_sect and it will work.
    I don't even need a corresponding line in the tcf file:
    /*bios.LOG.instance("LOG_status").bufSeg = prog.get("HOST_ACCESSED_RAM");*/
    Why the difference between STS and LOG?  Any suggestions how I can place STS
    in a desired or exact location in L3 via the linker file?

    thanks,
    Mike



  • Hi Mike --

    Check the BIOS-generated .cmd file.

    STS objects are grouped into a single array which is placed in the BIOS-generated <app>cfg.cmd file.

    It should look something like this:

            .sts: RUN_START(STS_A_TABBEG), RUN_START(_STS_A_TABBEG), RUN_END(STS_A_TABEND), RUN_END(_STS_A_TABEND) {
            } > IRAM


    The code that communicates with the host tools use those STS_A_TABBEG/END etc. symbols to find the STS objects and know how many there are so that the code can efficiently sweep them up to the host.

    You have overridden this placement in your .cmd file so the target code can't find your STS objects.

    If you are concerned with specific placement of code/data within L3, the best thing to do is add additional memory segments (partition L3 into smaller pieces).  You can do this with gconf/tconf.  Go to MEM manager.  Make L3 smaller.  Add new L3 elements to fill the holes.

    Regards,
    -Karl-

  • Thanks Karl.  I think with your feedback I'll be able to get the code placed where I need in memory - and working!