From f569bcec23452c190248aab184a125f3a52e2eb8 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Mon, 29 Jul 2013 15:13:52 +0000 Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6040 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/kernel/src/chstats.c | 9 +++++---- os/kernel/src/chsys.c | 46 +++++++++++++++++++++++++++++++++++++++++++++ os/kernel/src/chtm.c | 50 ++++++------------------------------------------- 3 files changed, 57 insertions(+), 48 deletions(-) (limited to 'os/kernel/src') diff --git a/os/kernel/src/chstats.c b/os/kernel/src/chstats.c index 9d69e0023..eb2023c93 100644 --- a/os/kernel/src/chstats.c +++ b/os/kernel/src/chstats.c @@ -67,10 +67,11 @@ kernel_stats_t kernel_stats; */ void _stats_init(void) { - kernel_stats.nirq = 0; - kernel_stats.nctxswc = 0; - chTMObjectInit(&kernel_stats.isr); - chTMObjectInit(&kernel_stats.critical); + kernel_stats.n_irq = 0; + kernel_stats.n_ctxswc = 0; + chTMObjectInit(&kernel_stats.m_isr); + chTMObjectInit(&kernel_stats.m_crit_thd); + chTMObjectInit(&kernel_stats.m_crit_isr); } #endif /* CH_DBG_STATISTICS */ diff --git a/os/kernel/src/chsys.c b/os/kernel/src/chsys.c index 0727532ee..168bd1376 100644 --- a/os/kernel/src/chsys.c +++ b/os/kernel/src/chsys.c @@ -29,6 +29,7 @@ * - Interrupt Handling. * - Power Management. * - Abnormal Termination. + * - Realtime counter. * . * @{ */ @@ -245,4 +246,49 @@ void chSysRestoreLockX(syssts_t sts) { } } + +#if CH_PORT_SUPPORTS_RT || defined(__DOXYGEN__) +/** + * @brief Realtime window test. + * @details This function verifies if the current realtime counter value + * lies within the specified range or not. The test takes care + * of the realtime counter wrapping to zero on overflow. + * @note When start==end then the function returns always true because the + * whole time range is specified. + * @note This function is only available if the port layer supports the + * option @p CH_PORT_SUPPORTS_RT. + * + * @param[in] cnt the counter value to be tested + * @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. + * + * @xclass + */ +bool chSysIsCounterWithinX(rtcnt_t cnt, rtcnt_t start, rtcnt_t end) { + + return end > start ? (cnt >= start) && (cnt < end) : + (cnt >= start) || (cnt < end); +} + +/** + * @brief Polled delay. + * @note The real delay is always few cycles in excess of the specified + * value. + * @note This function is only available if the port layer supports the + * option @p CH_PORT_SUPPORTS_RT. + * + * @param[in] cycles number of cycles + * + * @xclass + */ +void chSysPolledDelayX(rtcnt_t cycles) { + rtcnt_t start = chSysGetRealtimeCounterX(); + rtcnt_t end = start + cycles; + while (chSysIsCounterWithinX(chSysGetRealtimeCounterX(), start, end)) + ; +} +#endif /* CH_PORT_SUPPORTS_RT */ + /** @} */ diff --git a/os/kernel/src/chtm.c b/os/kernel/src/chtm.c index 0ae2dfeda..474177093 100644 --- a/os/kernel/src/chtm.c +++ b/os/kernel/src/chtm.c @@ -83,49 +83,11 @@ void _tm_init(void) { measurements.*/ measurement_offset = 0; chTMObjectInit(&tm); - chTMStartX(&tm); - chTMStopX(&tm); + chTMStartMeasurementX(&tm); + chTMStopMeasurementX(&tm); measurement_offset = tm.last; } -/** - * @brief Realtime window test. - * @details This function verifies if the current realtime counter value - * lies within the specified range or not. The test takes care - * of the realtime counter wrapping to zero on overflow. - * @note When start==end then the function returns always true because the - * whole time range is specified. - * - * @param[in] cnt the counter value to be tested - * @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. - * - * @xclass - */ -bool chTMIsCounterWithinX(rtcnt_t cnt, rtcnt_t start, rtcnt_t end) { - - return end > start ? (cnt >= start) && (cnt < end) : - (cnt >= start) || (cnt < end); -} - -/** - * @brief Polled delay. - * @note The real delay is always few cycles in excess of the specified - * value. - * - * @param[in] cycles number of cycles - * - * @xclass - */ -void chTMPolledDelayX(rtcnt_t cycles) { - rtcnt_t start = chSysGetRealtimeCounterX(); - rtcnt_t end = start + cycles; - while (chTMIsCounterWithinX(chSysGetRealtimeCounterX(), start, end)) - ; -} - /** * @brief Initializes a @p TimeMeasurement object. * @@ -149,7 +111,7 @@ void chTMObjectInit(time_measurement_t *tmp) { * * @xclass */ -NOINLINE void chTMStartX(time_measurement_t *tmp) { +NOINLINE void chTMStartMeasurementX(time_measurement_t *tmp) { tmp->last = chSysGetRealtimeCounterX(); } @@ -162,7 +124,7 @@ NOINLINE void chTMStartX(time_measurement_t *tmp) { * * @xclass */ -NOINLINE void chTMStopX(time_measurement_t *tmp) { +NOINLINE void chTMStopMeasurementX(time_measurement_t *tmp) { tm_stop(tmp, chSysGetRealtimeCounterX()); } @@ -181,8 +143,8 @@ NOINLINE void chTMStopX(time_measurement_t *tmp) { * * @xclass */ -NOINLINE void chTMChainToX(time_measurement_t *tmp1, - time_measurement_t *tmp2) { +NOINLINE void chTMChainMeasurementToX(time_measurement_t *tmp1, + time_measurement_t *tmp2) { /* Starts new measurement.*/ tmp2->last = chSysGetRealtimeCounterX(); -- cgit v1.2.3