summaryrefslogtreecommitdiffstats
path: root/cpukit/score/src/threadcreateidle.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2019-12-09 13:57:51 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2020-02-12 09:08:36 +0100
commita08dcb2f7c7c883559e10c389404a4dc751376fa (patch)
tree6cea52738a5a38cc7a2fc3260e88fe2a9a37e287 /cpukit/score/src/threadcreateidle.c
parentscore: Split stack allocator configuration (diff)
downloadrtems-a08dcb2f7c7c883559e10c389404a4dc751376fa.tar.bz2
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.
Diffstat (limited to 'cpukit/score/src/threadcreateidle.c')
-rw-r--r--cpukit/score/src/threadcreateidle.c37
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 );
}