Malloc support for allocating to DRAM and/or IRAM.
This commit is contained in:
parent
9d57176d8e
commit
cc4bd3c58f
18 changed files with 113 additions and 56 deletions
|
|
@ -172,9 +172,8 @@ portBASE_TYPE xPortStartScheduler( void )
|
|||
return pdTRUE;
|
||||
}
|
||||
|
||||
/* Determine free heap size via libc sbrk function & mallinfo
|
||||
/* Determine free heap size via mallinfo
|
||||
|
||||
sbrk gives total size in totally unallocated memory,
|
||||
mallinfo.fordblks gives free space inside area dedicated to heap.
|
||||
|
||||
mallinfo is possibly non-portable, although glibc & newlib both support
|
||||
|
|
@ -183,14 +182,7 @@ portBASE_TYPE xPortStartScheduler( void )
|
|||
size_t xPortGetFreeHeapSize( void )
|
||||
{
|
||||
struct mallinfo mi = mallinfo();
|
||||
uint32_t brk_val = (uint32_t) sbrk(0);
|
||||
|
||||
intptr_t sp = (intptr_t)xPortSupervisorStackPointer;
|
||||
if (sp == 0) {
|
||||
/* scheduler not started */
|
||||
SP(sp);
|
||||
}
|
||||
return sp - brk_val + mi.fordblks;
|
||||
return mi.fordblks;
|
||||
}
|
||||
|
||||
void vPortEndScheduler( void )
|
||||
|
|
|
|||
|
|
@ -754,7 +754,11 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) PRIVILEGED_FUNCTION;
|
|||
/* Allocate space for the stack used by the task being created.
|
||||
The base of the stack memory stored in the TCB so the task can
|
||||
be deleted later if required. */
|
||||
|
||||
/* Allocate the stack in dram, not iram. */
|
||||
uint32_t malloc_mask = set_malloc_regions(MALLOC_MASK_DRAM);
|
||||
pxNewTCB->pxStack = ( StackType_t * ) pvPortMalloc( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
|
||||
set_malloc_regions(malloc_mask);
|
||||
|
||||
if( pxNewTCB->pxStack == NULL )
|
||||
{
|
||||
|
|
@ -769,7 +773,10 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) PRIVILEGED_FUNCTION;
|
|||
StackType_t *pxStack;
|
||||
|
||||
/* Allocate space for the stack used by the task being created. */
|
||||
/* Allocate the stack in dram, not iram. */
|
||||
uint32_t malloc_mask = set_malloc_regions(MALLOC_MASK_DRAM);
|
||||
pxStack = ( StackType_t * ) pvPortMalloc( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
|
||||
set_malloc_regions(malloc_mask);
|
||||
|
||||
if( pxStack != NULL )
|
||||
{
|
||||
|
|
@ -990,7 +997,16 @@ UBaseType_t x;
|
|||
{
|
||||
/* Initialise this task's Newlib reent structure. */
|
||||
_REENT_INIT_PTR( ( &( pxNewTCB->xNewLib_reent ) ) );
|
||||
}
|
||||
|
||||
if (strcmp(pcName, "ppTask") == 0 ||
|
||||
strcmp(pcName, "rtc_timer_task") == 0 ||
|
||||
strcmp(pcName, "Tmr Svc") == 0) {
|
||||
pxNewTCB->xNewLib_reent.malloc_region_mask = MALLOC_MASK_DRAM;
|
||||
} else {
|
||||
pxNewTCB->xNewLib_reent.malloc_region_mask = MALLOC_MASK_PREFER_DRAM;
|
||||
//pxNewTCB->xNewLib_reent.malloc_region_mask = MALLOC_MASK_PREFER_IRAM;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if( INCLUDE_xTaskAbortDelay == 1 )
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue