diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2020-04-09 12:12:13 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2020-09-17 17:42:25 +0200 |
commit | 6942e5f99171d1cb38c2c573aba8cb9212d7efd8 (patch) | |
tree | f49a2afc076013602f4d437784391415cb6ed6a6 /testsuites/sptests/sp01/init.c | |
parent | CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE (diff) | |
download | rtems-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/sp01/init.c')
-rw-r--r-- | testsuites/sptests/sp01/init.c | 24 |
1 files changed, 15 insertions, 9 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" ); |