tmtimer01: Convert to JSON data

This avoids a dependency on the non-standard libxml2 module.
This commit is contained in:
Sebastian Huber
2024-01-09 10:27:39 +01:00
parent b8a9e0831b
commit 7cf8aa7f72
4 changed files with 326 additions and 176 deletions

View File

@@ -55,6 +55,8 @@ typedef struct {
typedef struct { typedef struct {
rtems_test_parallel_context base; rtems_test_parallel_context base;
const char *test_sep;
const char *counter_sep;
rtems_id master; rtems_id master;
rtems_id sema; rtems_id sema;
rtems_id mq[CPU_COUNT]; rtems_id mq[CPU_COUNT];
@@ -88,11 +90,8 @@ static rtems_interval test_init(
return test_duration(); return test_duration();
} }
static const char *test_sep = "";
static const char *counter_sep;
static void test_fini( static void test_fini(
test_context *ctx,
const char *type, const char *type,
const char *description, const char *description,
uint32_t *counters, uint32_t *counters,
@@ -108,16 +107,16 @@ static void test_fini(
" \"type\": \"%s\",\n" " \"type\": \"%s\",\n"
" \"description\": \"%s\",\n" " \"description\": \"%s\",\n"
" \"counter\": [", " \"counter\": [",
test_sep, ctx->test_sep,
type, type,
description description
); );
test_sep = ", "; ctx->test_sep = ", ";
counter_sep = "\n "; ctx->counter_sep = "\n ";
} }
printf("%s[", counter_sep); printf("%s[", ctx->counter_sep);
counter_sep = "],\n "; ctx->counter_sep = "],\n ";
value_sep = ""; value_sep = "";
for (i = 0; i < active_workers; ++i) { for (i = 0; i < active_workers; ++i) {
@@ -175,6 +174,7 @@ static void test_self_event_fini(
test_context *ctx = (test_context *) base; test_context *ctx = (test_context *) base;
test_fini( test_fini(
ctx,
"event", "event",
"Send Event to Self", "Send Event to Self",
&ctx->self_event_ops[active_workers - 1][0], &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_context *ctx = (test_context *) base;
test_fini( test_fini(
ctx,
"event", "event",
"Send Event to One", "Send Event to One",
&ctx->all_to_one_event_ops[active_workers - 1][0], &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_context *ctx = (test_context *) base;
test_fini( test_fini(
ctx,
"contested-mutex", "contested-mutex",
"Obtain/Release Contested Classic Inheritance Mutex", "Obtain/Release Contested Classic Inheritance Mutex",
&ctx->one_mutex_ops[active_workers - 1][0], &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_context *ctx = (test_context *) base;
test_fini( test_fini(
ctx,
"private-mutex", "private-mutex",
"Obtain/Release Private Classic Inheritance Mutex", "Obtain/Release Private Classic Inheritance Mutex",
&ctx->many_mutex_ops[active_workers - 1][0], &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_context *ctx = (test_context *) base;
test_fini( test_fini(
ctx,
"message", "message",
"Send Message to Self", "Send Message to Self",
&ctx->self_msg_ops[active_workers - 1][0], &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_context *ctx = (test_context *) base;
test_fini( test_fini(
ctx,
"message", "message",
"Send Message to One Receiver", "Send Message to One Receiver",
&ctx->many_to_one_msg_ops[active_workers - 1][0], &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_context *ctx = (test_context *) base;
test_fini( test_fini(
ctx,
"private-mutex", "private-mutex",
"Obtain/Release Private <sys/lock.h> Mutex", "Obtain/Release Private <sys/lock.h> Mutex",
&ctx->many_sys_lock_mutex_ops[active_workers - 1][0], &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_context *ctx = (test_context *) base;
test_fini( test_fini(
ctx,
"private-mutex", "private-mutex",
"Obtain/Release Private Classic Ceiling Mutex", "Obtain/Release Private Classic Ceiling Mutex",
&ctx->many_classic_ceiling_ops[active_workers - 1][0], &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_context *ctx = (test_context *) base;
test_fini( test_fini(
ctx,
"private-mutex", "private-mutex",
"Obtain/Release Private Classic MrsP Mutex", "Obtain/Release Private Classic MrsP Mutex",
&ctx->many_classic_mrsp_ops[active_workers - 1][0], &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_context *ctx = (test_context *) base;
test_fini( test_fini(
ctx,
"private-mutex", "private-mutex",
"Obtain/Release Private Pthread Spinlock", "Obtain/Release Private Pthread Spinlock",
&ctx->many_pthread_spinlock_ops[active_workers - 1][0], &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_context *ctx = (test_context *) base;
test_fini( test_fini(
ctx,
"private-mutex", "private-mutex",
"Obtain/Release Private Pthread Inheritance Mutex", "Obtain/Release Private Pthread Inheritance Mutex",
&ctx->many_pthread_mutex_inherit_ops[active_workers - 1][0], &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_context *ctx = (test_context *) base;
test_fini( test_fini(
ctx,
"private-mutex", "private-mutex",
"Obtain/Release Private Pthread Ceiling Mutex", "Obtain/Release Private Pthread Ceiling Mutex",
&ctx->many_pthread_mutex_protect_ops[active_workers - 1][0], &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 "); printf("*** BEGIN OF JSON DATA ***\n[\n ");
ctx->test_sep = "";
rtems_test_parallel( rtems_test_parallel(
&ctx->base, &ctx->base,
NULL, NULL,

View File

@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */ /* 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 * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * modification, are permitted provided that the following conditions
@@ -108,13 +108,14 @@ static void test_fire_and_cancel(
rtems_test_assert(sc2 == RTEMS_SUCCESSFUL); rtems_test_assert(sc2 == RTEMS_SUCCESSFUL);
printf( printf(
"<%s unit=\"ns\">%" PRIu64 "</%s>", ",\n \"%s\": %" PRIu64,
name, name,
rtems_counter_ticks_to_nanoseconds(d), rtems_counter_ticks_to_nanoseconds(d)
name
); );
} }
static const char *sep = "\n ";
static void test_case(test_context *ctx, size_t j, size_t k) static void test_case(test_context *ctx, size_t j, size_t k)
{ {
rtems_status_code sc; 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); rtems_test_assert(sc == RTEMS_SUCCESSFUL);
} }
printf(" <Sample>\n <ActiveTimers>%zu</ActiveTimers>", j); printf(
"%s{\n"
" \"active-timers\": %zu",
sep,
j
);
sep = "\n }, ";
test_fire_and_cancel(ctx, j, 0, "First"); test_fire_and_cancel(ctx, j, 0, "first");
test_fire_and_cancel(ctx, j, j / 2, "Middle"); test_fire_and_cancel(ctx, j, j / 2, "middle");
test_fire_and_cancel(ctx, j, j + 1, "Last"); test_fire_and_cancel(ctx, j, j + 1, "last");
printf("\n </Sample>\n");
} }
static void test(void) static void test(void)
@@ -181,7 +186,13 @@ static void test(void)
timer_count = n; 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; k = 0;
j = 0; j = 0;
@@ -194,7 +205,7 @@ static void test(void)
test_case(ctx, n - 2, k); 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) static void Init(rtems_task_argument arg)

View File

@@ -1,7 +1,6 @@
# SPDX-License-Identifier: BSD-2-Clause # SPDX-License-Identifier: BSD-2-Clause
# # Copyright (C) 2016, 2024 embedded brains GmbH & Co. KG
# Copyright (c) 2016 embedded brains GmbH & Co. KG
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions # modification, are permitted provided that the following conditions
@@ -23,22 +22,35 @@
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # 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 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE. # POSSIBILITY OF SUCH DAMAGE.
#
import libxml2 import json
from libxml2 import xmlNode import re
import matplotlib.pyplot as plt import matplotlib.pyplot as plt # type: ignore
doc = libxml2.parseFile('tmtimer01.scn') from matplotlib import ticker # type: ignore
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')) def _plot(data: dict) -> None:
for i in ['First', 'Middle', 'Last']: _, axes = plt.subplots()
y = map(xmlNode.getContent, ctx.xpathEval('/TMTimer01/Sample/' + i)) axes.set_title("Timer Fire and Cancel Timing Test")
plt.plot(x, y, label = i) axes.set_xlabel("Active Timers")
plt.legend(loc = 'best') axes.set_xscale("log")
plt.show() 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)

View File

@@ -1,137 +1,252 @@
<TMTimer01 timerCount="65504">
<Sample> SIS - SPARC/RISCV instruction simulator 2.30, copyright Jiri Gaisler 2020
<ActiveTimers>0</ActiveTimers><First unit="ns">8812</First><Middle unit="ns">1412</Middle><Last unit="ns">917</Last> Bug-reports to jiri@gaisler.se
</Sample>
<Sample> GR740/LEON4 emulation enabled, 4 cpus online, delta 50 clocks
<ActiveTimers>2</ActiveTimers><First unit="ns">1602</First><Middle unit="ns">1010</Middle><Last unit="ns">1367</Last>
</Sample> Loaded build/sparc/gr740/testsuites/tmtests/tmtimer01.exe, entry 0x00000000
<Sample>
<ActiveTimers>4</ActiveTimers><First unit="ns">1524</First><Middle unit="ns">1089</Middle><Last unit="ns">1086</Last>
</Sample> *** BEGIN OF TEST TMTIMER 1 ***
<Sample> *** TEST VERSION: 6.0.0.76c91ee7793fc70b92e2f87e601c3fdc2d2b7f3f
<ActiveTimers>7</ActiveTimers><First unit="ns">1791</First><Middle unit="ns">1121</Middle><Last unit="ns">1838</Last> *** TEST STATE: EXPECTED_PASS
</Sample> *** TEST BUILD: RTEMS_SMP
<Sample> *** TEST TOOLS: 13.2.0 20230727 (RTEMS 6, RSB d3d738c35a71ca05f675b188539225099401ac79, Newlib a021448)
<ActiveTimers>10</ActiveTimers><First unit="ns">1488</First><Middle unit="ns">1016</Middle><Last unit="ns">2134</Last> *** BEGIN OF JSON DATA ***
</Sample> {
<Sample> "timer-count": 61024,
<ActiveTimers>14</ActiveTimers><First unit="ns">1527</First><Middle unit="ns">1698</Middle><Last unit="ns">3186</Last> "samples": [
</Sample> {
<Sample> "active-timers": 0,
<ActiveTimers>19</ActiveTimers><First unit="ns">2078</First><Middle unit="ns">1665</Middle><Last unit="ns">3397</Last> "first": 8560,
</Sample> "middle": 8600,
<Sample> "last": 8520
<ActiveTimers>25</ActiveTimers><First unit="ns">1519</First><Middle unit="ns">2368</Middle><Last unit="ns">4464</Last> }, {
</Sample> "active-timers": 2,
<Sample> "first": 9020,
<ActiveTimers>32</ActiveTimers><First unit="ns">1243</First><Middle unit="ns">2623</Middle><Last unit="ns">3549</Last> "middle": 11680,
</Sample> "last": 8860
<Sample> }, {
<ActiveTimers>41</ActiveTimers><First unit="ns">2368</First><Middle unit="ns">2578</Middle><Last unit="ns">4105</Last> "active-timers": 4,
</Sample> "first": 9480,
<Sample> "middle": 9440,
<ActiveTimers>52</ActiveTimers><First unit="ns">2322</First><Middle unit="ns">2563</Middle><Last unit="ns">4126</Last> "last": 11060
</Sample> }, {
<Sample> "active-timers": 7,
<ActiveTimers>66</ActiveTimers><First unit="ns">2499</First><Middle unit="ns">1855</Middle><Last unit="ns">4919</Last> "first": 9360,
</Sample> "middle": 9820,
<Sample> "last": 12300
<ActiveTimers>83</ActiveTimers><First unit="ns">1689</First><Middle unit="ns">3128</Middle><Last unit="ns">5894</Last> }, {
</Sample> "active-timers": 10,
<Sample> "first": 9860,
<ActiveTimers>104</ActiveTimers><First unit="ns">2301</First><Middle unit="ns">2647</Middle><Last unit="ns">4595</Last> "middle": 9580,
</Sample> "last": 11980
<Sample> }, {
<ActiveTimers>130</ActiveTimers><First unit="ns">2880</First><Middle unit="ns">3183</Middle><Last unit="ns">6222</Last> "active-timers": 14,
</Sample> "first": 9860,
<Sample> "middle": 10040,
<ActiveTimers>162</ActiveTimers><First unit="ns">2597</First><Middle unit="ns">2376</Middle><Last unit="ns">7118</Last> "last": 12280
</Sample> }, {
<Sample> "active-timers": 19,
<ActiveTimers>201</ActiveTimers><First unit="ns">3519</First><Middle unit="ns">3466</Middle><Last unit="ns">6673</Last> "first": 10360,
</Sample> "middle": 10080,
<Sample> "last": 13260
<ActiveTimers>249</ActiveTimers><First unit="ns">2829</First><Middle unit="ns">3177</Middle><Last unit="ns">7784</Last> }, {
</Sample> "active-timers": 25,
<Sample> "first": 10360,
<ActiveTimers>308</ActiveTimers><First unit="ns">2614</First><Middle unit="ns">3396</Middle><Last unit="ns">7338</Last> "middle": 10500,
</Sample> "last": 14460
<Sample> }, {
<ActiveTimers>381</ActiveTimers><First unit="ns">3454</First><Middle unit="ns">4888</Middle><Last unit="ns">9114</Last> "active-timers": 32,
</Sample> "first": 10240,
<Sample> "middle": 10620,
<ActiveTimers>470</ActiveTimers><First unit="ns">3397</First><Middle unit="ns">2443</Middle><Last unit="ns">7689</Last> "last": 13040
</Sample> }, {
<Sample> "active-timers": 41,
<ActiveTimers>580</ActiveTimers><First unit="ns">2233</First><Middle unit="ns">4410</Middle><Last unit="ns">9355</Last> "first": 10820,
</Sample> "middle": 10540,
<Sample> "last": 15000
<ActiveTimers>715</ActiveTimers><First unit="ns">3787</First><Middle unit="ns">5891</Middle><Last unit="ns">6833</Last> }, {
</Sample> "active-timers": 52,
<Sample> "first": 10740,
<ActiveTimers>881</ActiveTimers><First unit="ns">3839</First><Middle unit="ns">5089</Middle><Last unit="ns">9232</Last> "middle": 10880,
</Sample> "last": 13660
<Sample> }, {
<ActiveTimers>1085</ActiveTimers><First unit="ns">2838</First><Middle unit="ns">2739</Middle><Last unit="ns">11575</Last> "active-timers": 66,
</Sample> "first": 10820,
<Sample> "middle": 10880,
<ActiveTimers>1336</ActiveTimers><First unit="ns">3256</First><Middle unit="ns">5011</Middle><Last unit="ns">9684</Last> "last": 13960
</Sample> }, {
<Sample> "active-timers": 83,
<ActiveTimers>1645</ActiveTimers><First unit="ns">2293</First><Middle unit="ns">5262</Middle><Last unit="ns">10183</Last> "first": 11160,
</Sample> "middle": 11040,
<Sample> "last": 14940
<ActiveTimers>2025</ActiveTimers><First unit="ns">4436</First><Middle unit="ns">5934</Middle><Last unit="ns">8804</Last> }, {
</Sample> "active-timers": 104,
<Sample> "first": 11160,
<ActiveTimers>2492</ActiveTimers><First unit="ns">4506</First><Middle unit="ns">7284</Middle><Last unit="ns">10389</Last> "middle": 11420,
</Sample> "last": 14340
<Sample> }, {
<ActiveTimers>3067</ActiveTimers><First unit="ns">3832</First><Middle unit="ns">4990</Middle><Last unit="ns">9536</Last> "active-timers": 130,
</Sample> "first": 11160,
<Sample> "middle": 11300,
<ActiveTimers>3774</ActiveTimers><First unit="ns">5088</First><Middle unit="ns">4888</Middle><Last unit="ns">9633</Last> "last": 14720
</Sample> }, {
<Sample> "active-timers": 162,
<ActiveTimers>4644</ActiveTimers><First unit="ns">5590</First><Middle unit="ns">5749</Middle><Last unit="ns">8975</Last> "first": 11460,
</Sample> "middle": 11380,
<Sample> "last": 14880
<ActiveTimers>5714</ActiveTimers><First unit="ns">4854</First><Middle unit="ns">6813</Middle><Last unit="ns">11603</Last> }, {
</Sample> "active-timers": 201,
<Sample> "first": 11500,
<ActiveTimers>7030</ActiveTimers><First unit="ns">6139</First><Middle unit="ns">6132</Middle><Last unit="ns">12630</Last> "middle": 11880,
</Sample> "last": 17060
<Sample> }, {
<ActiveTimers>8649</ActiveTimers><First unit="ns">6877</First><Middle unit="ns">3852</Middle><Last unit="ns">10973</Last> "active-timers": 249,
</Sample> "first": 11580,
<Sample> "middle": 11800,
<ActiveTimers>10640</ActiveTimers><First unit="ns">6532</First><Middle unit="ns">6097</Middle><Last unit="ns">11725</Last> "last": 16900
</Sample> }, {
<Sample> "active-timers": 308,
<ActiveTimers>13089</ActiveTimers><First unit="ns">5284</First><Middle unit="ns">5392</Middle><Last unit="ns">13246</Last> "first": 11380,
</Sample> "middle": 12060,
<Sample> "last": 15640
<ActiveTimers>16101</ActiveTimers><First unit="ns">7077</First><Middle unit="ns">7572</Middle><Last unit="ns">14820</Last> }, {
</Sample> "active-timers": 381,
<Sample> "first": 11760,
<ActiveTimers>19806</ActiveTimers><First unit="ns">7132</First><Middle unit="ns">8335</Middle><Last unit="ns">11668</Last> "middle": 11840,
</Sample> "last": 19800
<Sample> }, {
<ActiveTimers>24363</ActiveTimers><First unit="ns">8676</First><Middle unit="ns">7919</Middle><Last unit="ns">13937</Last> "active-timers": 470,
</Sample> "first": 11880,
<Sample> "middle": 12180,
<ActiveTimers>29968</ActiveTimers><First unit="ns">5970</First><Middle unit="ns">10978</Middle><Last unit="ns">16035</Last> "last": 16100
</Sample> }, {
<Sample> "active-timers": 580,
<ActiveTimers>36862</ActiveTimers><First unit="ns">8804</First><Middle unit="ns">8767</Middle><Last unit="ns">13089</Last> "first": 11760,
</Sample> "middle": 12600,
<Sample> "last": 16560
<ActiveTimers>45342</ActiveTimers><First unit="ns">8608</First><Middle unit="ns">10305</Middle><Last unit="ns">15709</Last> }, {
</Sample> "active-timers": 715,
<Sample> "first": 12140,
<ActiveTimers>55772</ActiveTimers><First unit="ns">8949</First><Middle unit="ns">10031</Middle><Last unit="ns">16262</Last> "middle": 12220,
</Sample> "last": 17380
<Sample> }, {
<ActiveTimers>65503</ActiveTimers><First unit="ns">9199</First><Middle unit="ns">10309</Middle><Last unit="ns">19090</Last> "active-timers": 881,
</Sample> "first": 12260,
</TMTimer01> "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