From a08dcb2f7c7c883559e10c389404a4dc751376fa Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Mon, 9 Dec 2019 13:57:51 +0100 Subject: score: Add Thread_Configuration Add the Thread_Configuration structure to reduce the parameter count of _Thread_Initialize(). This makes it easier to add more parameters in the future. It simplifies the code generation since most architectures do not have that many registers available for function parameters. Update #3835. --- cpukit/score/src/threadcreateidle.c | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) (limited to 'cpukit/score/src/threadcreateidle.c') 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 #include +#include + 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 ); } -- cgit v1.2.3