тут, наверное, конфликт ваших знаний и моего невежества :(,
простите, это должен был быть ответ Евгению П
Можно, просто множество состояний будет настолько астрономически большим, что нет практического смысла работать с ним методами для КА.
Забавно, вроде как в состав системы входят: состояния (множество 1), события (множество 2), при этом воздействие события на состояние даёт состояние из множества 1.Параметр время неочевидно присутствует…Но с кнопкой всё равно не понятно.
Ну сама тема: “Конечные автоматы для школьников” звучит как “Счетные палочки для школьников” или “Арабские цифры для школьников”. Все потому что по факту в теории конечных автоматов ничего сверхестественного нет . Просто есть состояние и есть переход. Другой стороны как это просто переложить на железо или на код. Вот здесь и полез хаос и путаница в зависимости кто и как объясняет.
Если например “Конечные автоматы по qwone”. То здесь нужна одна переменная state- состояние и одна функция go( int state)- перейти в это состояние. Вот с помощью их все конечные автоматы и реализуются.
И чё тут забавного? Было бы гораздо забавнее, если бы под воздействием какого-то входного символа система улетала в неизвестное состояние, не входящее в её множество состояний
[quote=“lilik, post:24, topic:12726”]
Забавно, вроде как в состав системы входят: состояния (множество 1), события (множество 2), при этом воздействие события на состояние даёт состояние из множества 1.Параметр время неочевидно присутствует…
[/quote] Ну это скорее современная подача материала такая. Почти как современные учебники для школьников в которых без репетитора никак. Всех надо кормить, а родителям платить. События это “программное прерывание”. А состояние это некоторый комплект переменных отображенных на экране компьютера. И щелкая на экране мышкой мы вызываем событие / “программное прерывание” которое в конце концов обеспечит переход в другое состояние. Здесь надо учесть что в другом состоянии будет другой комплект событий/“программных прерываний” который обеспечит функция перехода из предыдущиго состояния в этот.
Это уже хаос, типа включил движение машинки вперёд и колесо отлетело.
А может так?-состояние это набор текущих значений переменных в скетче, событие это смена некоторых значений, приводящее к смене других значений. Тогда с кнопкой понятно становится - два состояния, два события, но добавляем переменные, учитывающие течение во времени и получаем уже набор псевдофизических состояний-событий для кнопки.
У механической кнопки только ДВА состояния. Нажата и не нажата. Но именно это не всегда и программистам и пользователям нужно. Им нужен Клик, ДаблКлик, Долгое нажатие и так далее. Так что для использования кнопки в программе нужен программный Драйвер кнопки, который можно вставить в программу. А также ко всем Событиям(не к состояниям) подключить пользовательские кода обработки этих событий. С виртуальными кнопками такая же песня.
Речь то о состоянии КА. Событие: переход из “отпущено” в “нажато” может соответствовать переходу в состояние “клик” КА.
В моём автомате : нажатие, нажато, отжатие, отжато, долго нажато. И ещё пара антидребезговых, но они как бы недоступны извне библиотеки. Я щитаю это и есть состояние кнопки, хотя к физическим сигналам пина они отношения вообще не имеют.
Вот в этом проблема теории конечного автомата. Люди путают состояния и события, тем самым запутывая себя и конечный автомат. Да, согласен что буквально как события, так и состояния можно организовать как через переменную, так и через функцию.
Возьмем аппаратное прерывание. Вот оно произошло. Что это ? Состояние или событие. Вроде это событие и надо запустить обработчик этого прерывания. Но если взведем флаг, а потом уже в другом месте обработаем. То это вроде стало состоянием. Раз флаг меняется, то меняется состояние системы. Но все же лучше считать что это событие и упростить построение и понимание системы.
Я читал такое студентам МИПК в Бауманке. Курс им придумал “Основы теории передачи информации” и такое читал ;))
У меня был пример как раз с ПЗУ классическим, именно как на нем сделать конечный автомат. Если ты об этом.
выходы данных замыкаешь на входы адреса - это группа, кодирующая номер состояния. Остальные входы адреса - кодируют внешние сигналы.
Дальше нужно объяснять или уже ясно? На такой схеме с 2764 какой-нить и минимальной обвязкой делается кодовый замок, к примеру. Да любой автомат с не сильно большим числом состояний.
Кстати подумал, что для ТС эта модель и реализация на её основе какого-нибудь кодового замка или сигнализации - конкретный и простейший пример автомата, во всей его первоначальной красе!! Именно спаять, на старой ПЗУ.
И написать полную таблицу: (состояние, вход)->(состояние). Никаких Адруин, а голая ПЗУ и защитная обвязка. МОжно еще защелки сделать…
Вот. Это как раз и есть “на пальцах”. Просто и доходчиво.
Сергея Коломийцева знал?
Мда. Видно склероз подобрался незаметно. Обычно ПЗУ и тактовый регистр сдвига. На таком принципе можно организовать реверсивный цифровой счетчик и разумеется микропроцессор. И да 4004 это и есть обычный конечный автомат на кремнии.
23 года прошло, я даже имена коллег по МИПК плохо помню. В бауманке было ДВА аккредитованных института дополнительного образования. Оба с лицензиями и злейшие конкуренты!
да, именно об этом, когда-то придумал себе такое “упрощенное понятие”, спасибо
ну правильно! Это как тригер защелка, тольно не два состояния, а на сколько угодно и переходы между ними могут быть сложнее. КА, в конечном итоге, аналог большого триггера со множеством состояний. Внешнее воздействие “защелкивает” его в новое состояние, зависящее ИСКЛЮЧИТЕЛЬНО от прошлого состояния и самого воздействия.
Это, собственно абсолютно достаточное и полное описание КА для программиста или для электронщика. Более тонкие вещи интересны, скорее, математику.
Ну здесь Вы не правы. Прежде всего каждый транзисторный каскад это задержка по времени. И переход программированию схемы через КА это повышение быстродействия микросхемы. А так как микросхемы делаются большими сериями, то разработка более скоростных это конкурентное преимущество. В программировании на нижнем уровне тоже важно. Например в графических процессорах программирование через КА графики может тоже ускорить обработку.
ПС: Еще давно в институте мне учителя объясняли что микросхема счетчик на КА быстрее чем на если ее делать на отдельных тактовых триггерах.
А что все ухватились за эти Конечные автоматы? Это же не более чем один из паттернов программирования. Кроме КА существуют и десятки других, а такое впечатление, что некоторые пытаются подогнать любую систему под КА.
Потому что ТС в заголовке темы спросил про КА.
Спросят про ассинхронное, параллельное, функциональное - ответим про них. Беседер?