diff options
Diffstat (limited to 'os')
-rw-r--r-- | os/rt/include/chevents.h | 14 | ||||
-rw-r--r-- | os/rt/src/chevents.c | 6 |
2 files changed, 17 insertions, 3 deletions
diff --git a/os/rt/include/chevents.h b/os/rt/include/chevents.h index bb368e96b..a01c6d71e 100644 --- a/os/rt/include/chevents.h +++ b/os/rt/include/chevents.h @@ -257,6 +257,20 @@ static inline void chEvtBroadcastI(event_source_t *esp) { }
/**
+ * @brief Adds (OR) a set of events to the current thread, this is
+ * @b much faster than using @p chEvtBroadcast() or @p chEvtSignal().
+ *
+ * @param[in] events the events to be added
+ * @return The mask of currently pending events.
+ *
+ * @iclass
+ */
+static inline eventmask_t chEvtAddEventsI(eventmask_t events) {
+
+ return currp->epending |= events;
+}
+
+/**
* @brief Returns the events mask.
* @details The pending events mask is returned but not altered in any way.
*
diff --git a/os/rt/src/chevents.c b/os/rt/src/chevents.c index eedd240ad..4f318960a 100644 --- a/os/rt/src/chevents.c +++ b/os/rt/src/chevents.c @@ -180,13 +180,13 @@ eventmask_t chEvtGetAndClearEvents(eventmask_t events) { * @api
*/
eventmask_t chEvtAddEvents(eventmask_t events) {
+ eventmask_t newevt;
chSysLock();
- currp->epending |= events;
- events = currp->epending;
+ newevt = chEvtAddEventsI(events);
chSysUnlock();
- return events;
+ return newevt;
}
/**
|