unified: Add legacy DEFINE_TASK support

Allows unified kernel to support legacy microkernel applications
that use private tasks.

Also renames the unified kernel macro for defining a thread
to be consistent with the naming used for defining other kernel
objects.

Change-Id: I667d87056138c45c291dd848344e4051bf9fd1ff
Signed-off-by: Allan Stephens <allan.stephens@windriver.com>
This commit is contained in:
Allan Stephens 2016-10-05 13:35:38 -05:00
commit ea6cfd1d83
3 changed files with 13 additions and 10 deletions

View file

@ -177,7 +177,7 @@ struct _static_thread_data {
{ \
.init_groups = (groups), \
.init_prio = (prio), \
.init_entry = entry, \
.init_entry = (void (*)(void *, void *, void *))entry, \
.init_p1 = (void *)p1, \
.init_p2 = (void *)p2, \
.init_p3 = (void *)p3, \
@ -194,22 +194,15 @@ struct _static_thread_data {
* this 32-bit alignment in specified here.
* _static_thread_data structure sise needs to be kept 32-bit aligned as well
*/
#define K_THREAD_OBJ_DEFINE(name, stack_size, \
#define K_THREAD_DEFINE(name, stack_size, \
entry, p1, p2, p3, \
abort, prio, groups) \
extern void entry(void *, void *, 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) = \
K_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, \
abort, prio, groups) \
K_THREAD_OBJ_DEFINE(name, stack_size, entry, p1, p2, p3, \
abort, prio, groups); \
k_tid_t const name = (k_tid_t)_k_thread_obj_##name
/* extern int k_thread_prio_get(k_tid_t thread); in sched.h */
extern void k_thread_priority_set(k_tid_t thread, int prio);

View file

@ -79,6 +79,16 @@ 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 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) = \
K_THREAD_INITIALIZER(_k_thread_obj_##name, stack_size, \
entry, NULL, NULL, NULL, \
NULL, prio, (uint32_t)(groups)); \
k_tid_t const name = (k_tid_t)_k_thread_obj_##name
#define sys_thread_self_get k_current_get
#define sys_thread_busy_wait k_busy_wait

View file

@ -448,7 +448,7 @@ def kernel_main_c_tasks_unified():
kernel_main_c_out("EXTERN_C void %s(void);\n" % abort)
kernel_main_c_out(
"K_THREAD_OBJ_DEFINE(%s, %u, %s, %s, %s, %s, %s, %d, 0x%x);\n" %
"K_THREAD_DEFINE(%s, %u, %s, %s, %s, %s, %s, %d, 0x%x);\n" %
(name, int(stack_size), entry,
params[0], params[1], params[2],
abort, int(prio), int(groups)))