Переполнение стека после передачи семафора из ISR в FreeRTOS - PullRequest
3 голосов
/ 12 января 2012

Я пытаюсь использовать функцию xSemaphoreGiveFromISR FreeRTOS и сопровождающий макрос portEND_SWITCHING_ISR, чтобы получить семафор из прерывания, которое обрабатывает конец транзакции I2C.

Каждый раз, когда я это делаю, яв конечном итоге в функции подключения переполнения стека приложения моей программы.Единственным изменением от рабочей версии было добавление этой строки в ISR, и я удвоил размер стека с 8192 до 16384, что не помогло.

Есть ли у кого-нибудь мыслио том, что получает меня Гоча?

My configCHECK_FOR_STACK_OVERFLOW значение равно 1.

1 Ответ

1 голос
/ 03 января 2014

Возможно, вы захотите проверить, что прерывание работает с тем же уровнем приоритета, что и RTOS configKERNEL_INTERRUPT_PRIORITY.

Это, к сожалению, не ясно указано.

Я столкнулся с той же проблемой, что иКонфигурация RTOS по умолчанию устанавливает приоритет прерывания ниже, чем по умолчанию для чипа, по крайней мере, для устройств с микрочипами.

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

...