From 111f021eb322dac375c3a1393a06c27965b15aa1 Mon Sep 17 00:00:00 2001 From: Josarn <josuaarndt@live.de> Date: Fri, 20 Apr 2018 04:26:16 +0200 Subject: [PATCH] evtimer: optimized adding --- sys/evtimer/evtimer.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/sys/evtimer/evtimer.c b/sys/evtimer/evtimer.c index fdb119e705..b4eae65375 100644 --- a/sys/evtimer/evtimer.c +++ b/sys/evtimer/evtimer.c @@ -35,8 +35,7 @@ * handle the pointer hack in this function */ void evtimer_add_event_to_list(evtimer_t *evtimer, evtimer_event_t *event) { - uint32_t delta_sum = 0; - + DEBUG("evtimer: new event offset %" PRIu32 " ms\n", event->offset); /* we want list->next to point to the first list element. thus we take the * *address* of evtimer->events, then cast it from (evtimer_event_t **) to * (evtimer_event_t*). After that, list->next actually equals @@ -45,20 +44,32 @@ void evtimer_add_event_to_list(evtimer_t *evtimer, evtimer_event_t *event) while (list->next) { evtimer_event_t *list_entry = list->next; - if ((list_entry->offset + delta_sum) > event->offset) { + /* Stop when new event time is nearer then next */ + if (event->offset < list_entry->offset) { + DEBUG("evtimer: next %" PRIu32 " < %" PRIu32 " ms\n", + event->offset, list_entry->offset); break; } - delta_sum += list_entry->offset; + /* Set event offset relative to previous event */ + event->offset -= list_entry->offset; list = list->next; } + DEBUG("evtimer: new event relativ offset %" PRIu32 " ms\n", event->offset); + + /* Set found next bigger event after new event */ event->next = list->next; if (list->next) { + /* Set offset following event relative to new event */ evtimer_event_t *next_entry = list->next; - next_entry->offset += delta_sum; + DEBUG("evtimer: recalculate offset for %" PRIu32 " ms\n", + next_entry->offset); + next_entry->offset -= event->offset; + + DEBUG("evtimer: resulting new event offset %" PRIu32 " ms\n", + next_entry->offset); } - event->offset -= delta_sum; list->next = event; } -- GitLab