[rtems commit] config: Add _Thread_Idle_body

Sebastian Huber sebh at rtems.org
Tue Feb 25 11:32:18 UTC 2020


Module:    rtems
Branch:    master
Commit:    5180762ccb480e72c0dac5eb3c8c27a2ad62a240
Changeset: http://git.rtems.org/rtems/commit/?id=5180762ccb480e72c0dac5eb3c8c27a2ad62a240

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Fri Feb 14 13:36:30 2020 +0100

config: Add _Thread_Idle_body

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        | 35 +++++++++++++++++++++++++++++
 6 files changed, 55 insertions(+), 12 deletions(-)

diff --git a/cpukit/Makefile.am b/cpukit/Makefile.am
index 1adcbb3..42e16d7 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/threadloadenv.c
 librtemscpu_a_SOURCES += score/src/threadrestart.c
 librtemscpu_a_SOURCES += score/src/threadsetstate.c
diff --git a/cpukit/include/rtems/confdefs.h b/cpukit/include/rtems/confdefs.h
index 442ee7a..ae1dca1 100644
--- a/cpukit/include/rtems/confdefs.h
+++ b/cpukit/include/rtems/confdefs.h
@@ -1092,10 +1092,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 */
 
 /**
@@ -2636,7 +2638,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 62804be..017b4ed 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 0011776..79ac020 100644
--- a/cpukit/include/rtems/score/threadidledata.h
+++ b/cpukit/include/rtems/score/threadidledata.h
@@ -56,6 +56,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 66ed927..52c3ad4 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 0000000..6babe25
--- /dev/null
+++ b/cpukit/score/src/threadidledefault.c
@@ -0,0 +1,35 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ *
+ * 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>
+#include <rtems/score/cpu.h>
+
+const Thread_Idle_body _Thread_Idle_body = _CPU_Thread_Idle_body;



More information about the vc mailing list