/* 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
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[]( size_t size )
{
return pvPortMalloc(size);
}
void operator delete( void * ptr )
{
vPortFree ( ptr );
}
void operator delete[]( void * ptr )
{
vPortFree ( ptr );
}
~~~
I also have made a call to __libcinitarray() see my reset handler :
~~~
void ResetHandler(void)
{
uint32t *pSrc, *pDest;
Heap and FreeRtos new
heap1 has no free(), so if you have descructors use heap4.