mirror of https://github.com/ARMmbed/mbed-os.git
Merge pull request #5328 from MikeDK/master
equeue: add config option to use different timer classespull/5471/head
commit
555ae12111
|
@ -23,27 +23,36 @@
|
|||
#include <stdbool.h>
|
||||
#include "mbed.h"
|
||||
|
||||
#if MBED_CONF_EVENTS_USE_LOWPOWER_TIMER_TICKER
|
||||
#define ALIAS_TIMER LowPowerTimer
|
||||
#define ALIAS_TICKER LowPowerTicker
|
||||
#define ALIAS_TIMEOUT LowPowerTimeout
|
||||
#else
|
||||
#define ALIAS_TIMER Timer
|
||||
#define ALIAS_TICKER Ticker
|
||||
#define ALIAS_TIMEOUT Timeout
|
||||
#endif
|
||||
|
||||
// Ticker operations
|
||||
static bool equeue_tick_inited = false;
|
||||
static volatile unsigned equeue_minutes = 0;
|
||||
static unsigned equeue_timer[
|
||||
(sizeof(Timer)+sizeof(unsigned)-1)/sizeof(unsigned)];
|
||||
(sizeof(ALIAS_TIMER)+sizeof(unsigned)-1)/sizeof(unsigned)];
|
||||
static unsigned equeue_ticker[
|
||||
(sizeof(Ticker)+sizeof(unsigned)-1)/sizeof(unsigned)];
|
||||
(sizeof(ALIAS_TICKER)+sizeof(unsigned)-1)/sizeof(unsigned)];
|
||||
|
||||
static void equeue_tick_update() {
|
||||
equeue_minutes += reinterpret_cast<Timer*>(equeue_timer)->read_ms();
|
||||
reinterpret_cast<Timer*>(equeue_timer)->reset();
|
||||
equeue_minutes += reinterpret_cast<ALIAS_TIMER*>(equeue_timer)->read_ms();
|
||||
reinterpret_cast<ALIAS_TIMER*>(equeue_timer)->reset();
|
||||
}
|
||||
|
||||
static void equeue_tick_init() {
|
||||
MBED_STATIC_ASSERT(sizeof(equeue_timer) >= sizeof(Timer),
|
||||
MBED_STATIC_ASSERT(sizeof(equeue_timer) >= sizeof(ALIAS_TIMER),
|
||||
"The equeue_timer buffer must fit the class Timer");
|
||||
MBED_STATIC_ASSERT(sizeof(equeue_ticker) >= sizeof(Ticker),
|
||||
MBED_STATIC_ASSERT(sizeof(equeue_ticker) >= sizeof(ALIAS_TICKER),
|
||||
"The equeue_ticker buffer must fit the class Ticker");
|
||||
Timer *timer = new (equeue_timer) Timer;
|
||||
Ticker *ticker = new (equeue_ticker) Ticker;
|
||||
ALIAS_TIMER *timer = new (equeue_timer) ALIAS_TIMER;
|
||||
ALIAS_TICKER *ticker = new (equeue_ticker) ALIAS_TICKER;
|
||||
|
||||
equeue_minutes = 0;
|
||||
timer->start();
|
||||
|
@ -62,7 +71,7 @@ unsigned equeue_tick() {
|
|||
|
||||
do {
|
||||
minutes = equeue_minutes;
|
||||
ms = reinterpret_cast<Timer*>(equeue_timer)->read_ms();
|
||||
ms = reinterpret_cast<ALIAS_TIMER*>(equeue_timer)->read_ms();
|
||||
} while (minutes != equeue_minutes);
|
||||
|
||||
return minutes + ms;
|
||||
|
@ -132,7 +141,7 @@ static void equeue_sema_timeout(equeue_sema_t *s) {
|
|||
|
||||
bool equeue_sema_wait(equeue_sema_t *s, int ms) {
|
||||
int signal = 0;
|
||||
Timeout timeout;
|
||||
ALIAS_TIMEOUT timeout;
|
||||
if (ms == 0) {
|
||||
return false;
|
||||
} else if (ms > 0) {
|
||||
|
|
|
@ -21,6 +21,10 @@
|
|||
"shared-highprio-eventsize": {
|
||||
"help": "Event buffer size (bytes) for shared high-priority event queue",
|
||||
"value": 256
|
||||
},
|
||||
"use-lowpower-timer-ticker": {
|
||||
"help": "Enable use of low power timer and ticker classes. May reduce the accuracy of the event queue.",
|
||||
"value": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue