diff --git a/tests/benchmarks/latency_measure/src/int_to_thread_evt.c b/tests/benchmarks/latency_measure/src/int_to_thread_evt.c index 791751e6b14..1cc91c750b4 100644 --- a/tests/benchmarks/latency_measure/src/int_to_thread_evt.c +++ b/tests/benchmarks/latency_measure/src/int_to_thread_evt.c @@ -24,10 +24,11 @@ #include static u32_t timestamp; - +static struct k_work work; K_SEM_DEFINE(INTSEMA, 0, 1); -K_ALERT_DEFINE(EVENT0, NULL, 10); +K_SEM_DEFINE(WORKSEMA, 0, 1); + /** * @@ -41,10 +42,17 @@ static void latency_test_isr(void *unused) { ARG_UNUSED(unused); - k_alert_send(&EVENT0); + k_work_submit(&work); timestamp = TIME_STAMP_DELTA_GET(0); } +static void worker(struct k_work *item) +{ + (void)item; + timestamp = TIME_STAMP_DELTA_GET(timestamp); + k_sem_give(&WORKSEMA); +} + /** * * @brief Software interrupt generating thread @@ -77,10 +85,12 @@ int int_to_thread_evt(void) { PRINT_FORMAT(" 2 - Measure time from ISR to executing a different thread" " (rescheduled)"); + k_work_init(&work, worker); + TICK_SYNCH(); k_sem_give(&INTSEMA); - k_alert_recv(&EVENT0, K_FOREVER); - timestamp = TIME_STAMP_DELTA_GET(timestamp); + k_sem_take(&WORKSEMA, K_FOREVER); + PRINT_FORMAT(" switch time is %u tcs = %u nsec", timestamp, SYS_CLOCK_HW_CYCLES_TO_NS(timestamp)); return 0;