Как симулировать переполнение стека в FreeRTOS - PullRequest
2 голосов
/ 31 января 2020

Я настроил CubeMX STM32 для использования мониторинга переполнения стека FreeRTOS. Теперь я хочу проверить, что это на самом деле работает. Я пробовал некоторые простые вещи, такие как выполнение функции ниже в одном из потоков

`// C program to demonstrate stack overflow 
// by creating a non-terminating recursive 
// function. 

void fun(int x) 
{ 
    if (x == 1) 
       return; 
    x = 6; 
    fun(x); 
} 

   int x = 5; 
   fun(x); 

, но я получаю HardFault.

Знаете ли вы способ имитации переполнения стека в FreeRTOS?

Ответы [ 2 ]

0 голосов
/ 31 января 2020

Мониторинг стека происходит, когда запущенная задача переводится из состояния выполнения.

Вероятно, ваша программа достигнет некоторого предела памяти HW (и сгенерирует HardFault), прежде чем она будет переведена из состояния выполнения. Следовательно, монитор стека никогда не запускается.

Так что сделайте вызов ОС внутри функции, которая переведет задачу из состояния выполнения. Что-то вроде задержки / сна или чего-то подобного.

0 голосов
/ 31 января 2020

Похоже, я нашел решение. Все, что вам нужно, это изменить размер стека одного потока на очень низкий, и программа перейдет к vApplicationStackOverflowHook

...