PR 1924/cpukit
	* spstkalloc02/.cvsignore, spstkalloc02/Makefile.am,
	spstkalloc02/init.c, spstkalloc02/spstkalloc02.doc,
	spstkalloc02/spstkalloc02.scn: New files.
	* Makefile.am, configure.ac: Reflect changes above.
This commit is contained in:
Sebastian Huber
2011-12-14 13:18:01 +00:00
parent 9fa3cf0db8
commit 46231e1330
8 changed files with 225 additions and 1 deletions
+8
View File
@@ -1,3 +1,11 @@
2011-12-14 Sebastian Huber <sebastian.huber@embedded-brains.de>
PR 1924/cpukit
* spstkalloc02/.cvsignore, spstkalloc02/Makefile.am,
spstkalloc02/init.c, spstkalloc02/spstkalloc02.doc,
spstkalloc02/spstkalloc02.scn: New files.
* Makefile.am, configure.ac: Reflect changes above.
2011-12-13 Ralf Corsépius <ralf.corsepius@rtems.org>
* sp31/task1.c: Make Do_nothing static.
+1 -1
View File
@@ -17,7 +17,7 @@ SUBDIRS = \
sp70 sp71 sp72 sp73 sp74 sp75 sp76 sp2038 \
spassoc01 spchain spclockget spcoverage spobjgetnext \
spnotepad01 spprintk spprivenv01 sprbtree01 spsize spstkalloc \
spthreadq01 spwatchdog spwkspace \
spstkalloc02 spthreadq01 spwatchdog spwkspace \
sperror01 sperror02 sperror03 \
spfatal01 spfatal02 spfatal03 spfatal04 spfatal05 spfatal06 spfatal07 \
spfatal08 spfatal09 spfatal10 spfatal11 spfatal12 spfatal13 spfatal14 \
+1
View File
@@ -180,6 +180,7 @@ spsimplesched02/Makefile
spsimplesched03/Makefile
spsize/Makefile
spstkalloc/Makefile
spstkalloc02/Makefile
spthreadq01/Makefile
spwatchdog/Makefile
spwkspace/Makefile
@@ -0,0 +1,2 @@
Makefile
Makefile.in
@@ -0,0 +1,26 @@
##
## $Id$
##
rtems_tests_PROGRAMS = spstkalloc02
spstkalloc02_SOURCES = init.c
dist_rtems_tests_DATA = spstkalloc02.scn
dist_rtems_tests_DATA += spstkalloc02.doc
include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
include $(top_srcdir)/../automake/compile.am
include $(top_srcdir)/../automake/leaf.am
AM_CPPFLAGS += -I$(top_srcdir)/../support/include
LINK_OBJS = $(spstkalloc02_OBJECTS)
LINK_LIBS = $(spstkalloc02_LDLIBS)
spstkalloc02$(EXEEXT): $(spstkalloc02_OBJECTS) $(spstkalloc02_DEPENDENCIES)
@rm -f spstkalloc02$(EXEEXT)
$(make-exe)
include $(top_srcdir)/../automake/local.am
+162
View File
@@ -0,0 +1,162 @@
/**
* @file
*
* @ingroup sptests
*
* @brief Test that the task stack allocator works.
*/
/*
* Copyright (c) 2011 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Obere Lagerstr. 30
* 82178 Puchheim
* Germany
* <rtems@embedded-brains.de>
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*
* $Id$
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <tmacros.h>
#include <stdio.h>
#include <inttypes.h>
#include <rtems/score/heap.h>
#define TASK_COUNT 5
#define PAGE_SIZE 1024
static Heap_Control task_stack_heap;
static void task_stack_init(size_t stack_space_size);
static void *task_stack_allocate(size_t stack_size);
static void task_stack_free(void *addr);
static void print_info(void)
{
Heap_Information_block info;
_Heap_Get_information(&task_stack_heap, &info);
printf(
"used blocks = %" PRIu32 ", "
"largest used block = %" PRIu32 ", "
"used space = %" PRIu32 "\n"
"free blocks = %" PRIu32 ", "
"largest free block = %" PRIu32 ", "
"free space = %" PRIu32 "\n",
info.Used.number,
info.Used.largest,
info.Used.total,
info.Free.number,
info.Free.largest,
info.Free.total
);
}
static rtems_task Init(rtems_task_argument argument)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_name name = rtems_build_name('S', 'T', 'K', 'A');
rtems_id id = RTEMS_ID_NONE;
int i = 0;
puts("\n\n*** POSIX TEST STKALLOC 02 ***");
print_info();
for (i = 2; i < TASK_COUNT; ++i) {
sc = rtems_task_create(
name,
RTEMS_MINIMUM_PRIORITY,
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES,
&id
);
directive_failed(sc, "rtems_task_create");
}
sc = rtems_task_create(
name,
RTEMS_MINIMUM_PRIORITY,
2 * RTEMS_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES,
&id
);
fatal_directive_status(sc, RTEMS_UNSATISFIED, "rtems_task_create");
sc = rtems_task_create(
name,
RTEMS_MINIMUM_PRIORITY,
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES,
&id
);
directive_failed(sc, "rtems_task_create");
print_info();
puts("*** END OF POSIX TEST STKALLOC 02 ***");
rtems_test_exit(0);
}
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_MAXIMUM_TASKS TASK_COUNT
#define CONFIGURE_TASK_STACK_ALLOCATOR_INIT task_stack_init
#define CONFIGURE_TASK_STACK_ALLOCATOR task_stack_allocate
#define CONFIGURE_TASK_STACK_DEALLOCATOR task_stack_free
#define CONFIGURE_TASK_STACK_ALLOCATOR_AVOIDS_WORK_SPACE
#define CONFIGURE_TASK_STACK_FROM_ALLOCATOR(stack_size) \
((stack_size) + HEAP_BLOCK_HEADER_SIZE + PAGE_SIZE - 1)
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_INIT
#include <rtems/confdefs.h>
static char task_stack_space
[CONFIGURE_TASK_STACK_FROM_ALLOCATOR(CONFIGURE_STACK_SPACE_SIZE)];
static void task_stack_init(size_t stack_space_size)
{
bool ok = _Heap_Initialize(
&task_stack_heap,
task_stack_space,
sizeof(task_stack_space),
PAGE_SIZE
);
rtems_test_assert(stack_space_size == CONFIGURE_STACK_SPACE_SIZE);
rtems_test_assert(ok);
}
static void *task_stack_allocate(size_t stack_size)
{
return _Heap_Allocate(&task_stack_heap, stack_size);
}
static void task_stack_free(void *addr)
{
_Heap_Free(&task_stack_heap, addr);
}
@@ -0,0 +1,19 @@
#
# $Id$
#
# Copyright (c) 2011 embedded brains GmbH.
#
# The license and distribution terms for this file may be
# found in the file LICENSE in this distribution or at
# http://www.rtems.com/license/LICENSE.
#
This file describes the directives and concepts tested by this test set.
test set name: spstkalloc01
directives:
concepts:
+ Ensure that the task stack allocator works.
@@ -0,0 +1,6 @@
*** POSIX TEST STKALLOC 02 ***
used blocks = 2, largest used block = 5120, used space = 10240
free blocks = 1, largest free block = 20480, free space = 20480
used blocks = 6, largest used block = 5120, used space = 30720
free blocks = 0, largest free block = 0, free space = 0
*** END OF POSIX TEST STKALLOC 02 ***