Цитата(tolik_zp @ Jan 24 2007, 12:12)

вот только что могло съесть 16 уровней стека - не понятно.
рано обрадовался... не помогло
Ну прерывание и сьело. Это обсуждалось не один раз, поищите поиском.
причина в том что функция должна быть описана в том же модуле, или в теле прерывания, как у вас.
кроме того иногда компилятору нужно указать чтобы он её встроил
Код
#pragma vector = TIMER1_COMPB_vect
#pragma inline = forced
__interrupt void COMPB(void)
{
}
Но и этого иногда мало, чтобы он начал инлайнить ему нужно выставить оптимизацию.
иначе он будет сохранять все рабочие регистры, а их немало.
попробуйте отладить в S-CPY, или в AVR-Studio (выходной файл ubrof8)