diff options
Diffstat (limited to 'cpukit/score/src/threadcreateidle.c')
-rw-r--r-- | cpukit/score/src/threadcreateidle.c | 37 |
1 files changed, 17 insertions, 20 deletions
diff --git a/cpukit/score/src/threadcreateidle.c b/cpukit/score/src/threadcreateidle.c index 3e6f19ee69..e7243ae09c 100644 --- a/cpukit/score/src/threadcreateidle.c +++ b/cpukit/score/src/threadcreateidle.c @@ -25,21 +25,31 @@ #include <rtems/score/userextimpl.h> #include <rtems/config.h> +#include <string.h> + static void _Thread_Create_idle_for_CPU( Per_CPU_Control *cpu ) { - Objects_Name name; + Thread_Configuration config; Thread_Control *idle; - const Scheduler_Control *scheduler; - scheduler = _Scheduler_Get_by_CPU( cpu ); + memset( &config, 0, sizeof( config ) ); + config.scheduler = _Scheduler_Get_by_CPU( cpu ); #if defined(RTEMS_SMP) - if (scheduler == NULL) { + if ( config.scheduler == NULL ) { return; } #endif - name.name_u32 = _Objects_Build_name( 'I', 'D', 'L', 'E' ); + config.stack_size = rtems_configuration_get_idle_task_stack_size(); + config.priority = _Scheduler_Map_priority( + config.scheduler, + config.scheduler->maximum_priority + ); + config.budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_NONE; + config.name.name_u32 = _Objects_Build_name( 'I', 'D', 'L', 'E' ); + config.is_fp = CPU_IDLE_TASK_IS_FP; + config.is_preemptible = true; /* * The entire workspace is zeroed during its initialization. Thus, all @@ -49,20 +59,7 @@ static void _Thread_Create_idle_for_CPU( Per_CPU_Control *cpu ) idle = _Thread_Internal_allocate(); _Assert( idle != NULL ); - _Thread_Initialize( - &_Thread_Information, - idle, - scheduler, - NULL, /* allocate the stack */ - rtems_configuration_get_idle_task_stack_size(), - CPU_IDLE_TASK_IS_FP, - _Scheduler_Map_priority( scheduler, scheduler->maximum_priority ), - true, /* preemptable */ - THREAD_CPU_BUDGET_ALGORITHM_NONE, - NULL, /* no budget algorithm callout */ - 0, /* all interrupts enabled */ - name - ); + _Thread_Initialize( &_Thread_Information, idle, &config ); /* * WARNING!!! This is necessary to "kick" start the system and @@ -78,7 +75,7 @@ static void _Thread_Create_idle_for_CPU( Per_CPU_Control *cpu ) _Thread_Load_environment( idle ); idle->current_state = STATES_READY; - _Scheduler_Start_idle( scheduler, idle, cpu ); + _Scheduler_Start_idle( config.scheduler, idle, cpu ); _User_extensions_Thread_start( idle ); } |