From 1178c82a9897d10837f33a34a4c6d15b47f64f5c Mon Sep 17 00:00:00 2001 From: Benjamin Valentin Date: Wed, 20 May 2020 17:48:15 +0200 Subject: [PATCH 1/2] tests/periph_spi: introduce _xtimer_diff_usec() Don't repeat yourself. --- tests/periph_spi/main.c | 47 +++++++++++++++++------------------------ 1 file changed, 19 insertions(+), 28 deletions(-) diff --git a/tests/periph_spi/main.c b/tests/periph_spi/main.c index acaf8312b7e6..1ec076dfa5b0 100644 --- a/tests/periph_spi/main.c +++ b/tests/periph_spi/main.c @@ -80,6 +80,11 @@ static xtimer_ticks32_t _sched_ticks(void) return runtime_ticks; } +static uint32_t _xtimer_diff_usec(xtimer_ticks32_t stop, xtimer_ticks32_t start) +{ + return xtimer_usec_from_ticks(xtimer_diff(stop, start)); +} + void print_bytes(char* title, uint8_t* data, size_t len) { printf("%4s\n", title); @@ -280,8 +285,7 @@ int cmd_bench(int argc, char **argv) } stop = xtimer_now_usec(); sched_stop = _sched_ticks(); - sched_diff_us = xtimer_usec_from_ticks(xtimer_diff(sched_stop, - sched_start)); + sched_diff_us = _xtimer_diff_usec(sched_stop, sched_start); printf(" 1 - write %i times %i byte:", BENCH_REDOS, 1); printf("\t\t\t%"PRIu32"\t%"PRIu32"\n", (stop - start), sched_diff_us); sum += (stop - start); @@ -296,8 +300,7 @@ int cmd_bench(int argc, char **argv) } stop = xtimer_now_usec(); sched_stop = _sched_ticks(); - sched_diff_us = xtimer_usec_from_ticks(xtimer_diff(sched_stop, - sched_start)); + sched_diff_us = _xtimer_diff_usec(sched_stop, sched_start); printf(" 2 - write %i times %i byte:", BENCH_REDOS, BENCH_SMALL); printf("\t\t\t%"PRIu32"\t%"PRIu32"\n", (stop - start), sched_diff_us); sum += (stop - start); @@ -312,8 +315,7 @@ int cmd_bench(int argc, char **argv) } stop = xtimer_now_usec(); sched_stop = _sched_ticks(); - sched_diff_us = xtimer_usec_from_ticks(xtimer_diff(sched_stop, - sched_start)); + sched_diff_us = _xtimer_diff_usec(sched_stop, sched_start); printf(" 3 - write %i times %i byte:", BENCH_REDOS, BENCH_LARGE); printf("\t\t%"PRIu32"\t%"PRIu32"\n", (stop - start), sched_diff_us); sum += (stop - start); @@ -328,8 +330,7 @@ int cmd_bench(int argc, char **argv) } stop = xtimer_now_usec(); sched_stop = _sched_ticks(); - sched_diff_us = xtimer_usec_from_ticks(xtimer_diff(sched_stop, - sched_start)); + sched_diff_us = _xtimer_diff_usec(sched_stop, sched_start); printf(" 4 - write %i times %i byte to register:", BENCH_REDOS, 1); printf("\t%"PRIu32"\t%"PRIu32"\n", (stop - start), sched_diff_us); sum += (stop - start); @@ -344,8 +345,7 @@ int cmd_bench(int argc, char **argv) } stop = xtimer_now_usec(); sched_stop = _sched_ticks(); - sched_diff_us = xtimer_usec_from_ticks(xtimer_diff(sched_stop, - sched_start)); + sched_diff_us = _xtimer_diff_usec(sched_stop, sched_start); printf(" 5 - write %i times %i byte to register:", BENCH_REDOS, BENCH_SMALL); printf("\t%"PRIu32"\t%"PRIu32"\n", (stop - start), sched_diff_us); sum += (stop - start); @@ -360,8 +360,7 @@ int cmd_bench(int argc, char **argv) } stop = xtimer_now_usec(); sched_stop = _sched_ticks(); - sched_diff_us = xtimer_usec_from_ticks(xtimer_diff(sched_stop, - sched_start)); + sched_diff_us = _xtimer_diff_usec(sched_stop, sched_start); printf(" 6 - write %i times %i byte to register:", BENCH_REDOS, BENCH_LARGE); printf("\t%"PRIu32"\t%"PRIu32"\n", (stop - start), sched_diff_us); sum += (stop - start); @@ -376,8 +375,7 @@ int cmd_bench(int argc, char **argv) } stop = xtimer_now_usec(); sched_stop = _sched_ticks(); - sched_diff_us = xtimer_usec_from_ticks(xtimer_diff(sched_stop, - sched_start)); + sched_diff_us = _xtimer_diff_usec(sched_stop, sched_start); printf(" 7 - read %i times %i byte:", BENCH_REDOS, BENCH_SMALL); printf("\t\t\t%"PRIu32"\t%"PRIu32"\n", (stop - start), sched_diff_us); sum += (stop - start); @@ -392,8 +390,7 @@ int cmd_bench(int argc, char **argv) } stop = xtimer_now_usec(); sched_stop = _sched_ticks(); - sched_diff_us = xtimer_usec_from_ticks(xtimer_diff(sched_stop, - sched_start)); + sched_diff_us = _xtimer_diff_usec(sched_stop, sched_start); printf(" 8 - read %i times %i byte:", BENCH_REDOS, BENCH_LARGE); printf("\t\t%"PRIu32"\t%"PRIu32"\n", (stop - start), sched_diff_us); sum += (stop - start); @@ -408,8 +405,7 @@ int cmd_bench(int argc, char **argv) } stop = xtimer_now_usec(); sched_stop = _sched_ticks(); - sched_diff_us = xtimer_usec_from_ticks(xtimer_diff(sched_stop, - sched_start)); + sched_diff_us = _xtimer_diff_usec(sched_stop, sched_start); printf(" 9 - read %i times %i byte from register:", BENCH_REDOS, BENCH_SMALL); printf("\t%"PRIu32"\t%"PRIu32"\n", (stop - start), sched_diff_us); sum += (stop - start); @@ -424,8 +420,7 @@ int cmd_bench(int argc, char **argv) } stop = xtimer_now_usec(); sched_stop = _sched_ticks(); - sched_diff_us = xtimer_usec_from_ticks(xtimer_diff(sched_stop, - sched_start)); + sched_diff_us = _xtimer_diff_usec(sched_stop, sched_start); printf("10 - read %i times %i byte from register:", BENCH_REDOS, BENCH_LARGE); printf("\t%"PRIu32"\t%"PRIu32"\n", (stop - start), sched_diff_us); sum += (stop - start); @@ -440,8 +435,7 @@ int cmd_bench(int argc, char **argv) } stop = xtimer_now_usec(); sched_stop = _sched_ticks(); - sched_diff_us = xtimer_usec_from_ticks(xtimer_diff(sched_stop, - sched_start)); + sched_diff_us = _xtimer_diff_usec(sched_stop, sched_start); printf("11 - transfer %i times %i byte:", BENCH_REDOS, BENCH_SMALL); printf("\t\t%"PRIu32"\t%"PRIu32"\n", (stop - start), sched_diff_us); sum += (stop - start); @@ -456,8 +450,7 @@ int cmd_bench(int argc, char **argv) } stop = xtimer_now_usec(); sched_stop = _sched_ticks(); - sched_diff_us = xtimer_usec_from_ticks(xtimer_diff(sched_stop, - sched_start)); + sched_diff_us = _xtimer_diff_usec(sched_stop, sched_start); printf("12 - transfer %i times %i byte:", BENCH_REDOS, BENCH_LARGE); printf("\t\t%"PRIu32"\t%"PRIu32"\n", (stop - start), sched_diff_us); sum += (stop - start); @@ -472,8 +465,7 @@ int cmd_bench(int argc, char **argv) } stop = xtimer_now_usec(); sched_stop = _sched_ticks(); - sched_diff_us = xtimer_usec_from_ticks(xtimer_diff(sched_stop, - sched_start)); + sched_diff_us = _xtimer_diff_usec(sched_stop, sched_start); printf("13 - transfer %i times %i byte to register:", BENCH_REDOS, BENCH_SMALL); printf("\t%"PRIu32"\t%"PRIu32"\n", (stop - start), sched_diff_us); sum += (stop - start); @@ -488,8 +480,7 @@ int cmd_bench(int argc, char **argv) } stop = xtimer_now_usec(); sched_stop = _sched_ticks(); - sched_diff_us = xtimer_usec_from_ticks(xtimer_diff(sched_stop, - sched_start)); + sched_diff_us = _xtimer_diff_usec(sched_stop, sched_start); printf("14 - transfer %i times %i byte to register:", BENCH_REDOS, BENCH_LARGE); printf("%"PRIu32"\t%"PRIu32"\n", (stop - start), sched_diff_us); sum += (stop - start); From a57bd08a1188a8e7be4ebf595c78ab840ebbf429 Mon Sep 17 00:00:00 2001 From: Benjamin Valentin Date: Wed, 20 May 2020 17:54:40 +0200 Subject: [PATCH 2/2] tests/periph_spi: add benchmark for acquire / release --- tests/periph_spi/main.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/periph_spi/main.c b/tests/periph_spi/main.c index 1ec076dfa5b0..689c80fac2f5 100644 --- a/tests/periph_spi/main.c +++ b/tests/periph_spi/main.c @@ -486,6 +486,25 @@ int cmd_bench(int argc, char **argv) sum += (stop - start); sched_sum += sched_diff_us; + /* 15 - release & acquire the bus 1000 times */ + sched_start = _sched_ticks(); + start = xtimer_now_usec(); + for (int i = 0; i < BENCH_REDOS; i++) { + spi_release(spiconf.dev); + if (spi_acquire(spiconf.dev, spiconf.cs, spiconf.mode, spiconf.clk) != SPI_OK) { + puts("ERROR - spi_acquire() failed."); + break; + } + } + stop = xtimer_now_usec(); + sched_stop = _sched_ticks(); + sched_diff_us = _xtimer_diff_usec(sched_stop, sched_start); + printf("15 - acquire/release %i times:\t\t", BENCH_REDOS); + printf("%"PRIu32"\t%"PRIu32"\n", (stop - start), sched_diff_us); + sum += (stop - start); + sched_sum += sched_diff_us; + + xtimer_sleep(1); printf("-- - SUM:\t\t\t\t\t%"PRIu32"\t%"PRIu32"\n", sum, sched_sum);