aboutsummaryrefslogtreecommitdiffstats
path: root/os/kernel/src
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2013-07-29 15:13:52 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2013-07-29 15:13:52 +0000
commitf569bcec23452c190248aab184a125f3a52e2eb8 (patch)
treeee7b4be89b879597c2d82a49616d963696fbf78c /os/kernel/src
parentca4b2f91b7a24abeb6ea7fa43c1816397fb966c4 (diff)
downloadChibiOS-f569bcec23452c190248aab184a125f3a52e2eb8.tar.gz
ChibiOS-f569bcec23452c190248aab184a125f3a52e2eb8.tar.bz2
ChibiOS-f569bcec23452c190248aab184a125f3a52e2eb8.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6040 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/kernel/src')
-rw-r--r--os/kernel/src/chstats.c9
-rw-r--r--os/kernel/src/chsys.c46
-rw-r--r--os/kernel/src/chtm.c50
3 files changed, 57 insertions, 48 deletions
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,50 +83,12 @@ 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.
*
* @param[out] tmp pointer to a @p TimeMeasurement structure
@@ -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();