40 lines
753 B
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(¬e, 1);
|
|
}
|
|
|
|
rt_task_sleep(15);
|
|
rt_notify_post(¬e);
|
|
}
|
|
|
|
static void waiter(void)
|
|
{
|
|
rt_task_drop_privilege();
|
|
uint32_t value;
|
|
|
|
for (int i = 0; i < n; ++i)
|
|
{
|
|
rt_assert(rt_notify_timedwait_clear(¬e, &value, 1, 10),
|
|
"wait timed out");
|
|
}
|
|
|
|
rt_assert(!rt_notify_timedwait(¬e, &value, 10), "wait didn't time out");
|
|
|
|
rt_trap();
|
|
}
|
|
|
|
RT_TASK(notifier, RT_STACK_MIN, 0);
|
|
RT_TASK(waiter, RT_STACK_MIN, 0);
|