ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
26 апреля
272192 Топик полностью
Vladimir Ljaschko (14.09.2011 22:41, просмотров: 617) ответил mazur на Мне чего-то не хватает. Не могу понять что считать состоянием автомата в обработке меню, а что свести в макрос или подпрограмму. Расскажите, пожалуйста как у вас работает меню.
Не понял вопрос про "свести макрос", но у меня меню работает так. Есть массив данных о пунктах меню, включающий: - текст, выводимый в виде названия (на всех используемых языках) (может быть пусто) - флаг, что нужно очистить экран при первом входе в меню - флаг, что текст нужно выводить при первом попадании в этот пункт меню - флаг, что в этом пункте меню разрешено дистанционное управление по интерфейсу - какие-то еще флаги. - адрес подпрограммы, реализующей функциональность этого пункта меню на основе анализа событий. Подпрограмма ограничена во времени выполнения, как правило меньше 100 мс. Если событий нет, то обычно никакие действия не производятся. Массивы описаны в виде "макросотаблиц", имя функции и название индекса состояния отличаются префиксом,все автоматически разворачивается препроцессором. Состояние автомата - это индекс этого массива, инициализируется после сброса. В зависимости от индекса вызывается нужная подпрограмма. В ней анализируются следующие события: - событие "Новое состояние" - первый вход в этого состояния (стирается экран, выводится название, производятся нужные расчеты, стартуются/завершаются действия исполнительных устройств напрямую и других автоматов) - события нажатия на кнопки (в том числе и виртуальные - автоповтор и комбинации клавиш) - события таймеров (100мс, 250мс, 500мс, 1с, завершение операции с переменной длительностью) В результате анализа событий и сопутствующих переменных состояние автомата может быть изменено. Весь массив линейный, с одним ограничением - все пункты одного подменю должны быть перечислены последовательно. Все подменю определяются вторым массивом, в котором указаны первый и последний индекс первого массива. Редактирование однотипных значений производится в одном пункте меню, для этого все редактируемые значения сведены в свою, третью "макросотаблицу". Всего состояний автомата меню около сотни.