52 lines
1.0 KiB
C
52 lines
1.0 KiB
C
#include <rt/task.h>
|
|
#include <rt/tls.h>
|
|
#include <rt/trap.h>
|
|
|
|
#include <stdint.h>
|
|
|
|
#if RT_TASK_LOCAL_STORAGE_ENABLE
|
|
static _Thread_local uint32_t foo, bar = 2;
|
|
#define foo0 foo
|
|
#define bar0 bar
|
|
#define foo1 foo
|
|
#define bar1 bar
|
|
#else // !RT_TASK_LOCAL_STORAGE_ENABLE
|
|
static uint32_t foo0, bar0 = 2, foo1, bar1 = 2;
|
|
#endif // RT_TASK_LOCAL_STORAGE_ENABLE
|
|
|
|
static void task0(void)
|
|
{
|
|
foo0 = 1;
|
|
for (;;)
|
|
{
|
|
foo0 += 2;
|
|
rt_task_yield();
|
|
bar0 += foo0;
|
|
rt_assert((foo0 & 1) == 1, "foo0 has an unexpected value");
|
|
}
|
|
}
|
|
|
|
static void task1(void)
|
|
{
|
|
foo1 = 0;
|
|
for (;;)
|
|
{
|
|
foo1 += 2;
|
|
rt_task_yield();
|
|
bar1 += foo1;
|
|
rt_assert((foo1 & 1) == 0, "foo1 has an unexpected value");
|
|
rt_assert((bar1 & 1) == 0, "bar1 has an unexpected value");
|
|
}
|
|
}
|
|
|
|
static void timeout(void)
|
|
{
|
|
rt_task_drop_privilege();
|
|
rt_task_sleep(100);
|
|
rt_trap();
|
|
}
|
|
|
|
RT_TASK(task0, RT_STACK_MIN, 1);
|
|
RT_TASK(task1, RT_STACK_MIN, 1);
|
|
RT_TASK(timeout, RT_STACK_MIN, 0);
|