Если есть рекурсивные функции -- невозможно. С указателями на функции тоже трудно, но кое-как hitech-c для pic18 справляется... Что потенциально можно сделать: 1) ну во-первых рантайм проверку указателя SP... в нормальных процессорах есть аппаратная проверка, а для AVR программы небольшие... можно и так разобраться. вообще вспоминается, то ли для avr-gcc, то ли для keil x51, то ли ещё где была опциональная софтовая проверка на переполнение стека (что тормозило и раздувало программу ибо проверяло в прологе каждой функции).
2) во-вторых использовать какую-либо программу строющую дерево вызова функций (static code analyzers). хоть самую примиривную, вроде cflow (или ftp://ftp.berlios.de/pub/calltree/README) -- если исключить рекурсивные функции (глубину рекурсии для них оценивать отдельно) и вызов по-указателям -- глубину вызовов оценить уже можно. Осталось самую малось -- ручками (офонареешь) посчитать сколько памяти на стеке нужно в каждой функции. Можно для всех функций взять некую большую чем среднюю константу, посчитать отдельно только для функций с большими локальными переменными (кстати поэтому -- нефиг, есть malloc).
3) есть специальные софты...
http://www.cs.utah …edu/~regehr/stacktool/ не уверен, что рабочие.