Сбой vfprintf в многозадачной среде на основе FreeRTOS, работающей на NXP K64 ARM Cortex-M4
У меня проблема с получением vfprintf, предоставляемого библиотекой NewLib, работающей в многозадачной среде на основе FreeRTOS, работающей на процессоре NXP K64 ARM Cortext-M4.
Код компилируется с использованием компилятора arm gcc.
FreeRTOS настроен на включение переключателя configUSE_NEWLIB_REENTRANT.
Я предоставил системный вызов _write_r, поэтому в конечном итоге данные будут переданы в один из UART MCU.
Исключение серьезного сбоя вызывается в __sfvwrite_r при доступе к "fp->_p". В этом случае fp - это stderr, который назначен xNewLib_reent.__sf[2] по умолчанию.
Значение по умолчанию для xNewLib_reent.__sf[2]._p указателя равно NULL и больше нигде не размещено.
Любой совет на этот счет высоко ценится.
Обновление: При серьезном сбое ISR я извлекаю ПК из стекового фрейма и, просматривая представление сборки в моем отладчике (то есть автономном отладчике Eclipse CDT), я вижу, что он дает сбой при разыменовании указателя _p.
1 ответ
Вы говорите, что происходит сбой, потому что указатель, на который вы ссылаетесь, равен NULL? Если так, то почему вы приравниваете это к проблеме FreeRTOS? Это потому, что это работает, когда вы не используете FreeRTOS, а не когда это работает?
Если проблема не в указателе NULL, то имейте в виду, что это семейство библиотечных функций использует много стека. Вы проверяете переполнение стека? http://www.freertos.org/Stacks-and-stack-overflow-checking.html