From eacc27659d339ff582bb210dce674a09161de983 Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Tue, 17 Oct 2017 15:28:00 +0200 Subject: [PATCH 1/3] equeue: added config option which tells equeue_mbed.cpp if it shall use LowPowerTimer, LowPowerTimeout and LowPowerTicker instead of Timer/Timeout/Ticker. This way, on SiLabs boards the low power sleep states will be used when using event queue. --- events/equeue/equeue_mbed.cpp | 29 +++++++++++++++++++---------- events/mbed_lib.json | 3 ++- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/events/equeue/equeue_mbed.cpp b/events/equeue/equeue_mbed.cpp index db8af73ffd..d93e0e84b4 100644 --- a/events/equeue/equeue_mbed.cpp +++ b/events/equeue/equeue_mbed.cpp @@ -23,27 +23,36 @@ #include #include "mbed.h" +#if MBED_CONF_EVENTS_USE_LOWPOWER_TIMER_TICKER + #define AliasTimer LowPowerTimer + #define AliasTicker LowPowerTicker + #define AliasTimeout LowPowerTimeout +#else + #define AliasTimer Timer + #define AliasTicker Ticker + #define AliasTimeout 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(AliasTimer)+sizeof(unsigned)-1)/sizeof(unsigned)]; static unsigned equeue_ticker[ - (sizeof(Ticker)+sizeof(unsigned)-1)/sizeof(unsigned)]; + (sizeof(AliasTicker)+sizeof(unsigned)-1)/sizeof(unsigned)]; static void equeue_tick_update() { - equeue_minutes += reinterpret_cast(equeue_timer)->read_ms(); - reinterpret_cast(equeue_timer)->reset(); + equeue_minutes += reinterpret_cast(equeue_timer)->read_ms(); + reinterpret_cast(equeue_timer)->reset(); } static void equeue_tick_init() { - MBED_STATIC_ASSERT(sizeof(equeue_timer) >= sizeof(Timer), + MBED_STATIC_ASSERT(sizeof(equeue_timer) >= sizeof(AliasTimer), "The equeue_timer buffer must fit the class Timer"); - MBED_STATIC_ASSERT(sizeof(equeue_ticker) >= sizeof(Ticker), + MBED_STATIC_ASSERT(sizeof(equeue_ticker) >= sizeof(AliasTicker), "The equeue_ticker buffer must fit the class Ticker"); - Timer *timer = new (equeue_timer) Timer; - Ticker *ticker = new (equeue_ticker) Ticker; + AliasTimer *timer = new (equeue_timer) AliasTimer; + AliasTicker *ticker = new (equeue_ticker) AliasTicker; equeue_minutes = 0; timer->start(); @@ -62,7 +71,7 @@ unsigned equeue_tick() { do { minutes = equeue_minutes; - ms = reinterpret_cast(equeue_timer)->read_ms(); + ms = reinterpret_cast(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; + AliasTimeout timeout; if (ms == 0) { return false; } else if (ms > 0) { diff --git a/events/mbed_lib.json b/events/mbed_lib.json index 0f786f6637..4e77731377 100644 --- a/events/mbed_lib.json +++ b/events/mbed_lib.json @@ -21,6 +21,7 @@ "shared-highprio-eventsize": { "help": "Event buffer size (bytes) for shared high-priority event queue", "value": 256 - } + }, + "use-lowpower-timer-ticker": 0 } } From 6406ab05c67674695b7490028fa7d7389c8a87ae Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Wed, 18 Oct 2017 11:13:39 +0200 Subject: [PATCH 2/3] equeue: added help text for new config option use-lowpower-timer-ticker --- events/mbed_lib.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/events/mbed_lib.json b/events/mbed_lib.json index 4e77731377..1dbc1794b4 100644 --- a/events/mbed_lib.json +++ b/events/mbed_lib.json @@ -22,6 +22,9 @@ "help": "Event buffer size (bytes) for shared high-priority event queue", "value": 256 }, - "use-lowpower-timer-ticker": 0 + "use-lowpower-timer-ticker": { + "help": "Enable use of low power timer and ticker classes. May reduce the accuracy of the event queue.", + "value": 0 + } } } From 23f2199e4797d49bb94ed1c70ec69af26df1782e Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Mon, 30 Oct 2017 13:56:11 +0100 Subject: [PATCH 3/3] equeue: some refactoring to meet coding rules --- events/equeue/equeue_mbed.cpp | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/events/equeue/equeue_mbed.cpp b/events/equeue/equeue_mbed.cpp index d93e0e84b4..7b1fd2f03f 100644 --- a/events/equeue/equeue_mbed.cpp +++ b/events/equeue/equeue_mbed.cpp @@ -24,35 +24,35 @@ #include "mbed.h" #if MBED_CONF_EVENTS_USE_LOWPOWER_TIMER_TICKER - #define AliasTimer LowPowerTimer - #define AliasTicker LowPowerTicker - #define AliasTimeout LowPowerTimeout +#define ALIAS_TIMER LowPowerTimer +#define ALIAS_TICKER LowPowerTicker +#define ALIAS_TIMEOUT LowPowerTimeout #else - #define AliasTimer Timer - #define AliasTicker Ticker - #define AliasTimeout Timeout +#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(AliasTimer)+sizeof(unsigned)-1)/sizeof(unsigned)]; + (sizeof(ALIAS_TIMER)+sizeof(unsigned)-1)/sizeof(unsigned)]; static unsigned equeue_ticker[ - (sizeof(AliasTicker)+sizeof(unsigned)-1)/sizeof(unsigned)]; + (sizeof(ALIAS_TICKER)+sizeof(unsigned)-1)/sizeof(unsigned)]; static void equeue_tick_update() { - equeue_minutes += reinterpret_cast(equeue_timer)->read_ms(); - reinterpret_cast(equeue_timer)->reset(); + equeue_minutes += reinterpret_cast(equeue_timer)->read_ms(); + reinterpret_cast(equeue_timer)->reset(); } static void equeue_tick_init() { - MBED_STATIC_ASSERT(sizeof(equeue_timer) >= sizeof(AliasTimer), + 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(AliasTicker), + MBED_STATIC_ASSERT(sizeof(equeue_ticker) >= sizeof(ALIAS_TICKER), "The equeue_ticker buffer must fit the class Ticker"); - AliasTimer *timer = new (equeue_timer) AliasTimer; - AliasTicker *ticker = new (equeue_ticker) AliasTicker; + ALIAS_TIMER *timer = new (equeue_timer) ALIAS_TIMER; + ALIAS_TICKER *ticker = new (equeue_ticker) ALIAS_TICKER; equeue_minutes = 0; timer->start(); @@ -71,7 +71,7 @@ unsigned equeue_tick() { do { minutes = equeue_minutes; - ms = reinterpret_cast(equeue_timer)->read_ms(); + ms = reinterpret_cast(equeue_timer)->read_ms(); } while (minutes != equeue_minutes); return minutes + ms; @@ -141,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; - AliasTimeout timeout; + ALIAS_TIMEOUT timeout; if (ms == 0) { return false; } else if (ms > 0) {