summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAllan Stephens <allan.stephens@windriver.com>2016-10-26 10:16:51 -0500
committerAllan Stephens <allan.stephens@windriver.com>2016-10-27 08:14:51 -0500
commit6cfe1322f8a5a27373cfd68c479d1284971a5cd3 (patch)
tree150163c775ae6f724b21b0e4177f1d369e314f4a /include
parent7c5bffa669ccc6b9a85eb8a82a08344feb470917 (diff)
unified: Streamline thread initialization macros
The _THREAD_INITIALIZER() macro is now used in all cases where a static thread is defined. It accepts the arguments used by k_thread_spawn(), as well as the legacy abort function and task group arguments. The two remaining legacy macros required to support static threads now appear in legacy.h. Change-Id: I7ba24c285beee63d63c8da0e0fa120f35c0d9526 Signed-off-by: Allan Stephens <allan.stephens@windriver.com>
Diffstat (limited to 'include')
-rw-r--r--include/kernel.h86
-rw-r--r--include/legacy.h16
2 files changed, 32 insertions, 70 deletions
diff --git a/include/kernel.h b/include/kernel.h
index ae5f429a3..9df7ad1ac 100644
--- a/include/kernel.h
+++ b/include/kernel.h
@@ -164,87 +164,39 @@ struct _static_thread_data {
uint32_t init_groups;
};
-/*
- * Common macro used by both K_THREAD_INITIALIZER()
- * and _MDEF_THREAD_INITIALIZER().
- */
#define _THREAD_INITIALIZER(stack, stack_size, \
entry, p1, p2, p3, \
- abort, prio) \
- .init_prio = (prio), \
+ prio, options, delay, abort, groups) \
+ { \
+ .init_stack = (stack), \
+ .init_stack_size = (stack_size), \
.init_entry = (void (*)(void *, void *, void *))entry, \
.init_p1 = (void *)p1, \
.init_p2 = (void *)p2, \
.init_p3 = (void *)p3, \
- .init_abort = abort, \
- .init_stack = (stack), \
- .init_stack_size = (stack_size),
-
-/**
- * @brief Thread initializer macro
- *
- * This macro is to only be used with statically defined threads that were not
- * defined in the MDEF file. As such the associated threads can not belong to
- * any thread group.
- */
-#define K_THREAD_INITIALIZER(stack, stack_size, \
- entry, p1, p2, p3, \
- abort, prio, delay) \
- { \
- _THREAD_INITIALIZER(stack, stack_size, \
- entry, p1, p2, p3, \
- abort, prio) \
- .init_groups = 0, \
- .init_delay = (delay), \
- }
-
-/**
- * @brief Thread initializer macro
- *
- * This macro is to only be used with statically defined threads that were
- * defined with legacy APIs (including the MDEF file). As such the associated
- * threads may belong to one or more thread groups.
- */
-#define _MDEF_THREAD_INITIALIZER(stack, stack_size, \
- entry, p1, p2, p3, \
- abort, prio, groups) \
- { \
- _THREAD_INITIALIZER(stack, stack_size, \
- entry, p1, p2, p3, \
- abort, prio) \
- .init_groups = (groups), \
- .init_delay = K_FOREVER, \
+ .init_prio = (prio), \
+ .init_options = (options), \
+ .init_delay = (delay), \
+ .init_abort = (abort), \
+ .init_groups = (groups), \
}
/**
- * @brief Define thread initializer and initialize it.
+ * @brief Define a static thread.
*
* @internal It has been observed that the x86 compiler by default aligns
* these _static_thread_data structures to 32-byte boundaries, thereby
* wasting space. To work around this, force a 4-byte alignment.
*/
-#define K_THREAD_DEFINE(name, stack_size, \
- entry, p1, p2, p3, \
- prio, options, delay) \
- char __noinit __stack _k_thread_obj_##name[stack_size]; \
- struct _static_thread_data _k_thread_data_##name __aligned(4) \
- __in_section(_k_task_list, private, task) = \
- K_THREAD_INITIALIZER(_k_thread_obj_##name, stack_size, \
- entry, p1, p2, p3, abort, prio, delay)
-
-/**
- * @brief Define thread initializer for MDEF defined thread and initialize it.
- *
- * @ref K_THREAD_DEFINE
- */
-#define _MDEF_THREAD_DEFINE(name, stack_size, \
- entry, p1, p2, p3, \
- abort, prio, groups) \
- char __noinit __stack _k_thread_obj_##name[stack_size]; \
- struct _static_thread_data _k_thread_data_##name __aligned(4) \
- __in_section(_k_task_list, private, task) = \
- _MDEF_THREAD_INITIALIZER(_k_thread_obj_##name, stack_size, \
- entry, p1, p2, p3, abort, prio, groups)
+#define K_THREAD_DEFINE(name, stack_size, \
+ entry, p1, p2, p3, \
+ prio, options, delay) \
+ char __noinit __stack _k_thread_obj_##name[stack_size]; \
+ struct _static_thread_data _k_thread_data_##name __aligned(4) \
+ __in_section(_k_task_list, private, task) = \
+ _THREAD_INITIALIZER(_k_thread_obj_##name, stack_size, \
+ entry, p1, p2, p3, prio, options, delay, \
+ NULL, 0)
extern int k_thread_priority_get(k_tid_t thread);
extern void k_thread_priority_set(k_tid_t thread, int prio);
diff --git a/include/legacy.h b/include/legacy.h
index 6884ce3eb..571bce4d0 100644
--- a/include/legacy.h
+++ b/include/legacy.h
@@ -79,14 +79,24 @@ static inline int _error_to_rc_no_timeout(int err)
typedef void (*nano_fiber_entry_t)(int i1, int i2);
typedef int nano_context_type_t;
+#define _MDEF_THREAD_DEFINE(name, stack_size, \
+ entry, p1, p2, p3, \
+ abort, prio, groups) \
+ char __noinit __stack _k_thread_obj_##name[stack_size]; \
+ struct _static_thread_data _k_thread_data_##name __aligned(4) \
+ __in_section(_k_task_list, private, task) = \
+ _THREAD_INITIALIZER(_k_thread_obj_##name, stack_size, \
+ entry, p1, p2, p3, prio, 0, K_FOREVER, \
+ abort, groups)
+
#define DEFINE_TASK(name, prio, entry, stack_size, groups) \
extern void entry(void); \
char __noinit __stack _k_thread_obj_##name[stack_size]; \
struct _static_thread_data _k_thread_data_##name __aligned(4) \
__in_section(_k_task_list, private, task) = \
- _MDEF_THREAD_INITIALIZER(_k_thread_obj_##name, stack_size, \
- entry, NULL, NULL, NULL, \
- NULL, prio, (uint32_t)(groups)); \
+ _THREAD_INITIALIZER(_k_thread_obj_##name, stack_size, \
+ entry, NULL, NULL, NULL, prio, 0, K_FOREVER, \
+ NULL, (uint32_t)(groups)); \
k_tid_t const name = (k_tid_t)_k_thread_obj_##name
#define sys_thread_self_get k_current_get