В обработчике прерывания
if ((taskid=rt_get_adr(nam2num("MYTASK"))) != NULL)
{if (taskid->state & SUSPENDED)
rt_task_resume(taskid);
}
В самом приложении в самом начале
RT_TASK *mytask;
struct sched_param mysched;
mysched.sched_priority = sched_get_priority_max(SCHED_FIFO) - 1;
if( sched_setscheduler( 0, SCHED_FIFO, &mysched ) == -1 )
{puts("ERROR IN SETTING THE SCHEDULER");
exit(1);
}
if (!(mytask = rt_task_init(nam2num("MYTASK"), 2, 0, 0)))
{printf("CANNOT INIT MYTASK\n");
exit(2);
}
rt_grow_and_lock_stack(40000);
rt_make_hard_real_time();
rt_task_use_fpu(mytask, 1);
потом в основном цикле:
for (end=0;(!end);)
{
// делаю, что мне надо;
// а когда надо выйти присваиваю end=1;
if (!end) rt_task_suspend(mytask);
else rt_task_delete(mytask);
}