Beispiel #1
0
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;
}
Beispiel #2
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;
}
Beispiel #3
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;
}