URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Subversion Repositories or1k
[/] [or1k/] [trunk/] [rtems-20020807/] [cpukit/] [score/] [src/] [heapgetinfo.c] - Rev 1771
Go to most recent revision | Compare with Previous | Blame | View Log
/* * Heap Handler * * COPYRIGHT (c) 1989-2000. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://www.OARcorp.com/rtems/license.html. * */ #include <rtems/system.h> #include <rtems/score/sysstate.h> #include <rtems/score/heap.h> /*PAGE * * _Heap_Get_information * * This kernel routine walks the heap and tots up the free and allocated * sizes. Derived from _Heap_Walk. * * Input parameters: * the_heap - pointer to heap header * * Output parameters: * free_sz - Pointer for free amount return * used_sz - Pointer for used amount return * return 0=success, otherwise heap is corrupt. */ Heap_Get_information_status _Heap_Get_information( Heap_Control *the_heap, Heap_Information_block *the_info ) { Heap_Block *the_block = 0; /* avoid warnings */ Heap_Block *next_block = 0; /* avoid warnings */ int notdone = 1; the_info->free_blocks = 0; the_info->free_size = 0; the_info->used_blocks = 0; the_info->used_size = 0; /* * We don't want to allow walking the heap until we have * transferred control to the user task so we watch the * system state. */ if ( !_System_state_Is_up( _System_state_Get() ) ) return HEAP_GET_INFORMATION_SYSTEM_STATE_ERROR; the_block = the_heap->start; /* * Handle the 1st block */ if ( the_block->back_flag != HEAP_DUMMY_FLAG ) { return HEAP_GET_INFORMATION_BLOCK_ERROR; } while (notdone) { /* * Accumulate size */ if ( _Heap_Is_block_free(the_block) ) { the_info->free_blocks++; the_info->free_size += _Heap_Block_size(the_block); } else { the_info->used_blocks++; the_info->used_size += _Heap_Block_size(the_block); } /* * Handle the last block */ if ( the_block->front_flag != HEAP_DUMMY_FLAG ) { next_block = _Heap_Next_block(the_block); if ( the_block->front_flag != next_block->back_flag ) { return HEAP_GET_INFORMATION_BLOCK_ERROR; } } if ( the_block->front_flag == HEAP_DUMMY_FLAG ) notdone = 0; else the_block = next_block; } /* while(notdone) */ return HEAP_GET_INFORMATION_SUCCESSFUL; }
Go to most recent revision | Compare with Previous | Blame | View Log