2016-07-12 2 views
0

Согласно 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 остается нетронутой.

+1

В чем причина ваших сомнений? Если он компилирует и связывает и вызывается правильная функция, это правильно - я ... компилятор/компоновщик скоро скажет вам, если это не так. Помните, что когда вы получаете переполнение стека, помните, что ваш код, скорее всего, выйдет из строя способами, из-за которых эта функция не будет вызвана - проверка выполняется только в контекстном коммутаторе, а код не может пройти так далеко после переполнения стека. – Clifford

+0

Любая причина, по которой вы используете необычный '2', который не является стандартным булевым значением в C? И как мы ** говорим вам, что это правильно? Это ** ваш ** код в конце концов. Просто обратите внимание, что в обычных приложениях FreeRTOS нет консоли. – Olaf

+0

Выглядит хорошо. Но, как говорит Клиффорд, если ваш стек переполнен, все может случиться! –

ответ

Смежные вопросы