Skip to content

Commit fecb991

Browse files
Merge pull request #4571 from geky/events-use-rtx-event-flags
events: Adopt osEventFlags from RTX 5
2 parents 9f829ff + 3934b30 commit fecb991

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

events/equeue/equeue_mbed.cpp

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -86,26 +86,29 @@ void equeue_mutex_unlock(equeue_mutex_t *m) {
8686
#ifdef MBED_CONF_RTOS_PRESENT
8787

8888
int equeue_sema_create(equeue_sema_t *s) {
89-
MBED_STATIC_ASSERT(sizeof(equeue_sema_t) >= sizeof(Semaphore),
90-
"The equeue_sema_t must fit the class Semaphore");
91-
new (s) Semaphore(0);
92-
return 0;
89+
osEventFlagsAttr_t attr;
90+
memset(&attr, 0, sizeof(attr));
91+
attr.cb_mem = &s->mem;
92+
attr.cb_size = sizeof(s->mem);
93+
94+
s->id = osEventFlagsNew(&attr);
95+
return !s->id ? -1 : 0;
9396
}
9497

9598
void equeue_sema_destroy(equeue_sema_t *s) {
96-
reinterpret_cast<Semaphore*>(s)->~Semaphore();
99+
osEventFlagsDelete(s->id);
97100
}
98101

99102
void equeue_sema_signal(equeue_sema_t *s) {
100-
reinterpret_cast<Semaphore*>(s)->release();
103+
osEventFlagsSet(s->id, 1);
101104
}
102105

103106
bool equeue_sema_wait(equeue_sema_t *s, int ms) {
104107
if (ms < 0) {
105108
ms = osWaitForever;
106109
}
107110

108-
return (reinterpret_cast<Semaphore*>(s)->wait(ms) > 0);
111+
return (osEventFlagsWait(s->id, 1, osFlagsWaitAny, ms) == 1);
109112
}
110113

111114
#else

events/equeue/equeue_platform.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ extern "C" {
4949
// Platform includes
5050
#if defined(EQUEUE_PLATFORM_POSIX)
5151
#include <pthread.h>
52+
#elif defined(EQUEUE_PLATFORM_MBED)
53+
#include "cmsis_os2.h"
54+
#include "rtx_lib.h"
5255
#endif
5356

5457

@@ -112,7 +115,10 @@ typedef struct equeue_sema {
112115
bool signal;
113116
} equeue_sema_t;
114117
#elif defined(EQUEUE_PLATFORM_MBED) && defined(MBED_CONF_RTOS_PRESENT)
115-
typedef unsigned equeue_sema_t[9];
118+
typedef struct equeue_sema {
119+
osEventFlagsId_t id;
120+
os_event_flags_t mem;
121+
} equeue_sema_t;
116122
#elif defined(EQUEUE_PLATFORM_MBED)
117123
typedef volatile int equeue_sema_t;
118124
#endif

0 commit comments

Comments
 (0)