git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6038 35acf78f-673a-0410-8e92-d51de3d6d3f4
parent
61f841306a
commit
1ae1099ef0
|
@ -128,13 +128,14 @@
|
|||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Realtime counter APIs.
|
||||
* @details If enabled then the RT APIs are included in the kernel.
|
||||
* @brief Time Measurement APIs.
|
||||
* @details If enabled then the time measurement APIs are included in
|
||||
* the kernel.
|
||||
*
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#if !defined(CH_CFG_USE_RT) || defined(__DOXYGEN__)
|
||||
#define CH_CFG_USE_RT TRUE
|
||||
#if !defined(CH_CFG_USE_TM) || defined(__DOXYGEN__)
|
||||
#define CH_CFG_USE_TM TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
|
|
@ -108,7 +108,7 @@ typedef struct thread thread_t;
|
|||
#include "chconf.h"
|
||||
#include "chtypes.h"
|
||||
#include "chdebug.h"
|
||||
#include "chrt.h"
|
||||
#include "chtm.h"
|
||||
#include "chstats.h"
|
||||
#include "chcore.h"
|
||||
#include "chsys.h"
|
||||
|
|
|
@ -0,0 +1,105 @@
|
|||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file chstats.h
|
||||
* @brief Statistics module macros and structures.
|
||||
*
|
||||
* @addtogroup statistics
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _CHSTATS_H_
|
||||
#define _CHSTATS_H_
|
||||
|
||||
#if CH_DBG_STATISTICS || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module constants. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module pre-compile time settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Derived constants and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module data structures and types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Type of a kernel statistics structure.
|
||||
*/
|
||||
typedef struct {
|
||||
ucnt_t nirq; /**< @brief IRQ number.
|
||||
@note Fast Interrupts are not
|
||||
accounted for. */
|
||||
ucnt_t nctxswc; /**< @brief Context switch number. */
|
||||
time_measurement_t critical; /**< @brief Critical zones measurement. */
|
||||
time_measurement_t isr; /**< @brief ISR measurement. */
|
||||
} kernel_stats_t;
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module macros. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Increases the IRQ counter.
|
||||
*/
|
||||
#define _stats_increase_irq() kernel_stats.nirq++
|
||||
|
||||
/**
|
||||
* @brief Increases the context switch counter.
|
||||
*/
|
||||
#define _stats_increase_ctxswc() kernel_stats.nctxswc++
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
extern kernel_stats_t kernel_stats;
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module inline functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#else /* !CH_DBG_STATISTICS */
|
||||
|
||||
/* Stub functions for when the statistics module is disabled. */
|
||||
#define _stats_increase_irq()
|
||||
#define _stats_increase_ctxswc()
|
||||
|
||||
#endif /* !CH_DBG_STATISTICS */
|
||||
|
||||
#endif /* _CHSTATS_H_ */
|
||||
|
||||
/** @} */
|
|
@ -19,17 +19,17 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file chrt.h
|
||||
* @brief Real Time Counter and Measurement module macros and structures.
|
||||
* @file chtm.h
|
||||
* @brief Time Measurement module macros and structures.
|
||||
*
|
||||
* @addtogroup realtime_counter
|
||||
* @addtogroup time_measurement
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _CHRT_H_
|
||||
#define _CHRT_H_
|
||||
#ifndef _CHTM_H_
|
||||
#define _CHTM_H_
|
||||
|
||||
#if CH_CFG_USE_RT || defined(__DOXYGEN__)
|
||||
#if CH_CFG_USE_TM || defined(__DOXYGEN__)
|
||||
|
||||
#define port_rt_get_counter_value() 0
|
||||
|
||||
|
@ -164,8 +164,8 @@ extern "C" {
|
|||
/* Module inline functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#endif /* CH_CFG_USE_RT */
|
||||
#endif /* CH_CFG_USE_TM */
|
||||
|
||||
#endif /* _CHRT_H_ */
|
||||
#endif /* _CHTM_H_ */
|
||||
|
||||
/** @} */
|
|
@ -4,7 +4,7 @@ KERNSRC = ${CHIBIOS}/os/kernel/src/chsys.c \
|
|||
${CHIBIOS}/os/kernel/src/chdebug.c \
|
||||
${CHIBIOS}/os/kernel/src/chlists.c \
|
||||
${CHIBIOS}/os/kernel/src/chvt.c \
|
||||
${CHIBIOS}/os/kernel/src/chrt.c \
|
||||
${CHIBIOS}/os/kernel/src/chtm.c \
|
||||
${CHIBIOS}/os/kernel/src/chstats.c \
|
||||
${CHIBIOS}/os/kernel/src/chschd.c \
|
||||
${CHIBIOS}/os/kernel/src/chthreads.c \
|
||||
|
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file chstats.c
|
||||
* @brief Real Time Counter and Measurement module code.
|
||||
*
|
||||
* @addtogroup realtime_counter
|
||||
* @details Statistics services.
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
|
||||
#if CH_DBG_STATISTICS || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module local definitions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module exported variables. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Global kernel statistics.
|
||||
*/
|
||||
kernel_stats_t kernel_stats;
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module local types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module local variables. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module local functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module exported functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#endif /* CH_DBG_STATISTICS */
|
||||
|
||||
/** @} */
|
|
@ -19,28 +19,17 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file chvt.c
|
||||
* @brief Real Time Counter and Measurement module code.
|
||||
* @file chtm.c
|
||||
* @brief Time Measurement module code.
|
||||
*
|
||||
* @addtogroup realtime_counter
|
||||
* @details Realtime Counter APIs and services.
|
||||
*
|
||||
* <h2>Operation mode</h2>
|
||||
* The realtime counter is a fast HW counter that counts upward at
|
||||
* regular intervals. This counted can be used for small and accurate
|
||||
* delays, time stamp and time measurement.
|
||||
*
|
||||
* <h2>Notes</h2>
|
||||
* On those architectures where such a counter is not implemented
|
||||
* the system time counter is used instead. Of course the system
|
||||
* time counter usually has a much lower resolution than a real
|
||||
* HW counter.
|
||||
* @addtogroup time_measurement
|
||||
* @details Time Measurement APIs and services.
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
|
||||
#if CH_CFG_USE_RT || defined(__DOXYGEN__)
|
||||
#if CH_CFG_USE_TM || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module local definitions. */
|
||||
|
@ -102,10 +91,10 @@ void _rt_init(void) {
|
|||
* Example of a guarded loop using the realtime counter. The loop implements
|
||||
* a timeout after one second.
|
||||
* @code
|
||||
* rtcnt_t start = chRTGetCounterValue();
|
||||
* rtcnt_t start = chSysGetRealtimeCounterX();
|
||||
* rtcnt_t timeout = start + S2RTC(RTCCLK, 1);
|
||||
* while (my_condition) {
|
||||
* if (!chRTIsCounterWithin(start, timeout)
|
||||
* if (!chTMIsCounterWithin(start, timeout)
|
||||
* return TIMEOUT;
|
||||
* // Do something.
|
||||
* }
|
||||
|
@ -115,9 +104,9 @@ void _rt_init(void) {
|
|||
* @par Example 2
|
||||
* Example of a loop that lasts exactly 50 microseconds.
|
||||
* @code
|
||||
* rtcnt_t start = chRTGetCounterValue();
|
||||
* rtcnt_t start = chSysGetRealtimeCounterX();
|
||||
* rtcnt_t timeout = start + US2RTC(RTCCLK, 50);
|
||||
* while (chRTIsCounterWithin(start, timeout)) {
|
||||
* while (chTMIsCounterWithin(start, timeout)) {
|
||||
* // Do something.
|
||||
* }
|
||||
* // Continue.
|
||||
|
@ -130,7 +119,7 @@ void _rt_init(void) {
|
|||
*
|
||||
* @special
|
||||
*/
|
||||
bool chRTIsCounterWithin(rtcnt_t start, rtcnt_t end) {
|
||||
bool chTMIsCounterWithin(rtcnt_t start, rtcnt_t end) {
|
||||
rtcnt_t now = chSysGetRealtimeCounterX();
|
||||
|
||||
return end > start ? (now >= start) && (now < end) :
|
||||
|
@ -147,7 +136,7 @@ bool chRTIsCounterWithin(rtcnt_t start, rtcnt_t end) {
|
|||
*
|
||||
* @special
|
||||
*/
|
||||
void chRTPolledDelay(rtcnt_t cycles) {
|
||||
void chTMPolledDelay(rtcnt_t cycles) {
|
||||
rtcnt_t start = chSysGetRealtimeCounterX();
|
||||
rtcnt_t end = start + cycles;
|
||||
while (chRTIsCounterWithin(start, end))
|
||||
|
@ -161,7 +150,7 @@ void chRTPolledDelay(rtcnt_t cycles) {
|
|||
*
|
||||
* @init
|
||||
*/
|
||||
void chRTTimeMeasurementObjectInit(time_measurement_t *tmp) {
|
||||
void chTMObjectInit(time_measurement_t *tmp) {
|
||||
|
||||
tmp->best = (rtcnt_t)-1;
|
||||
tmp->worst = (rtcnt_t)0;
|
||||
|
@ -178,7 +167,7 @@ void chRTTimeMeasurementObjectInit(time_measurement_t *tmp) {
|
|||
*
|
||||
* @special
|
||||
*/
|
||||
NOINLINE void chRTTimeMeasurementStartX(time_measurement_t *tmp) {
|
||||
NOINLINE void chTMStartX(time_measurement_t *tmp) {
|
||||
|
||||
tmp->last = chSysGetRealtimeCounterX();
|
||||
}
|
||||
|
@ -192,7 +181,7 @@ NOINLINE void chRTTimeMeasurementStartX(time_measurement_t *tmp) {
|
|||
*
|
||||
* @special
|
||||
*/
|
||||
NOINLINE void chRTTimeMeasurementStopX(time_measurement_t *tmp) {
|
||||
NOINLINE void chTMStopX(time_measurement_t *tmp) {
|
||||
|
||||
rtcnt_t now = chSysGetRealtimeCounterX();
|
||||
tmp->last = now - tmp->last - measurement_offset;
|
||||
|
@ -203,6 +192,6 @@ NOINLINE void chRTTimeMeasurementStopX(time_measurement_t *tmp) {
|
|||
tmp->best = tmp->last;
|
||||
}
|
||||
|
||||
#endif /* CH_CFG_USE_RT */
|
||||
#endif /* CH_CFG_USE_TM */
|
||||
|
||||
/** @} */
|
Loading…
Reference in New Issue