예제 #1
0
파일: init.c 프로젝트: greenmeent/rtems
static void test_heap_extend(void)
{
  bool ret = false;
  Heap_Control *heap = &TestHeap;
  uint8_t *area_begin = TestHeapMemory;
  uint8_t *sub_area_begin;
  uint8_t *sub_area_end;

  _Heap_Initialize( heap, area_begin + 768, 256, 0 );
  sub_area_begin = (uint8_t *) heap->first_block;
  sub_area_end = (uint8_t *) heap->first_block->prev_size;

  puts( "heap extend - link below" );
  ret = _Protected_heap_Extend( heap, area_begin + 0, 256 );
  test_heap_assert( ret, true );

  puts( "heap extend - merge below overlap" );
  ret = _Protected_heap_Extend( heap, sub_area_begin - 128, 256 );
  test_heap_assert( ret, false );

  puts( "heap extend - merge below" );
  ret = _Protected_heap_Extend( heap, sub_area_begin - 256, 256 );
  test_heap_assert( ret, true );

  puts( "heap extend - merge above overlap" );
  ret = _Protected_heap_Extend( heap, sub_area_end - 128, 256 );
  test_heap_assert( ret, false );

  puts( "heap extend - merge above" );
  ret = _Protected_heap_Extend( heap, sub_area_end, 256 );
  test_heap_assert( ret, true );

  puts( "heap extend - link above" );
  ret = _Protected_heap_Extend( heap, area_begin + 1536, 256 );
  test_heap_assert( ret, true );

  puts( "heap extend - area too small" );
  ret = _Protected_heap_Extend( heap, area_begin + 2048, 0 );
  test_heap_assert( ret, false );

  puts( "heap extend - invalid area" );
  ret = _Protected_heap_Extend( heap, (void *) -1, 2 );
  test_heap_assert( ret, false );

  area_begin = (uint8_t *) (((uintptr_t) area_begin) | 1);

  _Heap_Initialize( heap, area_begin + 768, 256, 0 );

  puts( "heap extend - merge below with align up" );
  ret = _Protected_heap_Extend( heap, area_begin + 512, 256 );
  test_heap_assert( ret, true );
}
예제 #2
0
rtems_status_code rtems_heap_extend(
  void *area_begin,
  uintptr_t area_size
)
{
  bool ok = _Protected_heap_Extend(RTEMS_Malloc_Heap, area_begin, area_size);

  if (ok) {
    return RTEMS_SUCCESSFUL;
  } else {
    return RTEMS_INVALID_ADDRESS;
  }
}
예제 #3
0
파일: init.c 프로젝트: greenmeent/rtems
static void test_heap_extend_allocation_order(void)
{
  Heap_Control *heap = &TestHeap;
  uintptr_t size = 256;
  uintptr_t gap = 256;
  uint8_t *init_area_begin = TestHeapMemory;
  uint8_t *extend_area_begin = init_area_begin + size + gap;
  bool ret;
  uint8_t *p;

  _Heap_Initialize( heap, init_area_begin, size, 0 );

  ret = _Protected_heap_Extend( heap, extend_area_begin, size );
  test_heap_assert( ret, true );

  p = _Heap_Allocate( heap, 1 );
  rtems_test_assert( (uintptr_t) (p - init_area_begin) < size );
}