int main(int argc, char *argv[]) { unsigned long msg; int prio, bprio; if (argc > 1) { USE_RPC = atoi(argv[1]); SNDBRCV = atoi(argv[2]); HARDMAIN = atoi(argv[3]); } if (!(maintask = rt_task_init_schmod(0xcacca, 1, 0, 0, SCHED_FIFO, 0x1))) { rt_printk("CANNOT INIT MAIN\n"); exit(1); } start_rt_timer(0); rt_printk("MAIN INIT\n"); pthread_create(&thread, NULL, thread_fun, NULL); mlockall(MCL_CURRENT | MCL_FUTURE); if (HARDMAIN) { rt_make_hard_real_time(); } rt_get_priorities(maintask, &prio, &bprio); rt_printk("TEST: %s, %s, %d\n", USE_RPC ? "WITH RPC" : "WITH SUSP/RESM", SNDBRCV ? "SEND BEFORE RECEIVE" : "RECEIVE BEFORE SEND", prio); if (SNDBRCV) { rt_sleep(nano2count(100000000)); } rt_get_priorities(maintask, &prio, &bprio); rt_printk("MAIN REC %d\n", prio); if (USE_RPC) { RT_TASK *task; task = rt_receive(0, &msg); rt_get_priorities(maintask, &prio, &bprio); rt_printk("MAIN RET %d\n", prio); rt_return(task, 0); } else { rt_receive(0, &msg); rt_get_priorities(maintask, &prio, &bprio); rt_printk("MAIN RES %d\n", prio); rt_task_resume(funtask); } rt_get_priorities(maintask, &prio, &bprio); rt_printk("MAIN DONE %d\n", prio); stop_rt_timer(); rt_task_delete(maintask); rt_printk("MAIN END\n"); return 0; }
int main(void) { int i, k, prio, bprio; task[0] = rt_task_init_schmod(0, NTASKS - 1, 0, 0, SCHED_FIFO, CPUS_ALLOWED); mlockall(MCL_CURRENT | MCL_FUTURE); rt_make_hard_real_time(); for (i = 0; i < NTASKS; i++) { sem[i] = rt_typed_sem_init(0, RESEMT, RES_SEM); } rt_sem_wait(sem[0]); for (i = 1; i < NTASKS; i++) { rt_thread_create(tskfun, (void *)i, 0); rt_receive(NULL, &k); rt_printk("AFTER TSKNR %d CREATED > (TSKNR-PRI):\n", i); for (k = 0; k < i; k++) { rt_get_priorities(task[k], &prio, &bprio); rt_printk("%d-%d|", k, prio); } rt_get_priorities(task[i], &prio, &bprio); rt_printk("%d-%d\n\n", i, prio); } rt_sem_signal(sem[0]); rt_printk("FINAL > (TSKNR-PRI):\n"); for (k = 0; k < (NTASKS - 1); k++) { rt_get_priorities(task[k], &prio, &bprio); rt_printk("%d-%d|", k, prio); } rt_get_priorities(task[NTASKS - 1], &prio, &bprio); rt_printk("%d-%d\n\n", (NTASKS - 1), prio); for (i = 0; i < NTASKS; i++) { rt_sem_delete(sem[i]); } return 0; }
void *tskfun(void *tasknr) { int tsknr, k, prio, bprio; tsknr = (int)tasknr; task[tsknr] = rt_task_init_schmod(0, NTASKS - tsknr - 1, 0, 0, SCHED_FIFO, CPUS_ALLOWED); mlockall(MCL_CURRENT | MCL_FUTURE); rt_make_hard_real_time(); rt_sem_wait(sem[tsknr]); rt_send(task[0], 0); rt_sem_wait(sem[tsknr - 1]); rt_sem_signal(sem[tsknr]); rt_sem_signal(sem[tsknr - 1]); rt_printk("AT TSKNR EXIT %d > (TSKNR-PRI):\n", tsknr); for (k = 0; k < tsknr; k++) { rt_get_priorities(task[k], &prio, &bprio); rt_printk("%d-%d|", k, prio); } rt_get_priorities(task[tsknr], &prio, &bprio); rt_printk("%d-%d\n\n", tsknr, prio); return NULL; }