Я работаю над проектом, использующим STM32F446 с образцом, созданным с помощью STM32CubeMX (для инициализации периферийных устройств и промежуточного программного обеспечения, такого как FreeRTOS с интерфейсом CMSIS-V1).У меня есть два потока, которые общаются с помощью почтовых ящиков, но я столкнулся с проблемой: один из потоков -
void StartDispatcherTask(void const * argument)
{
mailCommand *commandData = NULL;
mailCommandResponse *commandResponse = NULL;
osEvent event;
for(;;)
{
event = osMailGet(commandMailHandle, osWaitForever);
commandData = (mailCommand *)event.value.p;
// Here is the problem
osDelay(5000);
}
}
Он задерживается, но никогда не выходит.Есть ли проблема с использованием почтового ящика и задержкой в одном потоке?Я попытался также перенести задержку до for(;;)
, и она работает.
РЕДАКТИРОВАТЬ: я думаю, я могу попытаться добавить более подробную информацию к проблеме.Первый поток отправляет почту определенного типа, а затем ожидает почту другого типа;поток, в котором я получаю проблему, получает почту, идет первым типом и выполняет некоторый код, основанный на том, что он получает, и затем отправляет результат как письмо второго типа;иногда приходится ждать, используя osDelay, и там он перестает работать, но не вдаваясь в обработчик ошибок