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.