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

 
 
> Структура меню
sind-rom
сообщение Nov 15 2006, 17:36
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 74
Регистрация: 21-10-06
Пользователь №: 21 540



Народ, как Вы делаете меню для своих девайсов? Интересует структура. Столкнулся с проблемой: вывод на дисплей (HD44780 совместимый) меню получается малопонятной и (главное) неприспособленный для добавления новых пунктов меню. Никогда раньше не приходилось делать меню, так что научите smile.gif Может у кого есть каки-нить наработки\библиотеки?
Заранее большое спасибо...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
admiral
сообщение Apr 8 2008, 11:24
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 14-12-07
Из: Беларусь, Гомель
Пользователь №: 33 305



Продолжу тему. У меня возникла необходимость создать грамотное меню с кучей подменю для своего устройства. Облазив этот форум, понял, что наилучший вариант по возможности в дальнейшем расширять меню, по требовательности к памяти... - это micro-menu.
Программирую на CVAVR для МК Мега16
Общий смысл работы этого меню примерно, точнее сказать смутно 05.gif, представляю, поэтому начал потихоньку разбираться что где и как. В интернете по нему информации почти никакой. Нашел сайт создателя с его разработками, но там по теме микроменю ссылка на сайт http://avrfreaks.net/, но туда пускают только зарегеных пользователей. Зарегится мне не получилось. Вот решил тогда здесь спросить у знающих людей.
Предупреждаю заранее, СИ я начал изучать месяц назад, но меню грамотное нужно обязательно, так что не пинайте если что за то, что я взялся за работу не по зубам. По мне так лучше день потерять, потом за пять минут долететь. (с) Как раз поможет углубленно изучит СИ.
В общем так, комментариев там нету. Поэтому первым делом я начал добавлять комментарии. Вот докуда я дошел:
Код
/ MICRO_MENU.H

#ifndef _MENU_H_
#define _MENU_H_

//Тут указываются указатели на функции
typedef void (* FuncPtr) (void);
/*Новый тип FuncPtr - указатель на функцию,
которая ничего не принимает
и не возвращает
*/
typedef void (* WriteFuncPtr) (const char*);
/*Новый тип WriteFuncPtr - указатель на функцию,
входным параметром которой является указатель на строку в ПЗУ,
которая ничего не вовращает
*/
typedef struct PROGMEM {
        void        *Next; //Следующее меню
        void        *Previous; //Предыдущее меню
        void        *Parent; //Родительское меню
        void        *Sibling; //Дочернее меню (вложение)
        FuncPtr     SelectFunc; //Выбор фнкции при выборе меню
        FuncPtr     EnterFunc; //Выбор функции при входе в меню (Применяется после того, как текст меню отображен)
        const char  Text[22]; //Текст меню
} Menu_Item;

//Externs
extern WriteFuncPtr    *WriteFunc; //Переменная-указатель на функцию
extern Menu_Item        Null_Menu; //Переменная типа PROGMEM
extern Menu_Item       *CurrMenuItem; //Переменная-указаетль на данные типа PROGMEM

//Defines and Macros
#define NULL_ENTRY      Null_Menu
#define NULL_FUNC       0
#define NULL_TEXT       0x00

#define PREVIOUS        *((Menu_Item*)pgm_read_word(&CurrMenuItem->Previous))

Вот теперь возник затык на последней строчке.
1. pgm_read_word - то я так понимаю функция из прикрепленного <avr/pgmspace.h> в оригинальном тексте. В примере выше для IAR эта строка отсутствовала, поэтому я тоже ее удалил.
2.Теперь я попытался разобраться для чего эта строка нужна.
В примере использования было так:
Код
SET_MENU(PREVIOUS);

Смотрим что такое SET_MENU
Код
#define SET_MENU(x) \
    MenuChange((Menu_Item*)&x);


Делаем подстановку:
Код
SET_MENU(PREVIOUS); == MenuChange((Menu_Item*)&*((Menu_Item*)(&CurrMenuItem->Previous)));

Вот с этой строкой я не могу разобраться, особенно с сочетанием &*

В общем если есть знающие люди и особенно те, кто уже работал с этим меню, отзовитесь.
Go to the top of the page
 
+Quote Post
sKWO
сообщение Apr 8 2008, 12:16
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата(admiral @ Apr 8 2008, 14:24) *
Код
#define PREVIOUS        *((Menu_Item*)pgm_read_word(&CurrMenuItem->Previous))

Вот теперь возник затык на последней строчке.
1. pgm_read_word - то я так понимаю функция из прикрепленного <avr/pgmspace.h> в оригинальном тексте. В примере выше для IAR эта строка отсутствовала, поэтому я тоже ее удалил.

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


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sind-rom   Структура меню   Nov 15 2006, 17:36
- - junoSynthesizer   присоединяюсь к вопросу. тоже только начал стряпа...   Nov 15 2006, 22:00
- - bodja74   Делал двух-координатное меню. Создаем массив перем...   Nov 15 2006, 22:37
- - SergSit   Почитай тему на этом форуме : Отображение меня на ...   Nov 16 2006, 07:03
- - _Bill   Цитата(sind-rom @ Nov 15 2006, 20:36...   Nov 16 2006, 09:28
- - zltigo   До кучи. Код//------------------------------------...   Nov 16 2006, 09:39
- - Andy_F   Например, вот так: Кодstruct menu_item { unsigned...   Nov 16 2006, 09:42
- - alux   Продолжаем разговор... Считаю, что тема организаци...   Mar 28 2007, 10:21
- - beer_warrior   ЦитатаКак прикрутить данный проект к IAR (v.4.12A)...   Mar 28 2007, 10:44
- - alux   Забыл приложить файл... Я GCC не силен. Сделал сле...   Mar 28 2007, 12:11
- - MRW   Используем это MicroMenu. Вещь просто супер. Легко...   Mar 28 2007, 14:09
- - beer_warrior   ЦитатаError[Pe146]: too many initializer values D:...   Mar 28 2007, 14:29
|- - alux   Цитата(beer_warrior @ Mar 28 2007, 14:29)...   Mar 28 2007, 18:45
|- - Dog Pawlowa   Цитата(alux @ Mar 28 2007, 18:45) Вот лис...   Mar 28 2007, 19:25
|- - alux   Цитата(Dog Pawlowa @ Mar 28 2007, 19:25) ...   Mar 28 2007, 20:01
- - MRW   // Menus define: void KeySC (void); // Прототипы ф...   Mar 28 2007, 20:38
|- - alux   По поводу Micro-Menu... При попытке вызова SET_MEN...   Aug 7 2007, 10:58
- - alux   Первую ошибку можно обойти, указав размер массива ...   Mar 29 2007, 10:28
|- - IgorKossak   Цитата(alux @ Mar 29 2007, 10:28) Первую ...   Apr 1 2007, 22:10
|- - id_Alx   Цитата(alux @ Mar 29 2007, 13:28) Первую ...   Aug 28 2007, 18:13
|- - alux   ЦитатаДля IAR получилось так... У меня не получает...   Sep 27 2007, 15:19
|- - id_Alx   Цитата(alux @ Sep 27 2007, 18:19) В испра...   Oct 2 2007, 07:19
|- - alux   У меня меню заработало. Как теперь сделать, чтобы ...   Oct 3 2007, 18:53
- - Kolia   Выкладываю исходник простого и удобного меню для H...   Mar 30 2007, 13:59
- - beer_warrior   ЦитатаА вот со второй ошибкой не могу справится. В...   Mar 30 2007, 14:44
- - Яrik   Только сильно не ругайте: Решил попробывать код пр...   Jul 13 2007, 14:44
|- - IceS   Цитата(Яrik @ Jul 13 2007, 18:44) но чего...   Jul 16 2007, 21:43
- - Unknown_User   Очень интересная, а главная злободневная для меня ...   Sep 9 2007, 18:18


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

 


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


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