[PATCH 13/18] config: Add _Thread_Idle_body

Sebastian Huber sebastian.huber at embedded-brains.de
Fri Feb 14 16:02:38 UTC 2020


Move the idle thread body configuration constant out of the
configuration table.

Provide a default definition of the idle thread body constant.

Update #3875.
---
 cpukit/Makefile.am                          |  1 +
 cpukit/include/rtems/confdefs.h             |  7 +++---
 cpukit/include/rtems/config.h               |  8 +------
 cpukit/include/rtems/score/threadidledata.h | 13 +++++++++++
 cpukit/score/src/threadcreateidle.c         |  3 +--
 cpukit/score/src/threadidledefault.c        | 34 +++++++++++++++++++++++++++++
 6 files changed, 54 insertions(+), 12 deletions(-)
 create mode 100644 cpukit/score/src/threadidledefault.c

diff --git a/cpukit/Makefile.am b/cpukit/Makefile.am
index 13ddeeab51..33cb9e843e 100644
--- a/cpukit/Makefile.am
+++ b/cpukit/Makefile.am
@@ -956,6 +956,7 @@ librtemscpu_a_SOURCES += score/src/threaddispatch.c
 librtemscpu_a_SOURCES += score/src/threadget.c
 librtemscpu_a_SOURCES += score/src/threadhandler.c
 librtemscpu_a_SOURCES += score/src/threadinitialize.c
+librtemscpu_a_SOURCES += score/src/threadidledefault.c
 librtemscpu_a_SOURCES += score/src/threadidlestacksizedefault.c
 librtemscpu_a_SOURCES += score/src/threadloadenv.c
 librtemscpu_a_SOURCES += score/src/threadrestart.c
diff --git a/cpukit/include/rtems/confdefs.h b/cpukit/include/rtems/confdefs.h
index 9e166b39f3..1dfc06e158 100644
--- a/cpukit/include/rtems/confdefs.h
+++ b/cpukit/include/rtems/confdefs.h
@@ -1114,10 +1114,12 @@ extern "C" {
 #ifndef CONFIGURE_IDLE_TASK_BODY
   #if defined(BSP_IDLE_TASK_BODY)
     #define CONFIGURE_IDLE_TASK_BODY BSP_IDLE_TASK_BODY
-  #else
-    #define CONFIGURE_IDLE_TASK_BODY _CPU_Thread_Idle_body
   #endif
 #endif
+
+#if defined(CONFIGURE_INIT) && defined(CONFIGURE_IDLE_TASK_BODY)
+const Thread_Idle_body _Thread_Idle_body = CONFIGURE_IDLE_TASK_BODY;
+#endif
 /**@}*/ /* end of IDLE thread configuration */
 
 /**
@@ -2659,7 +2661,6 @@ struct _reent *__getreent(void)
    */
   const rtems_configuration_table Configuration = {
     CONFIGURE_EXECUTIVE_RAM_SIZE,             /* required RTEMS workspace */
-    CONFIGURE_IDLE_TASK_BODY,                 /* user's IDLE task */
     #ifdef CONFIGURE_UNIFIED_WORK_AREAS       /* true for unified work areas */
       true,
     #else
diff --git a/cpukit/include/rtems/config.h b/cpukit/include/rtems/config.h
index 62804be41c..017b4ed476 100644
--- a/cpukit/include/rtems/config.h
+++ b/cpukit/include/rtems/config.h
@@ -87,12 +87,6 @@ typedef struct {
    */
   uintptr_t                      work_space_size;
 
-  /** 
-   * This element points to the BSP's optional idle task which may override
-   * the default one provided with RTEMS.
-   */
-  void                        *(*idle_task)( uintptr_t );
-
   /**
    * @brief Specifies if a unified work area is used or not.
    *
@@ -155,7 +149,7 @@ uint32_t rtems_configuration_get_maximum_extensions( void );
         (_Watchdog_Ticks_per_timeslice)
 
 #define rtems_configuration_get_idle_task() \
-        (Configuration.idle_task)
+        (_Thread_Idle_entry)
 
 #define rtems_configuration_get_idle_task_stack_size() \
         (_Thread_Idle_stack_size)
diff --git a/cpukit/include/rtems/score/threadidledata.h b/cpukit/include/rtems/score/threadidledata.h
index aa39466f7f..c9dbbe2a0e 100644
--- a/cpukit/include/rtems/score/threadidledata.h
+++ b/cpukit/include/rtems/score/threadidledata.h
@@ -61,6 +61,19 @@ extern "C" {
  */
 extern const size_t _Thread_Idle_stack_size;
 
+/**
+ * @brief The idle thread body type.
+ */
+typedef void *( *Thread_Idle_body )( uintptr_t );
+
+/**
+ * @brief The idle thread body.
+ *
+ * This constant is defined by the application configuration via
+ * <rtems/confdefs.h>.
+ */
+extern const Thread_Idle_body _Thread_Idle_body;
+
 /** @} */
 
 #ifdef __cplusplus
diff --git a/cpukit/score/src/threadcreateidle.c b/cpukit/score/src/threadcreateidle.c
index 66ed92702e..52c3ad4534 100644
--- a/cpukit/score/src/threadcreateidle.c
+++ b/cpukit/score/src/threadcreateidle.c
@@ -25,7 +25,6 @@
 #include <rtems/score/stackimpl.h>
 #include <rtems/score/sysstate.h>
 #include <rtems/score/userextimpl.h>
-#include <rtems/config.h>
 
 #include <string.h>
 
@@ -79,7 +78,7 @@ static void _Thread_Create_idle_for_CPU( Per_CPU_Control *cpu )
 
   idle->is_idle = true;
   idle->Start.Entry.adaptor = _Thread_Entry_adaptor_idle;
-  idle->Start.Entry.Kinds.Idle.entry = rtems_configuration_get_idle_task();
+  idle->Start.Entry.Kinds.Idle.entry = _Thread_Idle_body;
 
   _Thread_Load_environment( idle );
 
diff --git a/cpukit/score/src/threadidledefault.c b/cpukit/score/src/threadidledefault.c
new file mode 100644
index 0000000000..21559656e0
--- /dev/null
+++ b/cpukit/score/src/threadidledefault.c
@@ -0,0 +1,34 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (C) 2020 embedded brains GmbH
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/score/threadidledata.h>
+
+const Thread_Idle_body _Thread_Idle_body = _CPU_Thread_Idle_body;
-- 
2.16.4



More information about the devel mailing list