117 #define MPU_WRAPPERS_INCLUDED_FROM_API_FILE 122 #undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE 125 #define heapMINIMUM_BLOCK_SIZE ( ( size_t ) ( xHeapStructSize << 1 ) ) 128 #define heapBITS_PER_BYTE ( ( size_t ) 8 ) 152 static const size_t xHeapStructSize = (
sizeof(
BlockLink_t ) + ( (
size_t ) (
portBYTE_ALIGNMENT - 1 ) ) ) & ~( (
size_t ) portBYTE_ALIGNMENT_MASK );
159 static size_t xFreeBytesRemaining = 0U;
160 static size_t xMinimumEverFreeBytesRemaining = 0U;
166 static size_t xBlockAllocatedBit = 0;
172 BlockLink_t *pxBlock, *pxPreviousBlock, *pxNewBlockLink;
173 void *pvReturn =
NULL;
185 if( ( xWantedSize & xBlockAllocatedBit ) == 0 )
189 if( xWantedSize > 0 )
191 xWantedSize += xHeapStructSize;
195 if( ( xWantedSize & portBYTE_ALIGNMENT_MASK ) != 0x00 )
210 if( ( xWantedSize > 0 ) && ( xWantedSize <= xFreeBytesRemaining ) )
214 pxPreviousBlock = &xStart;
218 pxPreviousBlock = pxBlock;
224 if( pxBlock != pxEnd )
228 pvReturn = (
void * ) ( ( ( uint8_t * ) pxPreviousBlock->
pxNextFreeBlock ) + xHeapStructSize );
242 pxNewBlockLink = (
void * ) ( ( ( uint8_t * ) pxBlock ) + xWantedSize );
259 if( xFreeBytesRemaining < xMinimumEverFreeBytesRemaining )
261 xMinimumEverFreeBytesRemaining = xFreeBytesRemaining;
292 #if( configUSE_MALLOC_FAILED_HOOK == 1 ) 294 if( pvReturn ==
NULL )
296 extern void vApplicationMallocFailedHook(
void );
297 vApplicationMallocFailedHook();
312 uint8_t *puc = ( uint8_t * ) pv;
319 puc -= xHeapStructSize;
322 pxLink = (
void * ) puc;
328 if( ( pxLink->
xBlockSize & xBlockAllocatedBit ) != 0 )
360 return xFreeBytesRemaining;
366 return xMinimumEverFreeBytesRemaining;
384 puc = ( uint8_t * ) pxIterator;
385 if( ( puc + pxIterator->
xBlockSize ) == ( uint8_t * ) pxBlockToInsert )
388 pxBlockToInsert = pxIterator;
397 puc = ( uint8_t * ) pxBlockToInsert;
420 if( pxIterator != pxBlockToInsert )
435 size_t xTotalRegionSize, xTotalHeapSize = 0;
443 pxHeapRegion = &( pxHeapRegions[ xDefinedRegions ] );
451 if( ( xAddress & portBYTE_ALIGNMENT_MASK ) != 0 )
454 xAddress &= ~portBYTE_ALIGNMENT_MASK;
457 xTotalRegionSize -= xAddress - ( size_t ) pxHeapRegion->
pucStartAddress;
460 xAlignedHeap = xAddress;
463 if( xDefinedRegions == 0 )
482 pxPreviousFreeBlock = pxEnd;
486 xAddress = xAlignedHeap + xTotalRegionSize;
487 xAddress -= xHeapStructSize;
488 xAddress &= ~portBYTE_ALIGNMENT_MASK;
496 pxFirstFreeBlockInRegion = (
BlockLink_t * ) xAlignedHeap;
497 pxFirstFreeBlockInRegion->
xBlockSize = xAddress - ( size_t ) pxFirstFreeBlockInRegion;
502 if( pxPreviousFreeBlock !=
NULL )
507 xTotalHeapSize += pxFirstFreeBlockInRegion->
xBlockSize;
511 pxHeapRegion = &( pxHeapRegions[ xDefinedRegions ] );
514 xMinimumEverFreeBytesRemaining = xTotalHeapSize;
515 xFreeBytesRemaining = xTotalHeapSize;
521 xBlockAllocatedBit = ( ( size_t ) 1 ) << ( (
sizeof( size_t ) *
heapBITS_PER_BYTE ) - 1 );
struct A_BLOCK_LINK * pxNextFreeBlock
uint8_t * pucStartAddress
#define mtCOVERAGE_TEST_MARKER()
void vTaskSuspendAll(void) PRIVILEGED_FUNCTION
size_t xPortGetFreeHeapSize(void)
void * pvPortMalloc(size_t xWantedSize)
#define prvInsertBlockIntoFreeList(pxBlockToInsert)
#define traceFREE(pvAddress, uiSize)
void vPortDefineHeapRegions(const HeapRegion_t *const pxHeapRegions)
size_t xPortGetMinimumEverFreeHeapSize(void)
BaseType_t xTaskResumeAll(void) PRIVILEGED_FUNCTION
#define heapBITS_PER_BYTE
#define portBYTE_ALIGNMENT
#define traceMALLOC(pvAddress, uiSize)
#define heapMINIMUM_BLOCK_SIZE
struct A_BLOCK_LINK BlockLink_t