Карбофос идет означенным курсом. У нормальных прошу помощи продолжить разбираться с меню. Собственно вот в таком виде у меня сейчас выглядит файл MicroMenu.c Спойлер
/** This is used when an invalid menu handle is required in * a \ref MENU_ITEM() definition, i.e. to indicate that a * menu has no linked parent, child, next or previous entry. */ Menu_Item_t PROGMEM NULL_MENU = {0};
/** \internal * Указатель на общую функцию отображения текста меню * обратный вызов, для отображения настроенного текста пункта меню * если не задана функция отображения, специфичная для меню * в пункте меню выбора. */ static void (*MenuWriteFunc)(const char* Text) = NULL;
/** \internal * Указатель на текущий выбранный пункт меню. */ static Menu_Item_t* CurrentMenuItem = &NULL_MENU;
которая обращается к обработчику собственно кнопок skan_key(), из которого и получает значение нажатой кнопки. Вопрос собственно в том, правильно ли я понимаю последовательность необходимых событий? Потому, что у меня получается при первом же обращении к menu_RUN() я получаю вывод элемента меню, а затем из обработчика кнопок возвращается значение нажатой кнопки. И я понимаю, что не понимаю. Или мне надо сначала получить код нажатой кнопки, а уже потом вызывать обработку меню? Но все равно сначала произойдет обращение к Menu_1, а затем в swith будет выбран переход по кнопке
Пасаны, зачем ругаетесь? На деле, чтобы понять работу механизма менюшки, надо изучить в языке Си тему про указатели и массив указателей и указатели на функции. И после этого все премудрсти раскроются. Менюшки как обычно делаются то. Для кнопок создается массив указателей на функции, реализующие действия по нажатиям. И в зависимости от текущего режима меню каждой кнопке присваивается определенный указатель на исполняемую функцию. Навигация по пунктам менюшки - это одна группа указателей. Изменение параметра в пункте менюшки - другая группа указателей.
To Land. MicroMenu это структура данных. За счёт макросов стало проще создавать развитое меню. Не более. Не менее. Дальше идёт организация программных модулей. Взаимосвязи. Пусть у нас дисплей. Кнопочки. Ну и что то там делать. Давай посмотрим на программу как на конечный автомат. С подчинёнными КА.
Main: Proc_Device (); // целевой модуль. Proc_Button (); // обработка кнопок. Proc_Info_Service (); // модуль обработки кодов кнопок. Обработка меню. Вывод в буфер дисплея. Именно в этом модуле используется MicroMenu. Proc_Display (); // модуль аппаратной части дисплея.
Все эти обработчики - конечные автоматы. Пусть Proc_Info_Service в каком то состоянии. В этом состоянии в том числе ждём нажатия кнопки или сочетание, чтобы войти в меню. Есть условие входа в меню? Установка состояния меню. В этом состоянии уже ждём свой набор кодов кнопок. Пусть, скажем, установка часов.
Ну и так далее. В каждом состоянии используются callback-и MicroMenu. Plus, Minus, Prev, Next, Enter.
Последний раз редактировалось Demiurg Пн апр 04, 2022 03:13:41, всего редактировалось 2 раз(а).
Пасаны, зачем ругаетесь? На деле, чтобы понять работу механизма менюшки, надо изучить в языке Си тему про указатели и массив указателей и указатели на функции. И после этого все премудрсти раскроются. Менюшки как обычно делаются то. Для кнопок создается массив указателей на функции, реализующие действия по нажатиям. И в зависимости от текущего режима меню каждой кнопке присваивается определенный указатель на исполняемую функцию. Навигация по пунктам менюшки - это одна группа указателей. Изменение параметра в пункте менюшки - другая группа указателей.
Там будет два подраздела - первый сами "векторные кнопы", второй блок взаимосвязи программ, обеспечивающих "вкладки устройств". Под ассемблером заметно удобнее ("микровиндовс" с иконками и под ассемблером я уже делал viewtopic.php?p=1830978#p1830978 viewtopic.php?p=2151072#p2151072 viewtopic.php?p=2198317#p2198317 ) и кода поменьше. А вот под СИ/С++ это таки досада - объем кода весьма огорчает (правда то адуринья - но тот же GCC). Уровень "векторно-программируемых кноп" при одном "устройстве"(тестовые светики) вот тут viewtopic.php?p=4208592#p4208592 остается проработать "магазин устройств" для нескольких задач, у каждой из которых свои "менюшки"/алгоритмы управления для кнопок/комбинаций кноп. Для СИ/С++ главная головная боль в таком случае именно в корректной "разноске" задач каждого устройства по своим файлам, поскольку текста там весьма моного...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 38
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения