Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Можно ли разблокровать задачу раньше времени?
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > FreeRTOS
Мусатов Константин
Некая задача послала себя в ожидание вызвав vTaskDelay
Можно ли сделать так, что бы она была разблокирована раньше времени?
Судя по графу состояний ее можно сначала отправить в suspend через vTaskSuspend, а потом разбудить через vTaskResume.
Но попытка такой функции
Код
void UnblockDisplayTask( void )
{
  if( !xTaskIsTaskSuspended( DisplayTaskHandle) ) vTaskSuspend( DisplayTaskHandle );
  vTaskResume( DisplayTaskHandle );
}

приводит к зависанию на vTaskSuspend

В теории, можно изменить архитектуру приложения и не пользоваться этим функционалом. Но просто прототип устройства работает под виндами и написан на пяти таймерах, обработчики которых общаются с периферией, будят друг друга, меняют задержки и т.п.

----------------------------------------------------

А похоже получилось, просто один из вызовов этой функции оказался от имени самой же этой задачи и, естественно, себя она уже замораживала навечно.
Cosmojam
Можно усыплять задачу не vTaskDelay, а упирая её в семафор с таймаутом и выдавая семафор будить её раньше таймаута когда это нужно
Мусатов Константин
Цитата(Cosmojam @ Mar 11 2013, 11:09) *
Можно усыплять задачу не vTaskDelay, а упирая её в семафор с таймаутом и выдавая семафор будить её раньше таймаута когда это нужно

О, спасибо, что-то я упустил этот вариант.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.