В общем ситуация такая: есть задача, которая работает с файловой системой, постоянно читая блоки в выделенную задачей область памяти. Есть необходимость удалять и создавать задачу заново (и довольно часто). Использую vTaskDelete(Task) и Hook в котором высвобождаю память. удаление происходит в любой момент, в том числе когда происходит чтение в выделенную задачей память (читаю по DMA). И возникает ситуация, когда память уже удалена, а чтение все еще происходит "на автомате" в заданный блок, который принадлежал задаче которой уже нет... Самое простое - заключить задачу в критическую секцию, но тогда смысл использования DMA с целью освобождения ресурсов CPU сильно теряется. И вопрос собственно такой: как покрасивее наладить средствами FreeRTOS отсрочивание удаления задачи (при нахождении в определенных областях), но при этом не блокировать задачу для переключения?
|