Merge pull request #4571 from geky/events-use-rtx-event-flags

events: Adopt osEventFlags from RTX 5
pull/4636/head
Jimmy Brisson 2017-06-29 11:06:42 -05:00 committed by GitHub
commit fecb99140d
2 changed files with 17 additions and 8 deletions

View File

@ -86,18 +86,21 @@ void equeue_mutex_unlock(equeue_mutex_t *m) {
#ifdef MBED_CONF_RTOS_PRESENT #ifdef MBED_CONF_RTOS_PRESENT
int equeue_sema_create(equeue_sema_t *s) { int equeue_sema_create(equeue_sema_t *s) {
MBED_STATIC_ASSERT(sizeof(equeue_sema_t) >= sizeof(Semaphore), osEventFlagsAttr_t attr;
"The equeue_sema_t must fit the class Semaphore"); memset(&attr, 0, sizeof(attr));
new (s) Semaphore(0); attr.cb_mem = &s->mem;
return 0; attr.cb_size = sizeof(s->mem);
s->id = osEventFlagsNew(&attr);
return !s->id ? -1 : 0;
} }
void equeue_sema_destroy(equeue_sema_t *s) { void equeue_sema_destroy(equeue_sema_t *s) {
reinterpret_cast<Semaphore*>(s)->~Semaphore(); osEventFlagsDelete(s->id);
} }
void equeue_sema_signal(equeue_sema_t *s) { void equeue_sema_signal(equeue_sema_t *s) {
reinterpret_cast<Semaphore*>(s)->release(); osEventFlagsSet(s->id, 1);
} }
bool equeue_sema_wait(equeue_sema_t *s, int ms) { bool equeue_sema_wait(equeue_sema_t *s, int ms) {
@ -105,7 +108,7 @@ bool equeue_sema_wait(equeue_sema_t *s, int ms) {
ms = osWaitForever; ms = osWaitForever;
} }
return (reinterpret_cast<Semaphore*>(s)->wait(ms) > 0); return (osEventFlagsWait(s->id, 1, osFlagsWaitAny, ms) == 1);
} }
#else #else

View File

@ -49,6 +49,9 @@ extern "C" {
// Platform includes // Platform includes
#if defined(EQUEUE_PLATFORM_POSIX) #if defined(EQUEUE_PLATFORM_POSIX)
#include <pthread.h> #include <pthread.h>
#elif defined(EQUEUE_PLATFORM_MBED)
#include "cmsis_os2.h"
#include "rtx_lib.h"
#endif #endif
@ -112,7 +115,10 @@ typedef struct equeue_sema {
bool signal; bool signal;
} equeue_sema_t; } equeue_sema_t;
#elif defined(EQUEUE_PLATFORM_MBED) && defined(MBED_CONF_RTOS_PRESENT) #elif defined(EQUEUE_PLATFORM_MBED) && defined(MBED_CONF_RTOS_PRESENT)
typedef unsigned equeue_sema_t[9]; typedef struct equeue_sema {
osEventFlagsId_t id;
os_event_flags_t mem;
} equeue_sema_t;
#elif defined(EQUEUE_PLATFORM_MBED) #elif defined(EQUEUE_PLATFORM_MBED)
typedef volatile int equeue_sema_t; typedef volatile int equeue_sema_t;
#endif #endif