Цитата(Andy_F @ Aug 3 2006, 10:57)

Просто создаётся ощущение ненадёжности программирования - программа поработала-поработала, и зависла. Стек увеличил (CSTACK) - вроде работает нормально. Но где гарантия, что при выполнении ещё чего-то стек опять не исчерпается ?
На этапе трансляции компилятор выдает информацию по потребности стека в каждой функции, можно посчитать с учетом вложенности функций. На этапе компоновке линкер выдает сообщение о нехватке стека. Кроме того, использование ОЗУ, размер программных сегментов и их размещение в памяти можно посмотреть в файле карты памяти на выходе линкера. При определении размера стека нужно учитывать потребности стека в процедурах прерывания. Самый худший случай: прерывание в при выполнении функции с наибольшим уровнем вложенности.
А общие рекомендации таковы:
1. не размещать большие наборы данных в стековой памяти. Особенно это относится к массивам или переменным типов long и float. Для них лучше использовать статическую память, использование которой легче контроллировать.
2. не вызывать из процедур прерываний друге функции и делать сами процедуры обработки прерываний по возможности короче. Чем короче функция, тем меньше регистров в ней используется.