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

 
 
> Проблемы с отображением меню с mega640 на ЖКИ.
Евгений Верис
сообщение Jan 28 2010, 05:38
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 28-01-10
Пользователь №: 55 102



Добрый день.

Есть такая проблемка.

Структура меню описывается таким способом:

//Структура описывает пункт меню
typedef struct _selection
{
flash unsigned char *mas; // Указатель на название пункта
void (*function)(void); // Указатель на функцию выполняющуюся по нажатии на enter/escape
signed char ent_menu; // Флаг входа 4 бита - обычно ID меню в которое надо войти
signed char esc_menu; // Флаг выхода 4 бита - обычно ID меню в которое надо вернуться
signed char esc_poz; // Флаг выхода на уровень выше - ID пункта вышестоящего меню
unsigned char *var; // Указатель на изменяемую переменную
}SELECTION;

//Структура описывает меню/подменю
typedef struct _menu {
unsigned char id; //Номер меню/подменю
int num_selections; //Количество пунктов данного меню/подменю
flash SELECTION *m; //Указатель на массив пунктов данного меню/подменю
}MENU;

Например, главное меню (корневое):

flash static SELECTION menu_main[]={
// название, функция, ID внутрь, ID назад, ID пункта назад, переменная
// *mas, *function, ent_menu, esc_menu, esc_poz, *var
{X10, 0, MENU_VOLUME, -1, 0, 0},
.................
{X110, 0, MENU_TEMP_SENSOR, -1, 0, 0}
};

X10-110 - названия пунктов меню, вида :
flash unsigned char X10[]={"VOLUME"};
итд.

такими структурами описаны все менюшки/подменюшки.

главное меню имеет такой вид:
flash static MENU menu[] = {
// имя меню, кол-во пунктов в меню, имя структуры меню
// id, num_selections, SELECTION *m
{MAIN_MENU, 11, menu_main}, // основное меню
{MENU_VOLUME, 4, menu_volume}, // меню VOLUME
.............................
{MENU_TEMP_SENSOR, 4, menu_temp_sensor} // меню TEMP SENSOR
};


есть 2 переменные, текущее меню и текущая позиция.
в каждый момент времени мы знаем, в каком меню (номер) и в какой позиции (пункт меню) мы находимся.
а так же знаем - если ent_menu !=-1 - то значит нажав на ентер - можно перейти на уровень ниже
по кнопке ескейп - переходим на уровень выше - если указано esc_menu и esc_poz, если они равны -1 - значит мы в корневом меню, и по кнопке ескейп - выходим из меню.

все замечательно работает, бегает по менюшке с любым уровнем вложенности - у меня максимум 3.
всего главных пунктов - 11, в каждом пункте есть пара тройка подменю + кучка параметров.

но есть трабл.
если мы заходим в последний пункт - menu_temp_sensor - то при выходе из него,
на экран выводится всякая дребедень, куча символов. тоже самое происходит если мы заходим после определенного пункта (кажется 5 или 6 в предпоследнем меню).

первые 9 с половиной пунктов - работают как часы.

при этом, если выводить на экран значения текущего меню/позиции и меню/позиции куда нужно вернуться - все выводится корректно,
в момент перехода происходит какой-то сбой.

видео ролик показывающий все это дело лежит тут -
http://www.sibaudio.com/gluk.avi

причем после этого глюка, если нажать кнопку выхода из меню - выходит корректно, возвращается к дежурному экрану,
и потом снова можно зайти в меню корректно. но кроме последнего пункта.

если нужны еще какие-то исходники переходов, отрисовки - выложу.

заранее спасибо.

компилятор CodeVisionAvr 2.04

после компиляции инфа такая :

Chip: ATmega640
Clock frequency: 16,000000 MHz
Program type: Application
Memory model: Small
Optimize for: Size
(s)printf features: float, width, precision
(s)scanf features: long, width
Promote 'char' to 'int': Yes
'char' is unsigned: Yes
global 'const' stored in FLASH: Yes
8 bit enums: Yes
Enhanced core instructions: Yes
Automatic register allocation: Yes
Smart register allocation: Yes

Build: 1789
12557 line(s) compiled
No errors
2 warning(s)

Bit variables area: 2h to 2h
Bit variables size: 1 byte(s)

Data Stack area: 200h to 5FFh
Data Stack size: 1024 byte(s)
Estimated Data Stack usage: 28 byte(s)

RAM Global variables area: 600h to 638h
RAM Global variables size: 57 byte(s)

Hardware Stack area: 639h to 21FFh
Hardware Stack size: 7111 byte(s)

Heap size: 0 byte(s)

EEPROM usage: 0 byte(s), 0,0% of EEPROM
Program size: 3673 words (7346 bytes), 11,2% of FLASH
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 01:49
Рейтинг@Mail.ru


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