Skip to content

Commit 555ae12

Browse files
authored
Merge pull request #5328 from MikeDK/master
equeue: add config option to use different timer classes
2 parents 494c25d + 23f2199 commit 555ae12

File tree

2 files changed

+23
-10
lines changed

2 files changed

+23
-10
lines changed

events/equeue/equeue_mbed.cpp

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,27 +23,36 @@
2323
#include <stdbool.h>
2424
#include "mbed.h"
2525

26+
#if MBED_CONF_EVENTS_USE_LOWPOWER_TIMER_TICKER
27+
#define ALIAS_TIMER LowPowerTimer
28+
#define ALIAS_TICKER LowPowerTicker
29+
#define ALIAS_TIMEOUT LowPowerTimeout
30+
#else
31+
#define ALIAS_TIMER Timer
32+
#define ALIAS_TICKER Ticker
33+
#define ALIAS_TIMEOUT Timeout
34+
#endif
2635

2736
// Ticker operations
2837
static bool equeue_tick_inited = false;
2938
static volatile unsigned equeue_minutes = 0;
3039
static unsigned equeue_timer[
31-
(sizeof(Timer)+sizeof(unsigned)-1)/sizeof(unsigned)];
40+
(sizeof(ALIAS_TIMER)+sizeof(unsigned)-1)/sizeof(unsigned)];
3241
static unsigned equeue_ticker[
33-
(sizeof(Ticker)+sizeof(unsigned)-1)/sizeof(unsigned)];
42+
(sizeof(ALIAS_TICKER)+sizeof(unsigned)-1)/sizeof(unsigned)];
3443

3544
static void equeue_tick_update() {
36-
equeue_minutes += reinterpret_cast<Timer*>(equeue_timer)->read_ms();
37-
reinterpret_cast<Timer*>(equeue_timer)->reset();
45+
equeue_minutes += reinterpret_cast<ALIAS_TIMER*>(equeue_timer)->read_ms();
46+
reinterpret_cast<ALIAS_TIMER*>(equeue_timer)->reset();
3847
}
3948

4049
static void equeue_tick_init() {
41-
MBED_STATIC_ASSERT(sizeof(equeue_timer) >= sizeof(Timer),
50+
MBED_STATIC_ASSERT(sizeof(equeue_timer) >= sizeof(ALIAS_TIMER),
4251
"The equeue_timer buffer must fit the class Timer");
43-
MBED_STATIC_ASSERT(sizeof(equeue_ticker) >= sizeof(Ticker),
52+
MBED_STATIC_ASSERT(sizeof(equeue_ticker) >= sizeof(ALIAS_TICKER),
4453
"The equeue_ticker buffer must fit the class Ticker");
45-
Timer *timer = new (equeue_timer) Timer;
46-
Ticker *ticker = new (equeue_ticker) Ticker;
54+
ALIAS_TIMER *timer = new (equeue_timer) ALIAS_TIMER;
55+
ALIAS_TICKER *ticker = new (equeue_ticker) ALIAS_TICKER;
4756

4857
equeue_minutes = 0;
4958
timer->start();
@@ -62,7 +71,7 @@ unsigned equeue_tick() {
6271

6372
do {
6473
minutes = equeue_minutes;
65-
ms = reinterpret_cast<Timer*>(equeue_timer)->read_ms();
74+
ms = reinterpret_cast<ALIAS_TIMER*>(equeue_timer)->read_ms();
6675
} while (minutes != equeue_minutes);
6776

6877
return minutes + ms;
@@ -132,7 +141,7 @@ static void equeue_sema_timeout(equeue_sema_t *s) {
132141

133142
bool equeue_sema_wait(equeue_sema_t *s, int ms) {
134143
int signal = 0;
135-
Timeout timeout;
144+
ALIAS_TIMEOUT timeout;
136145
if (ms == 0) {
137146
return false;
138147
} else if (ms > 0) {

events/mbed_lib.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@
2121
"shared-highprio-eventsize": {
2222
"help": "Event buffer size (bytes) for shared high-priority event queue",
2323
"value": 256
24+
},
25+
"use-lowpower-timer-ticker": {
26+
"help": "Enable use of low power timer and ticker classes. May reduce the accuracy of the event queue.",
27+
"value": 0
2428
}
2529
}
2630
}

0 commit comments

Comments
 (0)