From 6e9303ee9cf662dc26a9aa0b6f3a8e2d0af6695b Mon Sep 17 00:00:00 2001 From: gdisirio Date: Wed, 30 Oct 2013 13:14:36 +0000 Subject: Improved time range check in the kernel. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@6401 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/kernel/include/chvt.h | 27 ++++++++++++++++++++++++++- os/kernel/src/chvt.c | 20 -------------------- 2 files changed, 26 insertions(+), 21 deletions(-) (limited to 'os') diff --git a/os/kernel/include/chvt.h b/os/kernel/include/chvt.h index c677689af..c1b246cd3 100644 --- a/os/kernel/include/chvt.h +++ b/os/kernel/include/chvt.h @@ -207,6 +207,32 @@ typedef struct { * @api */ #define chTimeNow() (vtlist.vt_systime) + +/** + * @brief Returns the elapsed time since the specified start time. + * + * @param[in] start start time + * @return The elapsed time. + * + * @api + */ +#define chTimeElapsedSince(start) (chTimeNow() - (start)) + +/** + * @brief Checks if the current system time is within the specified time + * window. + * @note When start==end then the function returns always true because the + * whole time range is specified. + * + * @param[in] start the start of the time window (inclusive) + * @param[in] end the end of the time window (non inclusive) + * @retval TRUE current time within the specified time window. + * @retval FALSE current time not within the specified time window. + * + * @api + */ +#define chTimeIsWithin(start, end) \ + (chTimeElapsedSince(start) < ((end) - (start))) /** @} */ extern VTList vtlist; @@ -220,7 +246,6 @@ extern "C" { void _vt_init(void); void chVTSetI(VirtualTimer *vtp, systime_t time, vtfunc_t vtfunc, void *par); void chVTResetI(VirtualTimer *vtp); - bool_t chTimeIsWithin(systime_t start, systime_t end); #ifdef __cplusplus } #endif diff --git a/os/kernel/src/chvt.c b/os/kernel/src/chvt.c index a8e3ce499..f2d6cd697 100644 --- a/os/kernel/src/chvt.c +++ b/os/kernel/src/chvt.c @@ -111,24 +111,4 @@ void chVTResetI(VirtualTimer *vtp) { vtp->vt_func = (vtfunc_t)NULL; } -/** - * @brief Checks if the current system time is within the specified time - * window. - * @note When start==end then the function returns always true because the - * whole time range is specified. - * - * @param[in] start the start of the time window (inclusive) - * @param[in] end the end of the time window (non inclusive) - * @retval TRUE current time within the specified time window. - * @retval FALSE current time not within the specified time window. - * - * @api - */ -bool_t chTimeIsWithin(systime_t start, systime_t end) { - - systime_t time = chTimeNow(); - return end > start ? (time >= start) && (time < end) : - (time >= start) || (time < end); -} - /** @} */ -- cgit v1.2.3