diff --git a/tests/sys/busy_wait/Makefile b/tests/sys/busy_wait/Makefile new file mode 100644 index 0000000000..72da3ee294 --- /dev/null +++ b/tests/sys/busy_wait/Makefile @@ -0,0 +1,5 @@ +include ../Makefile.sys_common + +USEMODULE += ztimer_usec + +include $(RIOTBASE)/Makefile.include diff --git a/tests/sys/busy_wait/Makefile.ci b/tests/sys/busy_wait/Makefile.ci new file mode 100644 index 0000000000..72db76ccb5 --- /dev/null +++ b/tests/sys/busy_wait/Makefile.ci @@ -0,0 +1,3 @@ +BOARD_INSUFFICIENT_MEMORY := \ + atmega8 \ + # diff --git a/tests/sys/busy_wait/main.c b/tests/sys/busy_wait/main.c new file mode 100644 index 0000000000..6c1c3df4ef --- /dev/null +++ b/tests/sys/busy_wait/main.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2024 ML!PA Consulting GmbH + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup tests + * @{ + * + * @file + * @brief Busy Wait loop Test Application + * + * This can be used to determine `CPU_CYCLES_PER_LOOP` by + * comparing the time the busy wait loop took with the + * actual µsec timer. + * + * @author Benjamin Valentin + * @} + */ + +#include +#include "busy_wait.h" +#include "ztimer/stopwatch.h" + +static inline void _measure_interval(ztimer_stopwatch_t *clock, unsigned usec) +{ + unsigned usec_real; + + printf("waiting for %u µs…\n", usec); + ztimer_stopwatch_start(clock); + busy_wait_us(usec); + usec_real = ztimer_stopwatch_measure(clock); + printf("took %u µs (diff: %d µs)\n", usec_real, (int)usec_real - usec); +} + +int main(void) +{ + ztimer_stopwatch_t clock; + ztimer_stopwatch_init(ZTIMER_USEC, &clock); + + _measure_interval(&clock, 10); + _measure_interval(&clock, 100); + _measure_interval(&clock, 1000); + _measure_interval(&clock, 10000); + + return 0; +}