Heap and FreeRtos new

Posted by wiwix on May 1, 2017

Hi,

I'm facing strange issues in initialization phasis which begins to go out of my field of expertise. I searched for any recommandations on FreeRtos website about C++ integration but I didn't find any good information about my issue (if it exists please point me to the right direction).

The fact is that when I use a C++ "new" statement, the constructor runs (checked with debugger), but several instructions latter (for instance after having build a parent class), I suddenly see the members to change value.

I think something is badly configured with my memory management, but I can't figure out what. Could anyone help ?

I'm using heap1.c and I have overloading the new operators like this : ~~~ void * operator new( sizet size ) { return pvPortMalloc( size ); }

void * operator new { return pvPortMalloc(size); }

void operator delete( void * ptr ) { vPortFree ( ptr ); }

void operator delete { vPortFree ( ptr ); } ~~~

I also have made a call to _libcinitarray() see my reset handler : ~~~ void ResetHandler(void) { uint32_t *pSrc, *pDest;

/* Initialize the relocate segment */
pSrc = &_etext;
pDest = &_srelocate;

if (pSrc != pDest) {
	for (; pDest < &_erelocate;) {
		*pDest++ = *pSrc++;
	}
}

/* Clear the zero segment */
for (pDest = &_szero; pDest < &_ezero;) {
	*pDest++ = 0;
}

/* Set the vector table base address */
pSrc = (uint32_t *) & _sfixed;
SCB->VTOR = ((uint32_t) pSrc & SCB_VTOR_TBLOFF_Msk);

if (((uint32_t) pSrc >= IRAM0_ADDR) && ((uint32_t) pSrc < NFC_RAM_ADDR)) {
	SCB->VTOR |= (1UL) << SCB_VTOR_TBLBASE_Pos;
}

SystemInit();

// Set Systick to 1ms interval, common to all SAM3 variants
if (SysTick_Config(SystemCoreClock / 1000))
{
  // Capture error
  while (1);
}

// Initialize board
init();

//Wait 1 ms
uint32_t start = GetTickCount();
do {
    yield();
} while (GetTickCount() - start < 1);

// Initialize C library
__libc_init_array();

/* Branch to main function */
main();

/* Infinite loop */
while (1);

} ~~~


Heap and FreeRtos new

Posted by edwards3 on May 1, 2017

heap1 has no free(), so if you have descructors use heap4.