From 05df0a846f436295a490cc9ac19e5a4061c3a575 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Mon, 17 May 1999 20:41:13 +0000 Subject: Thread Handler split into multiple files. Eventually, as RTEMS is split into one function per file, this will decrease the size of executables. --- cpukit/score/src/threadcreateidle.c | 97 +++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 cpukit/score/src/threadcreateidle.c (limited to 'cpukit/score/src/threadcreateidle.c') diff --git a/cpukit/score/src/threadcreateidle.c b/cpukit/score/src/threadcreateidle.c new file mode 100644 index 0000000000..825b29838e --- /dev/null +++ b/cpukit/score/src/threadcreateidle.c @@ -0,0 +1,97 @@ +/* + * Thread Handler + * + * + * COPYRIGHT (c) 1989-1998. + * On-Line Applications Research Corporation (OAR). + * Copyright assigned to U.S. Government, 1994. + * + * The license and distribution terms for this file may be + * found in found in the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/*PAGE + * + * _Thread_Create_idle + */ + +char *_Thread_Idle_name = "IDLE"; + +void _Thread_Create_idle( void ) +{ + void *idle; + unsigned32 idle_task_stack_size; + + /* + * The entire workspace is zeroed during its initialization. Thus, all + * fields not explicitly assigned were explicitly zeroed by + * _Workspace_Initialization. + */ + + _Thread_Idle = _Thread_Internal_allocate(); + + /* + * Initialize the IDLE task. + */ + +#if (CPU_PROVIDES_IDLE_THREAD_BODY == TRUE) + idle = (void *) _CPU_Thread_Idle_body; +#else + idle = (void *) _Thread_Idle_body; +#endif + + if ( _CPU_Table.idle_task ) + idle = _CPU_Table.idle_task; + + idle_task_stack_size = _CPU_Table.idle_task_stack_size; + if ( idle_task_stack_size < STACK_MINIMUM_SIZE ) + idle_task_stack_size = STACK_MINIMUM_SIZE; + + _Thread_Initialize( + &_Thread_Internal_information, + _Thread_Idle, + NULL, /* allocate the stack */ + idle_task_stack_size, + CPU_IDLE_TASK_IS_FP, + PRIORITY_MAXIMUM, + TRUE, /* preemptable */ + THREAD_CPU_BUDGET_ALGORITHM_NONE, + NULL, /* no budget algorithm callout */ + 0, /* all interrupts enabled */ + _Thread_Idle_name + ); + + /* + * WARNING!!! This is necessary to "kick" start the system and + * MUST be done before _Thread_Start is invoked. + */ + + _Thread_Heir = + _Thread_Executing = _Thread_Idle; + + _Thread_Start( + _Thread_Idle, + THREAD_START_NUMERIC, + idle, + NULL, + 0 + ); + +} -- cgit v1.2.3