[rtems commit] sptests/spcpucounter01: Resurrect workaround

Sebastian Huber sebh at rtems.org
Tue Jun 21 13:55:04 UTC 2016


Module:    rtems
Branch:    master
Commit:    7222a65f0e2992b9f8dd556d9a72c79a2421fe3a
Changeset: http://git.rtems.org/rtems/commit/?id=7222a65f0e2992b9f8dd556d9a72c79a2421fe3a

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Tue Jun 21 09:45:39 2016 +0200

sptests/spcpucounter01: Resurrect workaround

Resurrect workaround accidentially removed by
3e2a3c49480b9888362d016dd202edd562d9e069.

---

 testsuites/sptests/spcpucounter01/init.c | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/testsuites/sptests/spcpucounter01/init.c b/testsuites/sptests/spcpucounter01/init.c
index 3fe12b0..92f2e15 100644
--- a/testsuites/sptests/spcpucounter01/init.c
+++ b/testsuites/sptests/spcpucounter01/init.c
@@ -158,6 +158,25 @@ static void report_overhead(
   );
 }
 
+static uint64_t large_delta_to_ns(rtems_counter_ticks d)
+{
+  uint64_t ns;
+
+  ns = rtems_counter_ticks_to_nanoseconds(d);
+
+  /* Special case for CPU counters using the clock driver counter */
+  if (ns < rtems_configuration_get_nanoseconds_per_tick()) {
+    printf(
+      "warning: the RTEMS counter seems to be unable to\n"
+      "  measure intervals greater than the clock tick interval\n"
+    );
+
+    ns += rtems_configuration_get_nanoseconds_per_tick();
+  }
+
+  return ns;
+}
+
 static void test_report(test_context *ctx)
 {
   double ns_per_tick = NS_PER_TICK;
@@ -169,7 +188,7 @@ static void test_report(test_context *ctx)
 
   for (i = 0; i < N; ++i) {
     d = rtems_counter_difference(ctx->delay_ns_t[i][1], ctx->delay_ns_t[i][0]);
-    ns = rtems_counter_ticks_to_nanoseconds(d);
+    ns = large_delta_to_ns(d);
 
     printf(
       "ns busy wait duration: %" PRIu64 "ns\n"
@@ -186,7 +205,7 @@ static void test_report(test_context *ctx)
       ctx->delay_ticks_t[i][1],
       ctx->delay_ticks_t[i][0]
     );
-    ns = rtems_counter_ticks_to_nanoseconds(d);
+    ns = large_delta_to_ns(d);
 
     printf(
       "ticks busy wait duration: %" PRIu64 "ns\n"



More information about the vc mailing list