реклама на сайте
подробности

 
 
> Реализация меню, Что я сделал не так?
maxx™
сообщение Nov 22 2007, 15:49
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 11-11-07
Пользователь №: 32 245



Хочу сделать простенький таймер. Есть at90s8515, индикатор, DS18B20. Время считает и температуру показывает, но вот при прикручивании меню, при воде в это самое меню наблюдаются различные глюки, зачастую с рестартом контроллера.
Исходник меню вот:
http://www.maxx.net.ua/avr/menu.c
Сама програмка:
http://www.maxx.net.ua/avr/main.c

В чем может быть проблема?
Прикрепленные файлы
Прикрепленный файл  aquatimertm.rar ( 14.2 килобайт ) Кол-во скачиваний: 46
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
Dog Pawlowa
сообщение Nov 22 2007, 16:57
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(maxx™ @ Nov 22 2007, 19:49) *
В чем может быть проблема?

Обычная причина в подобных случаях - переполнение стека.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
maxx™
сообщение Nov 23 2007, 16:46
Сообщение #3





Группа: Новичок
Сообщений: 6
Регистрация: 11-11-07
Пользователь №: 32 245



Цитата(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);
}
Go to the top of the page
 
+Quote Post
aag
сообщение Nov 24 2007, 07:13
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 81
Регистрация: 8-04-06
Из: Новосибирск
Пользователь №: 15 939



А код программы точно такойже, как для 16-ой меги? Ничего не меняли?
Go to the top of the page
 
+Quote Post
maxx™
сообщение Nov 24 2007, 15:34
Сообщение #5





Группа: Новичок
Сообщений: 6
Регистрация: 11-11-07
Пользователь №: 32 245



Цитата(aag @ Nov 24 2007, 09:13) *
А код программы точно такойже, как для 16-ой меги? Ничего не меняли?

Вроде ничего не менял, только winavr другой версии был.
Вот к примеру
lcd_puts_p("ok"); работало, теперь работает такая конструкция: lcd_puts_p(PSTR("ok"));
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 12:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01381 секунд с 7
ELECTRONIX ©2004-2016