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.

Custom bootload TIRTOS fails - worked for Stellarisware

I am looking to see if loading a TIRTOS application at address other than 0 can be done.

Previously under stellarisware I was able to move the vectors for the SysBios application by doing the following in the cmd file:

// The starting address of the application. Normally the interrupt vectors
// must be located at the beginning of the application.
#define APP_BASE 0x00004000
#define RAM_BASE 0x20000000
--retain=g_pfnVectors
MEMORY
{
   // This is where our application can start
   FLASH_BT(RX) : origin = 0x00000000, length = 0x00004000
   FLASH (RX) : origin = 0x00004000, length = 0x000FC000
   SRAM (RWX) : origin = 0x20000000, length = 0x00040000
}
/* Section allocation in memory */
SECTIONS
{
   // Vectors are at start of FLASH after bootloader
   .resetVecs: > APP_BASE
   .text : > FLASH
   .const : > FLASH
   .cinit : > FLASH
   .pinit : > FLASH
   .init_array : > FLASH
   .vecs : > RAM_BASE
   .data : > SRAM
   .bss : > SRAM
   .sysmem : > SRAM
   .stack : > SRAM
}
__STACK_TOP = __stack + __STACK_SIZE;

 

However I have now found with TiRTOS this doesn't work anymore.

The linker still puts the vector table at 0 even though I have asked it to move it to 0x00004000.

I wind up with only the vector table in my reserved bootloader block and all the rest of my code where I want it to be.  I would like to install a custom bootloader which needs to run our protocol and also display a boot message on an LCD during loading of new code.  So I need to know how to tell the TiRTOS application it is not the only one and it needs to load its vectors at an alternate address.

I am using tirtos_1_21_00_09 and CCSV5.5.0.00077, processor is TMS4C129ENCPDT

  • Worked it out

    Changed the cfg file to include a section for the vectors

    MEMORY
    {
    
    
       // This is where our application can start
       FLASH_BT (RX) : origin = 0x00000000, length = 0x00004000
       FLASH_VEC (RX) : origin = 0x00004000, length = 0x00000400
       FLASH (RX) : origin = 0x00004400, length = 0x000FCC00
       SRAM (RWX) : origin = 0x20000000, length = 0x00040000
    }

    Then added the following into the project CFG file

    Program.sectMap[".resetVecs"] = "FLASH_VEC";

    The map file now correctly shows resetvecs located at 0x00004000 and my code at 0x00004400