/* 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. */ /*===========================================================================*/ #if !CH_PORT_SUPPORTS_RT #error "CH_CFG_USE_TM requires CH_PORT_SUPPORTS_RT" #endif /*===========================================================================*/ /* 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. */ /*===========================================================================*/ /*===========================================================================*/ /* External declarations. */ /*===========================================================================*/ #ifdef __cplusplus extern "C" { #endif void _tm_init(void); bool chTMIsCounterWithinX(rtcnt_t cnt, rtcnt_t start, rtcnt_t end); void chTMPolledDelayX(rtcnt_t cycles); void chTMObjectInit(time_measurement_t *tmp); NOINLINE void chTMStartX(time_measurement_t *tmp); NOINLINE void chTMStopX(time_measurement_t *tmp); NOINLINE void chTMChainToX(time_measurement_t *tmp1, time_measurement_t *tmp2); #ifdef __cplusplus } #endif /*===========================================================================*/ /* Module inline functions. */ /*===========================================================================*/ #endif /* CH_CFG_USE_TM */ #endif /* _CHTM_H_ */ /** @} */