realsil wrote on Monday, April 13, 2015:
I find headSTRUCT_SIZE is defined as a const variable, but my compiler always optimizate it.
I have check the disassemble file os heap_5.o, and I found the code “puc -= heapSTRUCT_SIZE;” is translated into “SUBS r4,r4,#8” automatically.
Is there any difference between “define heapSTRUCT_SIZE as a const variable” and “define heapSTRUCT_SIZE as a macro”?
static const uint16_t heapSTRUCT_SIZE = ( ( sizeof ( BlockLink_t ) + ( portBYTE_ALIGNMENT - 1 ) ) & ~portBYTE_ALIGNMENT_MASK );
void vPortFree( void *pv , RAM_TYPE ramType)
{
uint8_t *puc = ( uint8_t * ) pv;
BlockLink_t *pxLink;
if( pv != NULL )
{
/* The memory being freed will have an BlockLink_t structure immediately
before it. */
puc -= heapSTRUCT_SIZE;
/* This casting is to keep the compiler from issuing warnings. */
pxLink = ( void * ) puc;
/* ignore some lines */
}
vPortFree PROC
PUSH {r4-r6,lr}
MOV r5,r1
MOV r4,r0
CMP r0,#0
BEQ |L1.720|
SUBS r4,r4,#8