summaryrefslogtreecommitdiffstats
path: root/cpukit/include/rtems/confdefs
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 /cpukit/include/rtems/confdefs
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 'cpukit/include/rtems/confdefs')
-rw-r--r--cpukit/include/rtems/confdefs/threads.h8
-rw-r--r--cpukit/include/rtems/confdefs/wkspace.h4
2 files changed, 11 insertions, 1 deletions
diff --git a/cpukit/include/rtems/confdefs/threads.h b/cpukit/include/rtems/confdefs/threads.h
index 9e34696e61..8f72407695 100644
--- a/cpukit/include/rtems/confdefs/threads.h
+++ b/cpukit/include/rtems/confdefs/threads.h
@@ -60,6 +60,14 @@
#define _CONFIGURE_TASKS ( CONFIGURE_MAXIMUM_TASKS + _CONFIGURE_LIBBLOCK_TASKS )
+#ifndef CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE
+ #define CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE 0
+#endif
+
+#if CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE > CONFIGURE_MAXIMUM_TASKS
+ #error "CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE shall be less than or equal to CONFIGURE_MAXIMUM_TASKS"
+#endif
+
#ifndef CONFIGURE_MAXIMUM_POSIX_THREADS
#define CONFIGURE_MAXIMUM_POSIX_THREADS 0
#endif
diff --git a/cpukit/include/rtems/confdefs/wkspace.h b/cpukit/include/rtems/confdefs/wkspace.h
index de476dbf82..3b464899dc 100644
--- a/cpukit/include/rtems/confdefs/wkspace.h
+++ b/cpukit/include/rtems/confdefs/wkspace.h
@@ -100,7 +100,9 @@
+ _CONFIGURE_POSIX_INIT_THREAD_STACK_EXTRA \
+ _CONFIGURE_LIBBLOCK_TASKS_STACK_EXTRA \
+ CONFIGURE_EXTRA_TASK_STACKS \
- + rtems_resource_maximum_per_allocation( _CONFIGURE_TASKS ) \
+ + rtems_resource_maximum_per_allocation( \
+ _CONFIGURE_TASKS - CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE \
+ ) \
* _Configure_From_stackspace( CONFIGURE_MINIMUM_TASK_STACK_SIZE ) \
+ rtems_resource_maximum_per_allocation( CONFIGURE_MAXIMUM_POSIX_THREADS ) \
* _Configure_From_stackspace( CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE ) \