void init() { allegro_init(); /* Initializes this library */ tspec_init(); set_gfx_mode(GFX_AUTODETECT_WINDOWED, XWIN, YWIN, 0, 0); clear_to_color(screen, BGC); install_keyboard(); install_mouse(); srand(time(NULL)); /* semaphore to write on the screen */ pmux_create_pi(&mxa); }
void ptask_init(int policy, global_policy global, sem_protocol protocol) { int i; ptask_policy = policy; ptask_global = global; ptask_protocol = protocol; ptask_num_cores = sysconf(_SC_NPROCESSORS_ONLN); /* checks that admission control is disabled in case of partitioned edf */ if ((ptask_policy == SCHED_DEADLINE) && (ptask_global == PARTITIONED)) { FILE *f = fopen("/proc/sys/kernel/sched_rt_runtime_us", "r"); int v = 0; fscanf(f, "%d", &v); fclose(f); if (v != -1) { fprintf(stderr, "Cannot set PARTITIONED EDF scheduling, because " "admission control is enabled\n"); exit(-1); } } /* initializes all private sems with the value 0 */ for (i = 0; i < MAX_TASKS; i++) { sem_init(&_tsem[i], 0, 0); if (i == MAX_TASKS - 1) _tp[i].free = _TP_NOMORE; else _tp[i].free = i + 1; } first_free = 0; if (ptask_protocol == PRIO_INHERITANCE) pmux_create_pi(&_tp_mutex); else if (ptask_protocol == PRIO_CEILING) pmux_create_pc(&_tp_mutex, 99); else if (ptask_protocol == NO_PROTOCOL) pthread_mutex_init(&_tp_mutex, 0); else ptask_syserror("ptask_init()", "Semaphore protocol not supported"); // initialize time tspec_init(); }