rt/examples/notify.c

40 lines
753 B
C

#include <rt/assert.h>
#include <rt/notify.h>
#include <rt/task.h>
#include <rt/trap.h>
static const int n = 10;
static RT_NOTIFY(note, 0);
static void notifier(void)
{
rt_task_drop_privilege();
for (int i = 0; i < n; ++i)
{
rt_task_sleep(5);
rt_notify_or(&note, 1);
}
rt_task_sleep(15);
rt_notify_post(&note);
}
static void waiter(void)
{
rt_task_drop_privilege();
uint32_t value;
for (int i = 0; i < n; ++i)
{
rt_assert(rt_notify_timedwait_clear(&note, &value, 1, 10),
"wait timed out");
}
rt_assert(!rt_notify_timedwait(&note, &value, 10), "wait didn't time out");
rt_trap();
}
RT_TASK(notifier, RT_STACK_MIN, 0);
RT_TASK(waiter, RT_STACK_MIN, 0);