Цитата(ProfessorBraz @ Apr 17 2008, 15:09)

Занятость:
Data: 383 bytes (37.4% Full)
Чем может переполниться стек, если программа только получает и отсылает по 5-7 Байт?

Действительно, обработчик прерывания, фрагмент кода которого Вы привели использует 9 байт стека. Но стек также использует и основная программа: для адресов возврата из вызываемых подпрограмм, для размещения локальных переменных и массивов, передачи параметров процедурам и функциям... Разные трансляторы используют стек по-разному. Я плохо знаком с WinAVR, и не могу сказать - что со стеком делает он... Но, во всех трансляторах (ИМХО) самые прожорливые до памяти функции - printf, scanf и им подобные. Используете ли Вы подобные процедуры? Есть ли в Вашей программе большие локальные массивы?
Цитата(ProfessorBraz @ Apr 17 2008, 15:32)

Содержания стека я в студии не нашел. Может подскажешь, палычь, где оно в студии зарыто?
Стек распалагается в памяти - для просмотра можно использовать окно Memory.
Цитата(ProfessorBraz @ Apr 17 2008, 15:45)

Я же не знаю в какой момент прерывание произойдет. Где этот код распологать?
Делать искуственный вызов процедуры прерывания из программы не надо - достаточно "пошевелить" флаги - само произайдёт. Кстати, Вы ведь умудрились увидеть как-то вот это
Цитата(ProfessorBraz @ Apr 17 2008, 14:31)

При просмотре в Студии в режиме ассемблега, видно что в переходе на прерывание все пакуется в стек, потом также аккуратно распаковывается, и возвращается по команде RTI, но почемуто в старт?
Как? Ну, так сделайте это же ещё раз с контролем стека.
P.S. Последняю цитата, может быть, говорит только о том, что Вы увидели в окне команды push/pop/reti? Тогда, как Вы определили, что именно по reti этого обработчика программа попала на нулевой адрес?