Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Я делал вот так

Отправлено vitalyn 02 сентября 2008 г. 13:42
В ответ на: Для Vitalty_N: т.е. Вы в самом обработчике прерывания rtai вызывали rt_schedule(); , отправлено ++ 02 сентября 2008 г. 10:45

В обработчике прерывания


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);
}



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 234:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru