FreeRtos вызывает vTaskDelete из IRQ

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


person The Tosters    schedule 11.01.2019    source источник


Ответы (2)


Если вы вызываете обратный вызов из IRQ, то он все еще находится в контексте IRQ. Вызов vTaskDelete() с параметром NULL удалит задачу, которая выполнялась до ввода прерывания. , поэтому прерывание попытается вернуться к задаче, которая больше не выполняется. Даже если бы это было не так, практическое правило заключается в том, чтобы не использовать функции API, которые не заканчиваются на «FromISR» из прерывания (отдельный API обеспечивает меньшее количество точек принятия решения в функции, более быстрый и стандартный ввод прерывания, поскольку он не не нужно сохранять переменную вложенности прерывания, нет необходимости передавать параметры, которые не имеют смысла в контексте прерывания (например, время блока) в функцию прерывания и т. д.).

person Richard    schedule 11.01.2019
comment
Не уверен, почему вы предполагаете, что я вызываю vTaskDelete с NULL, но ладно, это не проблема. Вы указали на то, что я подозревал, что метод, который может быть вызван из IRQ, должен иметь суффикс FromISR. Спасибо - person The Tosters; 13.01.2019

Я предполагаю, что вы не вызываете vTaskDelete с аргументом NULL, потому что нет текущей задачи, когда вы находитесь в контексте прерывания. В любом случае vTaskDelete() не следует вызывать из контекста прерывания. Например, его реализация вызовет vPortFree(), чтобы освободить TCB задачи.

person stathisv    schedule 11.01.2019
comment
Я вызываю обратный вызов из IRQ, в этом обратном вызове есть vTaskDelete(taskHandle), где taskHandle — статическая переменная. - person The Tosters; 11.01.2019