diff options
| author | Rbb666 <[email protected]> | 2023-07-05 19:30:08 +0800 |
|---|---|---|
| committer | guo <[email protected]> | 2023-07-07 09:41:04 +0800 |
| commit | 67b38d1aad8877445d1e72e7db37896e0ba66321 (patch) | |
| tree | 76ff7e06c971ef8d7708213c3be60a96793d36b2 | |
| parent | b59d243c4fa769387625f9ed4b59fa0b24e62588 (diff) | |
[kernel]支持多个线程接收同一个事件
| -rw-r--r-- | src/ipc.c | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -1770,6 +1770,7 @@ rt_err_t rt_event_send(rt_event_t event, rt_uint32_t set) rt_base_t level; rt_base_t status; rt_bool_t need_schedule; + rt_uint32_t need_clear_set = 0; /* parameter check */ RT_ASSERT(event != RT_NULL); @@ -1833,7 +1834,7 @@ rt_err_t rt_event_send(rt_event_t event, rt_uint32_t set) { /* clear event */ if (thread->event_info & RT_EVENT_FLAG_CLEAR) - event->set &= ~thread->event_set; + need_clear_set |= thread->event_set; /* resume thread, and thread list breaks out */ rt_thread_resume(thread); @@ -1843,6 +1844,10 @@ rt_err_t rt_event_send(rt_event_t event, rt_uint32_t set) need_schedule = RT_TRUE; } } + if (need_clear_set) + { + event->set &= ~need_clear_set; + } } /* enable interrupt */ |
