From 1ae1099ef072fd5fa5d1fde1e73c8c1df8d8d2f4 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Mon, 29 Jul 2013 13:36:19 +0000 Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6038 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/kernel/include/ch.h | 2 +- os/kernel/include/chrt.h | 171 -------------------------------------------- os/kernel/include/chstats.h | 105 +++++++++++++++++++++++++++ os/kernel/include/chtm.h | 171 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 277 insertions(+), 172 deletions(-) delete mode 100644 os/kernel/include/chrt.h create mode 100644 os/kernel/include/chstats.h create mode 100644 os/kernel/include/chtm.h (limited to 'os/kernel/include') diff --git a/os/kernel/include/ch.h b/os/kernel/include/ch.h index efade76bf..e30ddd515 100644 --- a/os/kernel/include/ch.h +++ b/os/kernel/include/ch.h @@ -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" diff --git a/os/kernel/include/chrt.h b/os/kernel/include/chrt.h deleted file mode 100644 index caf27747e..000000000 --- a/os/kernel/include/chrt.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - 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 . -*/ - -/** - * @file chrt.h - * @brief Real Time Counter and Measurement module macros and structures. - * - * @addtogroup realtime_counter - * @{ - */ - -#ifndef _CHRT_H_ -#define _CHRT_H_ - -#if CH_CFG_USE_RT || defined(__DOXYGEN__) - -#define port_rt_get_counter_value() 0 - -/*===========================================================================*/ -/* Module constants. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Module pre-compile time settings. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Module data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Type of a Time Measurement object. - * @note The maximum measurable time period depends on the implementation - * of the realtime counter and its clock frequency. - * @note The measurement is not 100% cycle-accurate, it can be in excess - * of few cycles depending on the compiler and target architecture. - * @note Interrupts can affect measurement if the measurement is performed - * with interrupts enabled. - */ -typedef struct { - rtcnt_t best; /**< @brief Best measurement. */ - rtcnt_t worst; /**< @brief Worst measurement. */ - rtcnt_t cumulative; /**< @brief Cumulative measurement. */ - rtcnt_t last; /**< @brief Last measurement. */ -} time_measurement_t; - -/*===========================================================================*/ -/* Module macros. */ -/*===========================================================================*/ - -/** - * @name Time conversion utilities for the realtime counter - * @{ - */ -/** - * @brief Seconds to realtime counter. - * @details Converts from seconds to realtime counter cycles. - * @note The result is rounded upward to the next tick boundary. - * - * @param[in] sec number of seconds - * @return The number of cycles. - * - * @api - */ -#define S2RTV(freq, sec) ((freq) * (sec)) - -/** - * @brief Milliseconds to realtime counter. - * @details Converts from milliseconds to realtime counter cycles. - * @note The result is rounded upward to the next tick boundary. - * - * @param[in] msec number of milliseconds - * @return The number of cycles. - * - * @api - */ -#define MS2RTC(freq, msec) (rtcnt_t)((((freq) + 999UL) / 1000UL) * (msec)) - -/** - * @brief Microseconds to realtime counter. - * @details Converts from microseconds to realtime counter cycles. - * @note The result is rounded upward to the next tick boundary. - * - * @param[in] usec number of microseconds - * @return The number of cycles. - * - * @api - */ -#define US2RTC(freq, usec) (rtcnt_t)((((freq) + 999999UL) / 1000000UL) * (usec)) - -/** - * @brief Realtime counter cycles to seconds. - * @details Converts from realtime counter cycles number to seconds. - * - * @param[in] n number of cycles - * @return The number of seconds. - * - * @api - */ -#define RTC2S(freq, n) (rtcnt_t)((n) / (freq)) - -/** - * @brief Realtime counter cycles to milliseconds. - * @details Converts from realtime counter cycles number to milliseconds. - * - * @param[in] n number of cycles - * @return The number of milliseconds. - * - * @api - */ -#define RTC2MS(freq, n) ((n) / ((freq) / 1000UL)) - -/** - * @brief Realtime counter cycles to microseconds. - * @details Converts from realtime counter cycles number to microseconds. - * - * @param[in] n number of cycles - * @return The number of microseconds. - * - * @api - */ -#define RTC2US(freq, n) ((n) / ((freq) / 1000000UL)) -/** @} */ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void _rt_init(void); - bool chRTIsCounterWithin(rtcnt_t start, rtcnt_t end); - void chRTPolledDelay(rtcnt_t cycles); - void chRTTimeMeasurementObjectInit(time_measurement_t *tmp); - NOINLINE void chRTTimeMeasurementStartX(time_measurement_t *tmp); - NOINLINE void chRTTimeMeasurementStopX(time_measurement_t *tmp); -#ifdef __cplusplus -} -#endif - -/*===========================================================================*/ -/* Module inline functions. */ -/*===========================================================================*/ - -#endif /* CH_CFG_USE_RT */ - -#endif /* _CHRT_H_ */ - -/** @} */ diff --git a/os/kernel/include/chstats.h b/os/kernel/include/chstats.h new file mode 100644 index 000000000..a94a84814 --- /dev/null +++ b/os/kernel/include/chstats.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 . +*/ + +/** + * @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_ */ + +/** @} */ diff --git a/os/kernel/include/chtm.h b/os/kernel/include/chtm.h new file mode 100644 index 000000000..a7500a26b --- /dev/null +++ b/os/kernel/include/chtm.h @@ -0,0 +1,171 @@ +/* + 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 . +*/ + +/** + * @file chtm.h + * @brief Time Measurement module macros and structures. + * + * @addtogroup time_measurement + * @{ + */ + +#ifndef _CHTM_H_ +#define _CHTM_H_ + +#if CH_CFG_USE_TM || defined(__DOXYGEN__) + +#define port_rt_get_counter_value() 0 + +/*===========================================================================*/ +/* Module constants. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Module pre-compile time settings. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Derived constants and error checks. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Module data structures and types. */ +/*===========================================================================*/ + +/** + * @brief Type of a Time Measurement object. + * @note The maximum measurable time period depends on the implementation + * of the realtime counter and its clock frequency. + * @note The measurement is not 100% cycle-accurate, it can be in excess + * of few cycles depending on the compiler and target architecture. + * @note Interrupts can affect measurement if the measurement is performed + * with interrupts enabled. + */ +typedef struct { + rtcnt_t best; /**< @brief Best measurement. */ + rtcnt_t worst; /**< @brief Worst measurement. */ + rtcnt_t cumulative; /**< @brief Cumulative measurement. */ + rtcnt_t last; /**< @brief Last measurement. */ +} time_measurement_t; + +/*===========================================================================*/ +/* Module macros. */ +/*===========================================================================*/ + +/** + * @name Time conversion utilities for the realtime counter + * @{ + */ +/** + * @brief Seconds to realtime counter. + * @details Converts from seconds to realtime counter cycles. + * @note The result is rounded upward to the next tick boundary. + * + * @param[in] sec number of seconds + * @return The number of cycles. + * + * @api + */ +#define S2RTV(freq, sec) ((freq) * (sec)) + +/** + * @brief Milliseconds to realtime counter. + * @details Converts from milliseconds to realtime counter cycles. + * @note The result is rounded upward to the next tick boundary. + * + * @param[in] msec number of milliseconds + * @return The number of cycles. + * + * @api + */ +#define MS2RTC(freq, msec) (rtcnt_t)((((freq) + 999UL) / 1000UL) * (msec)) + +/** + * @brief Microseconds to realtime counter. + * @details Converts from microseconds to realtime counter cycles. + * @note The result is rounded upward to the next tick boundary. + * + * @param[in] usec number of microseconds + * @return The number of cycles. + * + * @api + */ +#define US2RTC(freq, usec) (rtcnt_t)((((freq) + 999999UL) / 1000000UL) * (usec)) + +/** + * @brief Realtime counter cycles to seconds. + * @details Converts from realtime counter cycles number to seconds. + * + * @param[in] n number of cycles + * @return The number of seconds. + * + * @api + */ +#define RTC2S(freq, n) (rtcnt_t)((n) / (freq)) + +/** + * @brief Realtime counter cycles to milliseconds. + * @details Converts from realtime counter cycles number to milliseconds. + * + * @param[in] n number of cycles + * @return The number of milliseconds. + * + * @api + */ +#define RTC2MS(freq, n) ((n) / ((freq) / 1000UL)) + +/** + * @brief Realtime counter cycles to microseconds. + * @details Converts from realtime counter cycles number to microseconds. + * + * @param[in] n number of cycles + * @return The number of microseconds. + * + * @api + */ +#define RTC2US(freq, n) ((n) / ((freq) / 1000000UL)) +/** @} */ + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif + void _rt_init(void); + bool chRTIsCounterWithin(rtcnt_t start, rtcnt_t end); + void chRTPolledDelay(rtcnt_t cycles); + void chRTTimeMeasurementObjectInit(time_measurement_t *tmp); + NOINLINE void chRTTimeMeasurementStartX(time_measurement_t *tmp); + NOINLINE void chRTTimeMeasurementStopX(time_measurement_t *tmp); +#ifdef __cplusplus +} +#endif + +/*===========================================================================*/ +/* Module inline functions. */ +/*===========================================================================*/ + +#endif /* CH_CFG_USE_TM */ + +#endif /* _CHTM_H_ */ + +/** @} */ -- cgit v1.2.3