summaryrefslogtreecommitdiffstats
path: root/testsuites/sptests
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2020-04-09 12:12:13 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2020-09-17 17:42:25 +0200
commit6942e5f99171d1cb38c2c573aba8cb9212d7efd8 (patch)
treef49a2afc076013602f4d437784391415cb6ed6a6 /testsuites/sptests
parentCONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE (diff)
downloadrtems-6942e5f99171d1cb38c2c573aba8cb9212d7efd8.tar.bz2
rtems: Add rtems_task_construct()
In contrast to rtems_task_create() this function constructs a task with a user-provided task storage area. The new directive uses a configuration structure instead of individual parameters. Add RTEMS_TASK_STORAGE_SIZE() to calculate the recommended size of a task storage area based on the task attributes and the size dedicated to the task stack and thread-local storage. This macro may allow future extensions without breaking the API. Add application configuration option CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE to adjust RTEMS Workspace size estimate. Update #3959.
Diffstat (limited to 'testsuites/sptests')
-rw-r--r--testsuites/sptests/sp01/init.c24
-rw-r--r--testsuites/sptests/sp01/sp01.doc1
-rw-r--r--testsuites/sptests/sp01/system.h3
3 files changed, 18 insertions, 10 deletions
diff --git a/testsuites/sptests/sp01/init.c b/testsuites/sptests/sp01/init.c
index 2719c84fc8..e0072a615c 100644
--- a/testsuites/sptests/sp01/init.c
+++ b/testsuites/sptests/sp01/init.c
@@ -16,6 +16,19 @@
const char rtems_test_name[] = "SP 1";
+RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char Task_1_storage[
+ RTEMS_TASK_STORAGE_SIZE( 2 * RTEMS_MINIMUM_STACK_SIZE, RTEMS_FLOATING_POINT )
+];
+
+static const rtems_task_config Task_1_config = {
+ .name = rtems_build_name( 'T', 'A', '1', ' ' ),
+ .initial_priority = 1,
+ .storage_area = Task_1_storage,
+ .storage_size = sizeof( Task_1_storage ),
+ .initial_modes = RTEMS_DEFAULT_MODES,
+ .attributes = RTEMS_FLOATING_POINT
+};
+
rtems_task Init(
rtems_task_argument argument
)
@@ -30,15 +43,8 @@ rtems_task Init(
status = rtems_clock_set( &time );
directive_failed( status, "rtems_clock_set" );
- status = rtems_task_create(
- rtems_build_name( 'T', 'A', '1', ' ' ),
- 1,
- RTEMS_MINIMUM_STACK_SIZE * 2,
- RTEMS_DEFAULT_MODES,
- RTEMS_DEFAULT_ATTRIBUTES,
- &id
- );
- directive_failed( status, "rtems_task_create of TA1" );
+ status = rtems_task_construct( &Task_1_config, &id );
+ directive_failed( status, "rtems_task_construct of TA1" );
status = rtems_task_start( id, Task_1_through_3, 1 );
directive_failed( status, "rtems_task_start of TA1" );
diff --git a/testsuites/sptests/sp01/sp01.doc b/testsuites/sptests/sp01/sp01.doc
index d7d9f5d902..43c8ee0116 100644
--- a/testsuites/sptests/sp01/sp01.doc
+++ b/testsuites/sptests/sp01/sp01.doc
@@ -9,6 +9,7 @@
test name: sp01
directives:
+ rtems_task_construct
rtems_task_create
rtems_task_start
rtems_task_wake_after
diff --git a/testsuites/sptests/sp01/system.h b/testsuites/sptests/sp01/system.h
index bde5328aa9..d7990aeca8 100644
--- a/testsuites/sptests/sp01/system.h
+++ b/testsuites/sptests/sp01/system.h
@@ -28,8 +28,9 @@ rtems_task Task_1_through_3(
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-#define CONFIGURE_EXTRA_TASK_STACKS (4 * RTEMS_MINIMUM_STACK_SIZE)
+#define CONFIGURE_EXTRA_TASK_STACKS (3 * RTEMS_MINIMUM_STACK_SIZE)
#define CONFIGURE_MAXIMUM_TASKS 4
+#define CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE 1
#include <rtems/confdefs.h>