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.

TMS320F28035: C2000 F28x FreeRTOS problem

Part Number: TMS320F28035
Other Parts Discussed in Thread: CONTROLSUITE

Hi,

I'm trying to program F28035 MCU. I used to work on F28069. I was able to combine FreeRTOS with F28069 however, i tried the same thing with F28035 and it's giving error about memory allocation.

I'm using this files for FreeRTOS which has protable c28x files : https://github.com/IvanZuy/freertos_c28x 

"../28035_RAM_lnk.cmd", line 119: error #10099-D: program will not fit into available memory. placement with alignment/blocking fails for section ".text" size 0x175b page 0.

Available memory ranges:
RAML0L1 size: 0xc00 unused: 0xc00 max hole: 0xc00

From error obviously RAML0L1's memory range is not enough but could i change them in someway  ? 

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

   BEGIN      : origin = 0x000000, length = 0x000002
   RAMM0      : origin = 0x000050, length = 0x0003B0
   RAML0L1    : origin = 0x008000, length = 0x000C00
   RESET      : origin = 0x3FFFC0, length = 0x000002
   IQTABLES   : origin = 0x3FE000, length = 0x000B50     /* IQ Math Tables in Boot ROM */
   IQTABLES2  : origin = 0x3FEB50, length = 0x00008C     /* IQ Math Tables in Boot ROM */
   IQTABLES3  : origin = 0x3FEBDC, length = 0x0000AA	 /* IQ Math Tables in Boot ROM */

   BOOTROM    : origin = 0x3FF27C, length = 0x000D44


PAGE 1 :

   BOOT_RSVD   : origin = 0x000002, length = 0x00004E     /* Part of M0, BOOT rom will use this for stack */
   RAMM1       : origin = 0x000480, length = 0x000380     /* on-chip RAM block M1 */
   RAML2       : origin = 0x008C00, length = 0x000400
   RAML3       : origin = 0x009000, length = 0x001000
}


SECTIONS
{
   /* Setup for "boot to SARAM" mode:
      The codestart section (found in DSP28_CodeStartBranch.asm)
      re-directs execution to the start of user code.  */
   codestart        : > BEGIN,     PAGE = 0
   ramfuncs         : > RAMM0      PAGE = 0
   
#ifdef __TI_COMPILER_VERSION__
   #if __TI_COMPILER_VERSION__ >= 15009000
    .TI.ramfunc : {} > RAMM0,      PAGE = 0
   #endif
#endif   

   .text            : > RAML0L1,   PAGE = 0
   .cinit           : > RAMM0,     PAGE = 0
   .pinit           : > RAMM0,     PAGE = 0
   .switch          : > RAMM0,     PAGE = 0
   .reset           : > RESET,     PAGE = 0, TYPE = DSECT /* not used, */

   .stack           : > RAMM1,     PAGE = 1
   .ebss            : > RAML2,     PAGE = 1
   .econst          : > RAML2,     PAGE = 1
   .esysmem         : > RAML2,     PAGE = 1

Here extern functions required by FreeRTOS. These functions declared in main source file like given below.

void vApplicationSetupTimerInterrupt( void )
{
// Start the timer than activate timer interrupt to switch into first task.
EALLOW;
PieVectTable.TINT2 = &portTICK_ISR;
EDIS;


ConfigCpuTimer(&CpuTimer2,
configCPU_CLOCK_HZ / 1000000, // CPU clock in MHz
1000000 / configTICK_RATE_HZ); // Timer period in uS
CpuTimer2Regs.TCR.all = 0x4000; // Enable interrupt and start timer
IER |= M_INT14;
}


void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize )
{
*ppxIdleTaskTCBBuffer = &idleTaskBuffer;
*ppxIdleTaskStackBuffer = idleTaskStack;
*pulIdleTaskStackSize = STACK_SIZE;
}

Thanks a lot.

  • Rasih,
    please refer to the F28035 datasheet or TI controlSuite examples for F2803x to see what memories are available on F2803x. There could be differences in available RAM between F2806x and F2803x that you need to consider when porting applications between the MCUs.

    If the RAMs are available, then you can combine them as you like and use them for program or data as it fits your application by modifying the linker command file.

    Hope this helps.

    Best Regards
    Santosh Athuru
  • Sorry for late response. We changed linker and now we are able to programme F28035 with freeRTOS.

    Thanks for helping.