M0HAX 0 11 ноября, 2011 Опубликовано 11 ноября, 2011 (изменено) · Жалоба Можно ли вызывать pvPortMalloc/vPortFree внутри irq-прерывании? Попытался и получил, что после его вызова в прерывании разрешается irq-прерывание в CPSR со всеми вытекающими печальными последствиями. Данное прерывание проходит как обычно через сохранение/восстановление контекста задач. Не нашел в документации, что pvPortMalloc нельзя вызывать из прерываний, или я что-то пропустил? Изменено 11 ноября, 2011 пользователем M0HAX Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aba 0 11 ноября, 2011 Опубликовано 11 ноября, 2011 (изменено) · Жалоба А нельзя ли реализовать алгоритм работы например так? 1 - из прерывания отсылается сообщение задаче. 2 - задача, ожидающая это сообщение уже выделяет память. В функциях pvPortMalloc/vPortFree используются функции vTaskSuspendAll() и xTaskResumeAll(), последняя разрешает прерывания, я думаю из-за этого могут возникнуть непредвиденные глюки. Изменено 11 ноября, 2011 пользователем aba Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSV 0 11 ноября, 2011 Опубликовано 11 ноября, 2011 · Жалоба vTaskSuspendAll() и xTaskResumeAll(), последняя разрешает прерывания, я думаю из-за этого могут возникнуть непредвиденные глюки.Эти функции предназначены для врЕменной становки и последующего запуска планировщика задач соответственно. Запрещает прерывания макрос portEnterCritical(), разрешает - portExitCritical(). А идея по организации процесса правильная. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
M0HAX 0 14 ноября, 2011 Опубликовано 14 ноября, 2011 · Жалоба Согласен, что так лучше - не надо будет в прерывании долго сидеть. Но если сделать внутри прерывания перед вызовом pvPortMalloc/vPortFree операцию taskENTER_CRITICAL() , а после вызова pvPortMalloc/vPortFree if (ulCriticalNesting) ulCriticalNesting--; , то все работает и внутри прерывания. Но это изврат, не спорю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться