#include #include #include #include #include static struct traceobj trobj; static RT_TASK t_rr1, t_rr2; static RT_SEM sem; #define RR_QUANTUM 500000ULL double d = 0.7; double f = 1.7; static void rr_task(void *arg) { int ret, n; traceobj_enter(&trobj); ret = rt_task_slice(NULL, RR_QUANTUM); traceobj_check(&trobj, ret, 0); ret = rt_sem_p(&sem, TM_INFINITE); traceobj_check(&trobj, ret, 0); for (n = 0; n < 1000000; n++) { d *= 0.99; f = d / 16; } traceobj_exit(&trobj); } int main(int argc, char *const argv[]) { int ret; traceobj_init(&trobj, argv[0], 0); ret = rt_sem_create(&sem, "SEMA", 0, S_FIFO); traceobj_check(&trobj, ret, 0); ret = rt_task_create(&t_rr1, "rr_task_1", 0, 10, 0); traceobj_check(&trobj, ret, 0); ret = rt_task_start(&t_rr1, rr_task, "t1"); traceobj_check(&trobj, ret, 0); ret = rt_task_create(&t_rr2, "rr_task_2", 0, 10, 0); traceobj_check(&trobj, ret, 0); ret = rt_task_start(&t_rr2, rr_task, "t2"); traceobj_check(&trobj, ret, 0); ret = rt_sem_broadcast(&sem); traceobj_check(&trobj, ret, 0); traceobj_join(&trobj); exit(0); }