Цитата(Dog Pawlowa @ Nov 22 2007, 18:57)

Обычная причина в подобных случаях - переполнение стека.
Таки где-то с указателями я накосячил. Точно помню что год назад на Atnega16 это работало.
В общем рабочая функция для показа меню в моем случае, если кому интерестно:
void test(MP p, int n)
{
void (*fppin)(int);
void (*fpp)(void);
uint16_t addr;
lcd_clrscr();
tempMenu = pgm_read_word_near(&(p->keys[n]));
if (pgm_read_word_near(&(tempMenu->keys[0])) == &MenuNull) {
fpp = pgm_read_word_near(&(tempMenu->fp));
fpp();
fppin = pgm_read_word_near(&(p->fpin));
fppin(0);
}
else{
if (CurMenu == tempMenu) {
fpp = pgm_read_word_near( (uint16_t) & (CurMenu->fp) );
fpp();
fppin = pgm_read_word_near( (uint16_t) & (CurMenu->fpin) );
fppin(0);
}
else{
CurMenu = tempMenu;
fppin = pgm_read_word_near(&(tempMenu->fpin));
if (fppin != NULL){
fppin(1);
}
}
}
lcd_gotoxy(0,1);
lcd_puts(lcd_temp);
strcpy_P(&lcd_temp, pgm_read_word_near((uint16_t)&(CurMenu->str1)));
lcd_gotoxy(0,0);
lcd_puts(lcd_temp);
}