Skip to content

Commit 7c7975e

Browse files
mastaresplinterhefloryd
authored andcommitted
fix: handle event setting in ISR context
1 parent e6c3583 commit 7c7975e

1 file changed

Lines changed: 16 additions & 1 deletion

File tree

src/freertos/osal.c

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "osal_sys.h"
1818

1919
#include <stdlib.h>
20+
#include <portmacro.h>
2021

2122
#define TMO_TO_TICKS(ms) \
2223
((ms == OS_WAIT_FOREVER) ? portMAX_DELAY : (ms) / portTICK_PERIOD_MS)
@@ -151,7 +152,21 @@ bool os_event_wait (os_event_t * event, uint32_t mask, uint32_t * value, uint32_
151152

152153
void os_event_set (os_event_t * event, uint32_t value)
153154
{
154-
xEventGroupSetBits ((EventGroupHandle_t)event, value);
155+
if (xPortIsInsideInterrupt() == pdTRUE)
156+
{
157+
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
158+
159+
xEventGroupSetBitsFromISR (
160+
(EventGroupHandle_t)event,
161+
value,
162+
&xHigherPriorityTaskWoken);
163+
164+
portYIELD_FROM_ISR (xHigherPriorityTaskWoken);
165+
}
166+
else
167+
{
168+
xEventGroupSetBits ((EventGroupHandle_t)event, value);
169+
}
155170
}
156171

157172
void os_event_clr (os_event_t * event, uint32_t value)

0 commit comments

Comments
 (0)