Согласно FreeRTOS
документации относительно переполнения стека:FreeRTOS стек переполнения крючка
Приложения должны обеспечить переполнение стека функцию крюка, если configCHECK_FOR_STACK_OVERFLOW не установлен на 0. Функция крюка должна называться vApplicationStackOverflowHook(), и есть прототип ниже:
недействительным vApplicationStackOverflowHook (TaskHandle_t xTask, подписанный символ * pcTaskName);
И FreeRTOS
следующий прототип определяется внутри tasks.h
файла:
/* Callback function prototypes. --------------------------*/
extern void vApplicationStackOverflowHook(xTaskHandle pxTask, signed char *pcTaskName);
Итак, я поставил configCHECK_FOR_STACK_OVERFLOW
на 2 и реализации функции в моем коде приложения:
void vApplicationStackOverflowHook(xTaskHandle pxTask, signed char *pcTaskName)
{
while (1)
{
/* my code. Prints stuff directly to the console*/
}
}
Мои Вопрос в том, правильна ли эта реализация? т. е. реализация крючка находится в моем коде приложения, а декларация в tasks.h
остается нетронутой.
В чем причина ваших сомнений? Если он компилирует и связывает и вызывается правильная функция, это правильно - я ... компилятор/компоновщик скоро скажет вам, если это не так. Помните, что когда вы получаете переполнение стека, помните, что ваш код, скорее всего, выйдет из строя способами, из-за которых эта функция не будет вызвана - проверка выполняется только в контекстном коммутаторе, а код не может пройти так далеко после переполнения стека. – Clifford
Любая причина, по которой вы используете необычный '2', который не является стандартным булевым значением в C? И как мы ** говорим вам, что это правильно? Это ** ваш ** код в конце концов. Просто обратите внимание, что в обычных приложениях FreeRTOS нет консоли. – Olaf
Выглядит хорошо. Но, как говорит Клиффорд, если ваш стек переполнен, все может случиться! –