aboutsummaryrefslogtreecommitdiffstats
path: root/os
diff options
context:
space:
mode:
Diffstat (limited to 'os')
-rw-r--r--os/rt/include/chevents.h14
-rw-r--r--os/rt/src/chevents.c6
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;
}
/**