Skip to content

Commit 579a25a

Browse files
Antti Kauppilakjbracey
Antti Kauppila
authored andcommitted
redundant code combined
1 parent 97a380f commit 579a25a

File tree

1 file changed

+50
-65
lines changed

1 file changed

+50
-65
lines changed

hal/mbed_ticker_api.c

Lines changed: 50 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -162,25 +162,16 @@ static void update_present_time(const ticker_data_t *const ticker)
162162
// Optimized for 1MHz
163163

164164
elapsed_us = elapsed_ticks;
165-
} else if (0 != queue->frequency_shifts) {
166-
// Optimized for frequencies divisible by 2
167-
uint64_t us_x_ticks = elapsed_ticks * 1000000;
168-
elapsed_us = us_x_ticks >> queue->frequency_shifts;
169-
170-
// Update remainder
171-
queue->tick_remainder += us_x_ticks - (elapsed_us << queue->frequency_shifts);
172-
if (queue->tick_remainder >= queue->frequency) {
173-
elapsed_us += 1;
174-
queue->tick_remainder -= queue->frequency;
175-
}
176165
} else {
177-
// General case
178-
179166
uint64_t us_x_ticks = elapsed_ticks * 1000000;
180-
elapsed_us = us_x_ticks / queue->frequency;
181-
182-
// Update remainder
183-
queue->tick_remainder += us_x_ticks - elapsed_us * queue->frequency;
167+
if (0 != queue->frequency_shifts) {
168+
// Optimized for frequencies divisible by 2
169+
elapsed_us = us_x_ticks >> queue->frequency_shifts;
170+
queue->tick_remainder += us_x_ticks - (elapsed_us << queue->frequency_shifts);
171+
} else {
172+
elapsed_us = us_x_ticks / queue->frequency;
173+
queue->tick_remainder += us_x_ticks - elapsed_us * queue->frequency;
174+
}
184175
if (queue->tick_remainder >= queue->frequency) {
185176
elapsed_us += 1;
186177
queue->tick_remainder -= queue->frequency;
@@ -205,30 +196,57 @@ static timestamp_t compute_tick_round_up(const ticker_data_t *const ticker, us_t
205196

206197
if (1000000 == queue->frequency) {
207198
// Optimized for 1MHz
208-
209199
delta = delta_us;
210-
if (delta > ticker->queue->max_delta) {
211-
delta = ticker->queue->max_delta;
212-
}
213200
} else if (0 != queue->frequency_shifts) {
214201
// Optimized frequencies divisible by 2
215-
216202
delta = ((delta_us << ticker->queue->frequency_shifts) + 1000000 - 1) / 1000000;
217-
if (delta > ticker->queue->max_delta) {
218-
delta = ticker->queue->max_delta;
219-
}
220203
} else {
221204
// General case
222-
223205
delta = (delta_us * queue->frequency + 1000000 - 1) / 1000000;
224-
if (delta > ticker->queue->max_delta) {
225-
delta = ticker->queue->max_delta;
226-
}
206+
}
207+
if (delta > ticker->queue->max_delta) {
208+
delta = ticker->queue->max_delta;
227209
}
228210
}
229211
return (queue->tick_last_read + delta) & queue->bitmask;
230212
}
231213

214+
//NOTE: Must be called from critical section!
215+
static void insert_event(const ticker_data_t *const ticker, ticker_event_t *obj, us_timestamp_t timestamp, uint32_t id)
216+
{
217+
// initialise our data
218+
obj->timestamp = timestamp;
219+
obj->id = id;
220+
221+
/* Go through the list until we either reach the end, or find
222+
an element this should come before (which is possibly the
223+
head). */
224+
ticker_event_t *prev = NULL, *p = ticker->queue->head;
225+
while (p != NULL) {
226+
/* check if we come before p */
227+
if (timestamp < p->timestamp) {
228+
break;
229+
}
230+
/* go to the next element */
231+
prev = p;
232+
p = p->next;
233+
}
234+
235+
/* if we're at the end p will be NULL, which is correct */
236+
obj->next = p;
237+
238+
/* if prev is NULL we're at the head */
239+
if (prev == NULL) {
240+
ticker->queue->head = obj;
241+
} else {
242+
prev->next = obj;
243+
}
244+
245+
if (prev == NULL || timestamp <= ticker->queue->present_time) {
246+
schedule_interrupt(ticker);
247+
}
248+
}
249+
232250
/**
233251
* Return 1 if the tick has incremented to or past match_tick, otherwise 0.
234252
*/
@@ -345,6 +363,7 @@ void ticker_irq_handler(const ticker_data_t *const ticker)
345363
core_util_critical_section_exit();
346364
}
347365

366+
348367
void ticker_insert_event(const ticker_data_t *const ticker, ticker_event_t *obj, timestamp_t timestamp, uint32_t id)
349368
{
350369
core_util_critical_section_enter();
@@ -356,11 +375,7 @@ void ticker_insert_event(const ticker_data_t *const ticker, ticker_event_t *obj,
356375
timestamp
357376
);
358377

359-
// defer to ticker_insert_event_us
360-
ticker_insert_event_us(
361-
ticker,
362-
obj, absolute_timestamp, id
363-
);
378+
insert_event(ticker, obj, absolute_timestamp, id);
364379

365380
core_util_critical_section_exit();
366381
}
@@ -372,37 +387,7 @@ void ticker_insert_event_us(const ticker_data_t *const ticker, ticker_event_t *o
372387
// update the current timestamp
373388
update_present_time(ticker);
374389

375-
// initialise our data
376-
obj->timestamp = timestamp;
377-
obj->id = id;
378-
379-
/* Go through the list until we either reach the end, or find
380-
an element this should come before (which is possibly the
381-
head). */
382-
ticker_event_t *prev = NULL, *p = ticker->queue->head;
383-
while (p != NULL) {
384-
/* check if we come before p */
385-
if (timestamp < p->timestamp) {
386-
break;
387-
}
388-
/* go to the next element */
389-
prev = p;
390-
p = p->next;
391-
}
392-
393-
/* if we're at the end p will be NULL, which is correct */
394-
obj->next = p;
395-
396-
/* if prev is NULL we're at the head */
397-
if (prev == NULL) {
398-
ticker->queue->head = obj;
399-
} else {
400-
prev->next = obj;
401-
}
402-
403-
if (prev == NULL || timestamp <= ticker->queue->present_time) {
404-
schedule_interrupt(ticker);
405-
}
390+
insert_event(ticker, obj, timestamp, id);
406391

407392
core_util_critical_section_exit();
408393
}

0 commit comments

Comments
 (0)