rtems: Move internal structures to ratemondata.h

Update #3598.
This commit is contained in:
Sebastian Huber
2018-11-07 14:12:52 +01:00
parent 93fae332a9
commit 78bbe5940b
6 changed files with 144 additions and 111 deletions

View File

@@ -251,6 +251,7 @@ include_rtems_rtems_HEADERS += include/rtems/rtems/part.h
include_rtems_rtems_HEADERS += include/rtems/rtems/partimpl.h include_rtems_rtems_HEADERS += include/rtems/rtems/partimpl.h
include_rtems_rtems_HEADERS += include/rtems/rtems/partmp.h include_rtems_rtems_HEADERS += include/rtems/rtems/partmp.h
include_rtems_rtems_HEADERS += include/rtems/rtems/ratemon.h include_rtems_rtems_HEADERS += include/rtems/rtems/ratemon.h
include_rtems_rtems_HEADERS += include/rtems/rtems/ratemondata.h
include_rtems_rtems_HEADERS += include/rtems/rtems/ratemonimpl.h include_rtems_rtems_HEADERS += include/rtems/rtems/ratemonimpl.h
include_rtems_rtems_HEADERS += include/rtems/rtems/region.h include_rtems_rtems_HEADERS += include/rtems/rtems/region.h
include_rtems_rtems_HEADERS += include/rtems/rtems/regionimpl.h include_rtems_rtems_HEADERS += include/rtems/rtems/regionimpl.h

View File

@@ -32,6 +32,7 @@
#include <rtems/score/percpu.h> #include <rtems/score/percpu.h>
#include <rtems/score/userextimpl.h> #include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h> #include <rtems/score/wkspace.h>
#include <rtems/rtems/ratemondata.h>
#include <rtems/posix/key.h> #include <rtems/posix/key.h>
#include <rtems/posix/mqueue.h> #include <rtems/posix/mqueue.h>
#include <rtems/posix/pthread.h> #include <rtems/posix/pthread.h>

View File

@@ -35,7 +35,6 @@
#include <rtems/rtems/types.h> #include <rtems/rtems/types.h>
#include <rtems/rtems/status.h> #include <rtems/rtems/status.h>
#include <rtems/score/thread.h>
#include <rtems/score/watchdog.h> #include <rtems/score/watchdog.h>
struct rtems_printer; struct rtems_printer;
@@ -60,20 +59,8 @@ extern "C" {
*/ */
/**@{*/ /**@{*/
/**
* This is the public type used for the rate monotonic timing
* statistics.
*/
#include <rtems/score/timespec.h>
typedef struct timespec rtems_rate_monotonic_period_time_t RTEMS_DEPRECATED; typedef struct timespec rtems_rate_monotonic_period_time_t RTEMS_DEPRECATED;
/**
* This is the internal type used for the rate monotonic timing
* statistics.
*/
#include <rtems/score/timestamp.h>
/** /**
* The following enumerated type defines the states in which a * The following enumerated type defines the states in which a
* period may be. * period may be.
@@ -134,31 +121,6 @@ typedef struct {
struct timespec total_wall_time; struct timespec total_wall_time;
} rtems_rate_monotonic_period_statistics; } rtems_rate_monotonic_period_statistics;
/**
* The following defines the INTERNAL data structure that has the
* statistics kept on each period instance.
*/
typedef struct {
/** This field contains the number of periods executed. */
uint32_t count;
/** This field contains the number of periods missed. */
uint32_t missed_count;
/** This field contains the least amount of CPU time used in a period. */
Timestamp_Control min_cpu_time;
/** This field contains the highest amount of CPU time used in a period. */
Timestamp_Control max_cpu_time;
/** This field contains the total amount of wall time used in a period. */
Timestamp_Control total_cpu_time;
/** This field contains the least amount of wall time used in a period. */
Timestamp_Control min_wall_time;
/** This field contains the highest amount of wall time used in a period. */
Timestamp_Control max_wall_time;
/** This field contains the total amount of CPU time used in a period. */
Timestamp_Control total_wall_time;
} Rate_monotonic_Statistics;
/** /**
* The following defines the period status structure. * The following defines the period status structure.
*/ */
@@ -187,78 +149,6 @@ typedef struct {
uint32_t postponed_jobs_count; uint32_t postponed_jobs_count;
} rtems_rate_monotonic_period_status; } rtems_rate_monotonic_period_status;
/**
* @brief The following structure defines the control block used to manage each
* period.
*
* State changes are protected by the default thread lock of the owner thread.
* The owner thread is the thread that created the period object. The owner
* thread field is immutable after object creation.
*/
typedef struct {
/** This field is the object management portion of a Period instance. */
Objects_Control Object;
/**
* @brief Protects the rate monotonic period state.
*/
ISR_LOCK_MEMBER( Lock )
/** This is the timer used to provide the unblocking mechanism. */
Watchdog_Control Timer;
/** This field indicates the current state of the period. */
rtems_rate_monotonic_period_states state;
/**
* @brief A priority node for use by the scheduler job release and cancel
* operations.
*/
Priority_Node Priority;
/**
* This field contains the length of the next period to be
* executed.
*/
uint32_t next_length;
/**
* This field contains a pointer to the TCB for the thread
* which owns and uses this period instance.
*/
Thread_Control *owner;
/**
* This field contains the cpu usage value of the owning thread when
* the period was initiated. It is used to compute the period's
* statistics.
*/
Timestamp_Control cpu_usage_period_initiated;
/**
* This field contains the wall time value when the period
* was initiated. It is used to compute the period's statistics.
*/
Timestamp_Control time_period_initiated;
/**
* This field contains the statistics maintained for the period.
*/
Rate_monotonic_Statistics Statistics;
/**
* This field contains the number of postponed jobs.
* When the watchdog timeout, this variable will be increased immediately.
*/
uint32_t postponed_jobs;
/**
* This field contains the tick of the latest deadline decided by the period
* watchdog.
*/
uint64_t latest_deadline;
} Rate_monotonic_Control;
/** /**
* @brief Create a Period * @brief Create a Period
* *

View File

@@ -0,0 +1,140 @@
/**
* @file
*
* @ingroup ClassicRateMonImpl
*
* @brief Classic Rate Monotonic Scheduler Data Structures
*/
/* COPYRIGHT (c) 1989-2009, 2016.
* On-Line Applications Research Corporation (OAR).
* COPYRIGHT (c) 2016-2017 Kuan-Hsun Chen.
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.org/license/LICENSE.
*/
#ifndef _RTEMS_RTEMS_RATEMONDATA_H
#define _RTEMS_RTEMS_RATEMONDATA_H
#include <rtems/rtems/ratemon.h>
#include <rtems/score/timestamp.h>
#include <rtems/score/thread.h>
#include <rtems/score/watchdog.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* @addtogroup ClassicRateMonImpl
*
* @{
*/
/**
* The following defines the INTERNAL data structure that has the
* statistics kept on each period instance.
*/
typedef struct {
/** This field contains the number of periods executed. */
uint32_t count;
/** This field contains the number of periods missed. */
uint32_t missed_count;
/** This field contains the least amount of CPU time used in a period. */
Timestamp_Control min_cpu_time;
/** This field contains the highest amount of CPU time used in a period. */
Timestamp_Control max_cpu_time;
/** This field contains the total amount of wall time used in a period. */
Timestamp_Control total_cpu_time;
/** This field contains the least amount of wall time used in a period. */
Timestamp_Control min_wall_time;
/** This field contains the highest amount of wall time used in a period. */
Timestamp_Control max_wall_time;
/** This field contains the total amount of CPU time used in a period. */
Timestamp_Control total_wall_time;
} Rate_monotonic_Statistics;
/**
* @brief The following structure defines the control block used to manage each
* period.
*
* State changes are protected by the default thread lock of the owner thread.
* The owner thread is the thread that created the period object. The owner
* thread field is immutable after object creation.
*/
typedef struct {
/** This field is the object management portion of a Period instance. */
Objects_Control Object;
/**
* @brief Protects the rate monotonic period state.
*/
ISR_LOCK_MEMBER( Lock )
/** This is the timer used to provide the unblocking mechanism. */
Watchdog_Control Timer;
/** This field indicates the current state of the period. */
rtems_rate_monotonic_period_states state;
/**
* @brief A priority node for use by the scheduler job release and cancel
* operations.
*/
Priority_Node Priority;
/**
* This field contains the length of the next period to be
* executed.
*/
uint32_t next_length;
/**
* This field contains a pointer to the TCB for the thread
* which owns and uses this period instance.
*/
Thread_Control *owner;
/**
* This field contains the cpu usage value of the owning thread when
* the period was initiated. It is used to compute the period's
* statistics.
*/
Timestamp_Control cpu_usage_period_initiated;
/**
* This field contains the wall time value when the period
* was initiated. It is used to compute the period's statistics.
*/
Timestamp_Control time_period_initiated;
/**
* This field contains the statistics maintained for the period.
*/
Rate_monotonic_Statistics Statistics;
/**
* This field contains the number of postponed jobs.
* When the watchdog timeout, this variable will be increased immediately.
*/
uint32_t postponed_jobs;
/**
* This field contains the tick of the latest deadline decided by the period
* watchdog.
*/
uint64_t latest_deadline;
} Rate_monotonic_Control;
/** @} */
#ifdef __cplusplus
}
#endif
#endif
/* end of include file */

View File

@@ -19,7 +19,7 @@
#ifndef _RTEMS_RTEMS_RATEMONIMPL_H #ifndef _RTEMS_RTEMS_RATEMONIMPL_H
#define _RTEMS_RTEMS_RATEMONIMPL_H #define _RTEMS_RTEMS_RATEMONIMPL_H
#include <rtems/rtems/ratemon.h> #include <rtems/rtems/ratemondata.h>
#include <rtems/score/objectimpl.h> #include <rtems/score/objectimpl.h>
#include <rtems/score/schedulerimpl.h> #include <rtems/score/schedulerimpl.h>
#include <rtems/score/threadimpl.h> #include <rtems/score/threadimpl.h>

View File

@@ -22,6 +22,7 @@
* RTEMS basic type definitions * RTEMS basic type definitions
*/ */
#include <sys/_timespec.h>
#include <stdint.h> #include <stdint.h>
#include <rtems/score/heap.h> #include <rtems/score/heap.h>
#include <rtems/score/object.h> #include <rtems/score/object.h>