Quality RTOS & Embedded Software

 Real time embedded FreeRTOS RSS feed 
Quick Start Supported MCUs PDF Books Trace Tools Ecosystem TCP & FAT




Loading

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.


[ Back to the top ]    [ About FreeRTOS ]    [ Sitemap ]    [ ]




Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.

Latest News

FreeRTOS kernel V10 is available for immediate download. Now MIT licensed.


FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

IAR Partner

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers

STMicro RTOS partner supporting ARM7, ARM Cortex-M3, ARM Cortex-M4 and ARM Cortex-M0

Texas Instruments MCU Developer Network RTOS partner for ARM and MSP430 microcontrollers

OpenRTOS and SafeRTOS