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.

Why is it so difficult to assign bios memory sections for SYSBios verses DSPBios?

Other Parts Discussed in Thread: SYSBIOS

This is the Platform window for setting the various fixed (internal) and user defined (external) memory sections using CCS4.2.2.  Note that under “Memory Sections”  you must select only one section for each of code, data, and stack memory.  But as shown in the load maps created with CCS 3.3, there are multiple sections allocated just to the DSPBios functions and then the standard “.text, .data. .bss etc…” sections for the user application.  Using the TCF GUI in CCS3.3, I can place critical DSPBios functions and data in faster internal IRAM and user sections in external SDRAM.  Using the CFG GUI in CCS4.2.x you have to choose everything in to be in either IRAM or SDRAM.  Oviously, a large program will not fit in IRAM.  However, the SYSBios User’s Guide suggests that you can move the bios sections into IRAM by adding the following commands manully  into the .cfg file:

Program.sectMap[".text:_ti_sysbios_knl_Swi_post__F"] = new Program.SectionSpec();

Program.sectMap[".text:_ti_sysbios_knl_Swi_post__F"] = "IRAM";

 Now given the shear number of sysbios modules (code and data) from the load map created with CCV4.4.2 (~100 occurrances) the questions is does TI expect the user to manually enter and maintain this information in the cfg file for the life of the project remembering that the CCS3.3 TCF tool does it automatically?  Is this a new feature to make memory allocation easier???

 

  • Hi William,

    The RTSC platform allows high level control over placing memory segments. This is suitable for a large category of applications. Based on the allocations defined by the platform the RTSC tools generate a linker command file that places a bunch of sections into target memory regions. Take a look at what the generated linker command file looks like at http://rtsc.eclipse.org/docs-tip/Memory_Management#Memory_Sections.  If this is sufficient for your application requirements then all you need to do is define a RTSC platform using the platform wizard and use it in your application. 

    However many applications need more fine grained control over placing memory sections. In this case  you have the following options to control your memory map:

    Note that even when you use any of these options you still need to have a platform that defines the memory map for your application.

    I would suggest reading http://rtsc.eclipse.org/docs-tip/Memory_Management to get an overview of memory management in RTSC. 

    Let us know if this helps.

    Regards

    Amit

     

     

     

  • The wildcard linker syntax is a bit tricky so here's an example.  You can add your own .cmd file to the project.  The linker can handle more than one .cmd file.  The settings you specify in your .cmd file will be used if they are more highly spec'd than the more general placement in the generated .cmd file.

    Here's an example.  If you are using ELF, then you don't have the leading underscore in _ti_sysbios_ below (use ti_sysbios instead).

    SECTIONS
    {

        /* place all the knl APIs in IRAM */
        .knl: { *.o*(.text:_ti_sysbios_knl*) } > IRAM
       
        /* place all the Hwi APIs in IROM */
        .hwi: { *.o*(.text:_ti_sysbios*_Hwi_*) } > IROM
       
        /* place the remainder of the SYS/BIOS APIs in DDR */
        .sysbios: { *.o*(.text:_ti_sysbios*) } > DDR
           
    }-

    -Karl-