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);
} ~~~
heap1 has no free(), so if you have descructors use heap4.