summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2024-01-09 10:27:39 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2024-01-15 07:26:05 +0100
commit7cf8aa7f7215bbab420b348216cbffd202382c20 (patch)
tree0f28901dfca4d4360f5728a8b7ae147901088a6e
parenttmfine01: Convert to JSON data (diff)
downloadrtems-7cf8aa7f7215bbab420b348216cbffd202382c20.tar.bz2
tmtimer01: Convert to JSON data
This avoids a dependency on the non-standard libxml2 module.
-rw-r--r--testsuites/tmtests/tmfine01/init.c30
-rw-r--r--testsuites/tmtests/tmtimer01/init.c35
-rw-r--r--testsuites/tmtests/tmtimer01/plot.py52
-rw-r--r--testsuites/tmtests/tmtimer01/tmtimer01.scn389
4 files changed, 328 insertions, 178 deletions
diff --git a/testsuites/tmtests/tmfine01/init.c b/testsuites/tmtests/tmfine01/init.c
index 0396a01054..c05894f6da 100644
--- a/testsuites/tmtests/tmfine01/init.c
+++ b/testsuites/tmtests/tmfine01/init.c
@@ -55,6 +55,8 @@ typedef struct {
typedef struct {
rtems_test_parallel_context base;
+ const char *test_sep;
+ const char *counter_sep;
rtems_id master;
rtems_id sema;
rtems_id mq[CPU_COUNT];
@@ -88,11 +90,8 @@ static rtems_interval test_init(
return test_duration();
}
-static const char *test_sep = "";
-
-static const char *counter_sep;
-
static void test_fini(
+ test_context *ctx,
const char *type,
const char *description,
uint32_t *counters,
@@ -108,16 +107,16 @@ static void test_fini(
" \"type\": \"%s\",\n"
" \"description\": \"%s\",\n"
" \"counter\": [",
- test_sep,
+ ctx->test_sep,
type,
description
);
- test_sep = ", ";
- counter_sep = "\n ";
+ ctx->test_sep = ", ";
+ ctx->counter_sep = "\n ";
}
- printf("%s[", counter_sep);
- counter_sep = "],\n ";
+ printf("%s[", ctx->counter_sep);
+ ctx->counter_sep = "],\n ";
value_sep = "";
for (i = 0; i < active_workers; ++i) {
@@ -175,6 +174,7 @@ static void test_self_event_fini(
test_context *ctx = (test_context *) base;
test_fini(
+ ctx,
"event",
"Send Event to Self",
&ctx->self_event_ops[active_workers - 1][0],
@@ -227,6 +227,7 @@ static void test_all_to_one_event_fini(
test_context *ctx = (test_context *) base;
test_fini(
+ ctx,
"event",
"Send Event to One",
&ctx->all_to_one_event_ops[active_workers - 1][0],
@@ -269,6 +270,7 @@ static void test_one_mutex_fini(
test_context *ctx = (test_context *) base;
test_fini(
+ ctx,
"contested-mutex",
"Obtain/Release Contested Classic Inheritance Mutex",
&ctx->one_mutex_ops[active_workers - 1][0],
@@ -324,6 +326,7 @@ static void test_many_mutex_fini(
test_context *ctx = (test_context *) base;
test_fini(
+ ctx,
"private-mutex",
"Obtain/Release Private Classic Inheritance Mutex",
&ctx->many_mutex_ops[active_workers - 1][0],
@@ -376,6 +379,7 @@ static void test_self_msg_fini(
test_context *ctx = (test_context *) base;
test_fini(
+ ctx,
"message",
"Send Message to Self",
&ctx->self_msg_ops[active_workers - 1][0],
@@ -431,6 +435,7 @@ static void test_many_to_one_msg_fini(
test_context *ctx = (test_context *) base;
test_fini(
+ ctx,
"message",
"Send Message to One Receiver",
&ctx->many_to_one_msg_ops[active_workers - 1][0],
@@ -470,6 +475,7 @@ static void test_many_sys_lock_mutex_fini(
test_context *ctx = (test_context *) base;
test_fini(
+ ctx,
"private-mutex",
"Obtain/Release Private <sys/lock.h> Mutex",
&ctx->many_sys_lock_mutex_ops[active_workers - 1][0],
@@ -525,6 +531,7 @@ static void test_many_classic_ceiling_fini(
test_context *ctx = (test_context *) base;
test_fini(
+ ctx,
"private-mutex",
"Obtain/Release Private Classic Ceiling Mutex",
&ctx->many_classic_ceiling_ops[active_workers - 1][0],
@@ -581,6 +588,7 @@ static void test_many_classic_mrsp_fini(
test_context *ctx = (test_context *) base;
test_fini(
+ ctx,
"private-mutex",
"Obtain/Release Private Classic MrsP Mutex",
&ctx->many_classic_mrsp_ops[active_workers - 1][0],
@@ -625,6 +633,7 @@ static void test_many_pthread_spinlock_fini(
test_context *ctx = (test_context *) base;
test_fini(
+ ctx,
"private-mutex",
"Obtain/Release Private Pthread Spinlock",
&ctx->many_pthread_spinlock_ops[active_workers - 1][0],
@@ -680,6 +689,7 @@ static void test_many_pthread_mutex_inherit_fini(
test_context *ctx = (test_context *) base;
test_fini(
+ ctx,
"private-mutex",
"Obtain/Release Private Pthread Inheritance Mutex",
&ctx->many_pthread_mutex_inherit_ops[active_workers - 1][0],
@@ -741,6 +751,7 @@ static void test_many_pthread_mutex_protect_fini(
test_context *ctx = (test_context *) base;
test_fini(
+ ctx,
"private-mutex",
"Obtain/Release Private Pthread Ceiling Mutex",
&ctx->many_pthread_mutex_protect_ops[active_workers - 1][0],
@@ -844,6 +855,7 @@ static void Init(rtems_task_argument arg)
printf("*** BEGIN OF JSON DATA ***\n[\n ");
+ ctx->test_sep = "";
rtems_test_parallel(
&ctx->base,
NULL,
diff --git a/testsuites/tmtests/tmtimer01/init.c b/testsuites/tmtests/tmtimer01/init.c
index b905bb7ab4..1a37b5192c 100644
--- a/testsuites/tmtests/tmtimer01/init.c
+++ b/testsuites/tmtests/tmtimer01/init.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2016 embedded brains GmbH & Co. KG
+ * Copyright (C) 2016, 2024 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -108,13 +108,14 @@ static void test_fire_and_cancel(
rtems_test_assert(sc2 == RTEMS_SUCCESSFUL);
printf(
- "<%s unit=\"ns\">%" PRIu64 "</%s>",
+ ",\n \"%s\": %" PRIu64,
name,
- rtems_counter_ticks_to_nanoseconds(d),
- name
+ rtems_counter_ticks_to_nanoseconds(d)
);
}
+static const char *sep = "\n ";
+
static void test_case(test_context *ctx, size_t j, size_t k)
{
rtems_status_code sc;
@@ -130,13 +131,17 @@ static void test_case(test_context *ctx, size_t j, size_t k)
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
}
- printf(" <Sample>\n <ActiveTimers>%zu</ActiveTimers>", j);
-
- test_fire_and_cancel(ctx, j, 0, "First");
- test_fire_and_cancel(ctx, j, j / 2, "Middle");
- test_fire_and_cancel(ctx, j, j + 1, "Last");
+ printf(
+ "%s{\n"
+ " \"active-timers\": %zu",
+ sep,
+ j
+ );
+ sep = "\n }, ";
- printf("\n </Sample>\n");
+ test_fire_and_cancel(ctx, j, 0, "first");
+ test_fire_and_cancel(ctx, j, j / 2, "middle");
+ test_fire_and_cancel(ctx, j, j + 1, "last");
}
static void test(void)
@@ -181,7 +186,13 @@ static void test(void)
timer_count = n;
}
- printf("<TMTimer01 timerCount=\"%zu\">\n", timer_count);
+ printf(
+ "*** BEGIN OF JSON DATA ***\n"
+ "{\n"
+ " \"timer-count\": %zu,\n"
+ " \"samples\": [",
+ timer_count
+ );
k = 0;
j = 0;
@@ -194,7 +205,7 @@ static void test(void)
test_case(ctx, n - 2, k);
- printf("</TMTimer01>\n");
+ printf("\n }\n ]\n}\n*** END OF JSON DATA ***\n");
}
static void Init(rtems_task_argument arg)
diff --git a/testsuites/tmtests/tmtimer01/plot.py b/testsuites/tmtests/tmtimer01/plot.py
index 0328062314..73654c5b9d 100644
--- a/testsuites/tmtests/tmtimer01/plot.py
+++ b/testsuites/tmtests/tmtimer01/plot.py
@@ -1,7 +1,6 @@
# SPDX-License-Identifier: BSD-2-Clause
-#
-# Copyright (c) 2016 embedded brains GmbH & Co. KG
+# Copyright (C) 2016, 2024 embedded brains GmbH & Co. KG
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -23,22 +22,35 @@
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-#
-import libxml2
-from libxml2 import xmlNode
-import matplotlib.pyplot as plt
-doc = libxml2.parseFile('tmtimer01.scn')
-ctx = doc.xpathNewContext()
-
-plt.title('timer test')
-plt.xscale('log')
-plt.xlabel('active timers')
-plt.ylabel('timer fire and cancel [ns]')
-
-x = map(xmlNode.getContent, ctx.xpathEval('/TMTimer01/Sample/ActiveTimers'))
-for i in ['First', 'Middle', 'Last']:
- y = map(xmlNode.getContent, ctx.xpathEval('/TMTimer01/Sample/' + i))
- plt.plot(x, y, label = i)
-plt.legend(loc = 'best')
-plt.show()
+import json
+import re
+import matplotlib.pyplot as plt # type: ignore
+from matplotlib import ticker # type: ignore
+
+
+def _plot(data: dict) -> None:
+ _, axes = plt.subplots()
+ axes.set_title("Timer Fire and Cancel Timing Test")
+ axes.set_xlabel("Active Timers")
+ axes.set_xscale("log")
+ axes.set_ylabel("Timer Fire and Cancel Duration [μs]")
+ x = [sample["active-timers"] for sample in data["samples"]]
+ for key in ["first", "middle", "last"]:
+ y = [sample[key] / 1000.0 for sample in data["samples"]]
+ axes.plot(x, y, label=f"operate on {key} timer", marker='o')
+ axes.legend(loc='best')
+ plt.savefig("tmtimer01.png")
+ plt.savefig("tmtimer01.pdf")
+ plt.close()
+
+
+_JSON_DATA = re.compile(
+ r"\*\*\* BEGIN OF JSON DATA \*\*\*(.*)"
+ r"\*\*\* END OF JSON DATA \*\*\*", re.DOTALL)
+
+with open("tmtimer01.scn", "r", encoding="utf-8") as src:
+ match = _JSON_DATA.search(src.read())
+ data = json.loads(match.group(1))
+
+_plot(data)
diff --git a/testsuites/tmtests/tmtimer01/tmtimer01.scn b/testsuites/tmtests/tmtimer01/tmtimer01.scn
index db3ca01d27..b278c75177 100644
--- a/testsuites/tmtests/tmtimer01/tmtimer01.scn
+++ b/testsuites/tmtests/tmtimer01/tmtimer01.scn
@@ -1,137 +1,252 @@
-<TMTimer01 timerCount="65504">
- <Sample>
- <ActiveTimers>0</ActiveTimers><First unit="ns">8812</First><Middle unit="ns">1412</Middle><Last unit="ns">917</Last>
- </Sample>
- <Sample>
- <ActiveTimers>2</ActiveTimers><First unit="ns">1602</First><Middle unit="ns">1010</Middle><Last unit="ns">1367</Last>
- </Sample>
- <Sample>
- <ActiveTimers>4</ActiveTimers><First unit="ns">1524</First><Middle unit="ns">1089</Middle><Last unit="ns">1086</Last>
- </Sample>
- <Sample>
- <ActiveTimers>7</ActiveTimers><First unit="ns">1791</First><Middle unit="ns">1121</Middle><Last unit="ns">1838</Last>
- </Sample>
- <Sample>
- <ActiveTimers>10</ActiveTimers><First unit="ns">1488</First><Middle unit="ns">1016</Middle><Last unit="ns">2134</Last>
- </Sample>
- <Sample>
- <ActiveTimers>14</ActiveTimers><First unit="ns">1527</First><Middle unit="ns">1698</Middle><Last unit="ns">3186</Last>
- </Sample>
- <Sample>
- <ActiveTimers>19</ActiveTimers><First unit="ns">2078</First><Middle unit="ns">1665</Middle><Last unit="ns">3397</Last>
- </Sample>
- <Sample>
- <ActiveTimers>25</ActiveTimers><First unit="ns">1519</First><Middle unit="ns">2368</Middle><Last unit="ns">4464</Last>
- </Sample>
- <Sample>
- <ActiveTimers>32</ActiveTimers><First unit="ns">1243</First><Middle unit="ns">2623</Middle><Last unit="ns">3549</Last>
- </Sample>
- <Sample>
- <ActiveTimers>41</ActiveTimers><First unit="ns">2368</First><Middle unit="ns">2578</Middle><Last unit="ns">4105</Last>
- </Sample>
- <Sample>
- <ActiveTimers>52</ActiveTimers><First unit="ns">2322</First><Middle unit="ns">2563</Middle><Last unit="ns">4126</Last>
- </Sample>
- <Sample>
- <ActiveTimers>66</ActiveTimers><First unit="ns">2499</First><Middle unit="ns">1855</Middle><Last unit="ns">4919</Last>
- </Sample>
- <Sample>
- <ActiveTimers>83</ActiveTimers><First unit="ns">1689</First><Middle unit="ns">3128</Middle><Last unit="ns">5894</Last>
- </Sample>
- <Sample>
- <ActiveTimers>104</ActiveTimers><First unit="ns">2301</First><Middle unit="ns">2647</Middle><Last unit="ns">4595</Last>
- </Sample>
- <Sample>
- <ActiveTimers>130</ActiveTimers><First unit="ns">2880</First><Middle unit="ns">3183</Middle><Last unit="ns">6222</Last>
- </Sample>
- <Sample>
- <ActiveTimers>162</ActiveTimers><First unit="ns">2597</First><Middle unit="ns">2376</Middle><Last unit="ns">7118</Last>
- </Sample>
- <Sample>
- <ActiveTimers>201</ActiveTimers><First unit="ns">3519</First><Middle unit="ns">3466</Middle><Last unit="ns">6673</Last>
- </Sample>
- <Sample>
- <ActiveTimers>249</ActiveTimers><First unit="ns">2829</First><Middle unit="ns">3177</Middle><Last unit="ns">7784</Last>
- </Sample>
- <Sample>
- <ActiveTimers>308</ActiveTimers><First unit="ns">2614</First><Middle unit="ns">3396</Middle><Last unit="ns">7338</Last>
- </Sample>
- <Sample>
- <ActiveTimers>381</ActiveTimers><First unit="ns">3454</First><Middle unit="ns">4888</Middle><Last unit="ns">9114</Last>
- </Sample>
- <Sample>
- <ActiveTimers>470</ActiveTimers><First unit="ns">3397</First><Middle unit="ns">2443</Middle><Last unit="ns">7689</Last>
- </Sample>
- <Sample>
- <ActiveTimers>580</ActiveTimers><First unit="ns">2233</First><Middle unit="ns">4410</Middle><Last unit="ns">9355</Last>
- </Sample>
- <Sample>
- <ActiveTimers>715</ActiveTimers><First unit="ns">3787</First><Middle unit="ns">5891</Middle><Last unit="ns">6833</Last>
- </Sample>
- <Sample>
- <ActiveTimers>881</ActiveTimers><First unit="ns">3839</First><Middle unit="ns">5089</Middle><Last unit="ns">9232</Last>
- </Sample>
- <Sample>
- <ActiveTimers>1085</ActiveTimers><First unit="ns">2838</First><Middle unit="ns">2739</Middle><Last unit="ns">11575</Last>
- </Sample>
- <Sample>
- <ActiveTimers>1336</ActiveTimers><First unit="ns">3256</First><Middle unit="ns">5011</Middle><Last unit="ns">9684</Last>
- </Sample>
- <Sample>
- <ActiveTimers>1645</ActiveTimers><First unit="ns">2293</First><Middle unit="ns">5262</Middle><Last unit="ns">10183</Last>
- </Sample>
- <Sample>
- <ActiveTimers>2025</ActiveTimers><First unit="ns">4436</First><Middle unit="ns">5934</Middle><Last unit="ns">8804</Last>
- </Sample>
- <Sample>
- <ActiveTimers>2492</ActiveTimers><First unit="ns">4506</First><Middle unit="ns">7284</Middle><Last unit="ns">10389</Last>
- </Sample>
- <Sample>
- <ActiveTimers>3067</ActiveTimers><First unit="ns">3832</First><Middle unit="ns">4990</Middle><Last unit="ns">9536</Last>
- </Sample>
- <Sample>
- <ActiveTimers>3774</ActiveTimers><First unit="ns">5088</First><Middle unit="ns">4888</Middle><Last unit="ns">9633</Last>
- </Sample>
- <Sample>
- <ActiveTimers>4644</ActiveTimers><First unit="ns">5590</First><Middle unit="ns">5749</Middle><Last unit="ns">8975</Last>
- </Sample>
- <Sample>
- <ActiveTimers>5714</ActiveTimers><First unit="ns">4854</First><Middle unit="ns">6813</Middle><Last unit="ns">11603</Last>
- </Sample>
- <Sample>
- <ActiveTimers>7030</ActiveTimers><First unit="ns">6139</First><Middle unit="ns">6132</Middle><Last unit="ns">12630</Last>
- </Sample>
- <Sample>
- <ActiveTimers>8649</ActiveTimers><First unit="ns">6877</First><Middle unit="ns">3852</Middle><Last unit="ns">10973</Last>
- </Sample>
- <Sample>
- <ActiveTimers>10640</ActiveTimers><First unit="ns">6532</First><Middle unit="ns">6097</Middle><Last unit="ns">11725</Last>
- </Sample>
- <Sample>
- <ActiveTimers>13089</ActiveTimers><First unit="ns">5284</First><Middle unit="ns">5392</Middle><Last unit="ns">13246</Last>
- </Sample>
- <Sample>
- <ActiveTimers>16101</ActiveTimers><First unit="ns">7077</First><Middle unit="ns">7572</Middle><Last unit="ns">14820</Last>
- </Sample>
- <Sample>
- <ActiveTimers>19806</ActiveTimers><First unit="ns">7132</First><Middle unit="ns">8335</Middle><Last unit="ns">11668</Last>
- </Sample>
- <Sample>
- <ActiveTimers>24363</ActiveTimers><First unit="ns">8676</First><Middle unit="ns">7919</Middle><Last unit="ns">13937</Last>
- </Sample>
- <Sample>
- <ActiveTimers>29968</ActiveTimers><First unit="ns">5970</First><Middle unit="ns">10978</Middle><Last unit="ns">16035</Last>
- </Sample>
- <Sample>
- <ActiveTimers>36862</ActiveTimers><First unit="ns">8804</First><Middle unit="ns">8767</Middle><Last unit="ns">13089</Last>
- </Sample>
- <Sample>
- <ActiveTimers>45342</ActiveTimers><First unit="ns">8608</First><Middle unit="ns">10305</Middle><Last unit="ns">15709</Last>
- </Sample>
- <Sample>
- <ActiveTimers>55772</ActiveTimers><First unit="ns">8949</First><Middle unit="ns">10031</Middle><Last unit="ns">16262</Last>
- </Sample>
- <Sample>
- <ActiveTimers>65503</ActiveTimers><First unit="ns">9199</First><Middle unit="ns">10309</Middle><Last unit="ns">19090</Last>
- </Sample>
-</TMTimer01>
+
+ SIS - SPARC/RISCV instruction simulator 2.30, copyright Jiri Gaisler 2020
+ Bug-reports to jiri@gaisler.se
+
+ GR740/LEON4 emulation enabled, 4 cpus online, delta 50 clocks
+
+ Loaded build/sparc/gr740/testsuites/tmtests/tmtimer01.exe, entry 0x00000000
+
+
+*** BEGIN OF TEST TMTIMER 1 ***
+*** TEST VERSION: 6.0.0.76c91ee7793fc70b92e2f87e601c3fdc2d2b7f3f
+*** TEST STATE: EXPECTED_PASS
+*** TEST BUILD: RTEMS_SMP
+*** TEST TOOLS: 13.2.0 20230727 (RTEMS 6, RSB d3d738c35a71ca05f675b188539225099401ac79, Newlib a021448)
+*** BEGIN OF JSON DATA ***
+{
+ "timer-count": 61024,
+ "samples": [
+ {
+ "active-timers": 0,
+ "first": 8560,
+ "middle": 8600,
+ "last": 8520
+ }, {
+ "active-timers": 2,
+ "first": 9020,
+ "middle": 11680,
+ "last": 8860
+ }, {
+ "active-timers": 4,
+ "first": 9480,
+ "middle": 9440,
+ "last": 11060
+ }, {
+ "active-timers": 7,
+ "first": 9360,
+ "middle": 9820,
+ "last": 12300
+ }, {
+ "active-timers": 10,
+ "first": 9860,
+ "middle": 9580,
+ "last": 11980
+ }, {
+ "active-timers": 14,
+ "first": 9860,
+ "middle": 10040,
+ "last": 12280
+ }, {
+ "active-timers": 19,
+ "first": 10360,
+ "middle": 10080,
+ "last": 13260
+ }, {
+ "active-timers": 25,
+ "first": 10360,
+ "middle": 10500,
+ "last": 14460
+ }, {
+ "active-timers": 32,
+ "first": 10240,
+ "middle": 10620,
+ "last": 13040
+ }, {
+ "active-timers": 41,
+ "first": 10820,
+ "middle": 10540,
+ "last": 15000
+ }, {
+ "active-timers": 52,
+ "first": 10740,
+ "middle": 10880,
+ "last": 13660
+ }, {
+ "active-timers": 66,
+ "first": 10820,
+ "middle": 10880,
+ "last": 13960
+ }, {
+ "active-timers": 83,
+ "first": 11160,
+ "middle": 11040,
+ "last": 14940
+ }, {
+ "active-timers": 104,
+ "first": 11160,
+ "middle": 11420,
+ "last": 14340
+ }, {
+ "active-timers": 130,
+ "first": 11160,
+ "middle": 11300,
+ "last": 14720
+ }, {
+ "active-timers": 162,
+ "first": 11460,
+ "middle": 11380,
+ "last": 14880
+ }, {
+ "active-timers": 201,
+ "first": 11500,
+ "middle": 11880,
+ "last": 17060
+ }, {
+ "active-timers": 249,
+ "first": 11580,
+ "middle": 11800,
+ "last": 16900
+ }, {
+ "active-timers": 308,
+ "first": 11380,
+ "middle": 12060,
+ "last": 15640
+ }, {
+ "active-timers": 381,
+ "first": 11760,
+ "middle": 11840,
+ "last": 19800
+ }, {
+ "active-timers": 470,
+ "first": 11880,
+ "middle": 12180,
+ "last": 16100
+ }, {
+ "active-timers": 580,
+ "first": 11760,
+ "middle": 12600,
+ "last": 16560
+ }, {
+ "active-timers": 715,
+ "first": 12140,
+ "middle": 12220,
+ "last": 17380
+ }, {
+ "active-timers": 881,
+ "first": 12260,
+ "middle": 12640,
+ "last": 18740
+ }, {
+ "active-timers": 1085,
+ "first": 12140,
+ "middle": 12560,
+ "last": 22320
+ }, {
+ "active-timers": 1336,
+ "first": 12720,
+ "middle": 12600,
+ "last": 17240
+ }, {
+ "active-timers": 1645,
+ "first": 12560,
+ "middle": 13020,
+ "last": 21140
+ }, {
+ "active-timers": 2025,
+ "first": 12720,
+ "middle": 12980,
+ "last": 19500
+ }, {
+ "active-timers": 2492,
+ "first": 12720,
+ "middle": 13400,
+ "last": 18160
+ }, {
+ "active-timers": 3067,
+ "first": 13060,
+ "middle": 13060,
+ "last": 19220
+ }, {
+ "active-timers": 3774,
+ "first": 12980,
+ "middle": 13560,
+ "last": 18620
+ }, {
+ "active-timers": 4644,
+ "first": 13260,
+ "middle": 13860,
+ "last": 18920
+ }, {
+ "active-timers": 5714,
+ "first": 13440,
+ "middle": 13520,
+ "last": 18920
+ }, {
+ "active-timers": 7030,
+ "first": 13440,
+ "middle": 13900,
+ "last": 19380
+ }, {
+ "active-timers": 8649,
+ "first": 13440,
+ "middle": 13820,
+ "last": 21640
+ }, {
+ "active-timers": 10640,
+ "first": 14020,
+ "middle": 13940,
+ "last": 19760
+ }, {
+ "active-timers": 13089,
+ "first": 13940,
+ "middle": 14160,
+ "last": 22100
+ }, {
+ "active-timers": 16101,
+ "first": 13900,
+ "middle": 14320,
+ "last": 22680
+ }, {
+ "active-timers": 19806,
+ "first": 13900,
+ "middle": 14700,
+ "last": 20840
+ }, {
+ "active-timers": 24363,
+ "first": 14360,
+ "middle": 14320,
+ "last": 21660
+ }, {
+ "active-timers": 29968,
+ "first": 14360,
+ "middle": 14540,
+ "last": 21300
+ }, {
+ "active-timers": 36862,
+ "first": 14360,
+ "middle": 15320,
+ "last": 21440
+ }, {
+ "active-timers": 45342,
+ "first": 14580,
+ "middle": 14700,
+ "last": 21600
+ }, {
+ "active-timers": 55772,
+ "first": 14700,
+ "middle": 15040,
+ "last": 22060
+ }, {
+ "active-timers": 61023,
+ "first": 14780,
+ "middle": 15080,
+ "last": 22960
+ }
+ ]
+}
+*** END OF JSON DATA ***
+
+*** END OF TEST TMTIMER 1 ***
+
+cpu 0 in error mode (tt = 0x80)
+ 522750200 00009b40: 91d02000 ta 0x0