Раскраска стека (Stack painting)
Заполнить стек при загрузке известным узором, а потом проверить, какая часть узора была затёрта.
В микроконтроллере без MMU нет защитной страницы, которая пожаловалась бы на слишком глубокий стек: он просто затирает всё, что лежит рядом. Нужный размер стека редко можно вычислить заранее — прерывания, рекурсия и вызовы библиотек добавляют глубину, о которой никто не писал. Поэтому стек измеряют.
Стартовый код закрашивает каждый стек узором — FreeRTOS использует байт 0xA5, другие предпочитают 0xDEADBEEF — а после какого-то времени работы системы от дна ищут первое изменившееся слово. Это расстояние и есть high-water mark, наибольшая глубина стека за всё время. FreeRTOS отдаёт её через uxTaskGetStackHighWaterMark(). Но она показывает лишь то, что случилось во время теста, а не худший случай, так что запас добавляют потом — обычно со вздохом.