diff options
author | Allan Stephens <allan.stephens@windriver.com> | 2016-10-26 10:16:51 -0500 |
---|---|---|
committer | Allan Stephens <allan.stephens@windriver.com> | 2016-10-27 08:14:51 -0500 |
commit | 6cfe1322f8a5a27373cfd68c479d1284971a5cd3 (patch) | |
tree | 150163c775ae6f724b21b0e4177f1d369e314f4a /include | |
parent | 7c5bffa669ccc6b9a85eb8a82a08344feb470917 (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.h | 86 | ||||
-rw-r--r-- | include/legacy.h | 16 |
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 |