Forth http://www.fforum.winglion.ru/ |
|
Автоматы (FSM) http://www.fforum.winglion.ru/viewtopic.php?f=25&t=3157 |
Страница 1 из 2 |
Автор: | mOleg [ Ср фев 14, 2018 16:42 ] |
Заголовок сообщения: | Автоматы (FSM) |
Вот такая библиотека для реализации автоматов разродилась. Пример в конце текста. source file: fsm_.fts |
Автор: | Hishnik [ Чт фев 15, 2018 11:47 ] |
Заголовок сообщения: | Re: Автоматы (FSM) |
Пытаюсь понять, что тут нового по сравнению с описанием через обычное CASE. |
Автор: | gudleifr [ Чт фев 15, 2018 12:20 ] |
Заголовок сообщения: | Re: Автоматы (FSM) |
Hishnik писал(а): что тут нового по сравнению с описанием через обычное CASE. ТЕМА #74 По большей части, это восстановленная тема этого форума, начавшая с того, что mOleg предложил "именно CASE". |
Автор: | mOleg [ Чт фев 15, 2018 16:16 ] |
Заголовок сообщения: | Re: Автоматы (FSM) |
Hishnik писал(а): Пытаюсь понять, что тут нового по сравнению с описанием через обычное CASE. А с этого я как раз начинал 8) Каждое состояние описывается отдельно, у каждого состояния есть имя (а не номер), большие автоматы внутри CASE структуры тяжело выглядят - очень большое определение, особенно, если граф автомата содержит больше пары сотен узлов. Кроме того, при использовании вектора (а по сути создается вектор-переменная с именем автомата) вход в состояние не занимает времени (практически только косвенный вызов функции), но и переключение в новое состояние тоже занимает немного времени. Кроме того, есть побочный эффект - состояние может быть переопределено неограниченное количество раз. Т.е. решение нагляднее, управляемее, быстрее, синтаксически оформлено, как отдельный механизм. Кроме того, в тех же сях я автоматы реализую аналогично: Код: void (*being)(void); \ объявление автомата void workloop(void) { ... being = stPowerOn; ... while(!restart) { ... being(); ... } } void stPowerOn(void); ... void stPowerOff(void); void stPowerOn(void) { .... being= newState; } аналогично тут: Код: FSM: being
being: stPowerOn .. being: stPowerOff :stPowerOn ... newState ; FSM; stPowerOn : workloop ... RESET being BEGIN ?Restart WHILENOT being REPEAT ; |
Автор: | mOleg [ Чт фев 15, 2018 16:32 ] |
Заголовок сообщения: | Re: Автоматы (FSM) |
да, а еще интересно то, что FSM: Name создает сразу три определения: Name - сам автомат вызываемый (Name) - словарь, куда определяются все состояния Name: - метод позволяющий создавать новые состояния В свою очередь Name: State создает сразу два определения State - переключатель в новое состояние :State - описатель состояния |
Автор: | gudleifr [ Пн фев 19, 2018 12:42 ] |
Заголовок сообщения: | Re: Автоматы (FSM) |
Кстати, вот реальная задача: пара автоматов, вложенных друг в друга - ТЕМА #70, примерно АБЗАЦ #762. Сможет ли кто-нибудь написать на FORTH красивее убогого GW-BASIC? Тем более, избежать этапа программирования на бумажке? Или, как обычно, строим "елочки" и "матрешки" на C++, а потом эмулируем на "FORTH со структурами, исключениями и локальными переменными"? |
Автор: | mOleg [ Пн фев 19, 2018 19:45 ] |
Заголовок сообщения: | Re: Автоматы (FSM) |
gudleifr писал(а): Кстати, вот реальная задача: и вспомнились мне строчки: "так мелко и так много, что прочитал чуть-чуть - не пишут так коряво, когда на веки рвут" Мне лень читать ваши простыни на стороннем ресурсе. Пишите вменяемо здесь. |
Автор: | gudleifr [ Пн фев 19, 2018 20:07 ] |
Заголовок сообщения: | Re: Автоматы (FSM) |
mOleg писал(а): простыни на стороннем ресурсе. А что Вы хотели от реальной задачи? Это же не школьный пример, который кто-то будет для Вас специально причесывать.Кстати "вменяемо" и "здесь" одновременно - это ненаучная фантастика. |
Автор: | _Harry [ Ср авг 14, 2019 12:21 ] |
Заголовок сообщения: | Re: Автоматы (FSM) |
Цитата: Кроме того, в тех же сях я автоматы реализую аналогично: Я тоже последнее время этот способ активно использую. Кстати считал себя "изобретателем" нигде не встречал описания такого способа реализации автоматов. Но для малого количества состояний использую swith() case: классический способ он как то нагляднее особенно если на одну страницу все помещается. |
Автор: | Wlad [ Чт сен 12, 2019 12:05 ] |
Заголовок сообщения: | Re: Автоматы (FSM) |
У Миро Самека (который https://www.state-machine.com ) состояния это - функции/статические методы классов/структур. Правда у него - идеология "активных объектов". Не встречал кто-то такого же в реализациях КА на Форте? |
Автор: | _Harry [ Пт сен 20, 2019 11:12 ] |
Заголовок сообщения: | Re: Автоматы (FSM) |
Wlad писал(а): состояния это - функции/статические методы классов/структур. Так вроде и тема про это. только класcов нет но это же Forth, зачем они нужны? (Мне вот даже жалко стало что воспользоваться кодом не могу на работе только Си.) |
Автор: | Hishnik [ Пт сен 20, 2019 14:44 ] |
Заголовок сообщения: | Re: Автоматы (FSM) |
Эээ... "состояния - это функции"??? Это как минимум требует пояснения. Это предложение узнавать состояние КА вызовами функций? КА - это, к примеру, настольная лампа с сенсорной кнопкой. У нее два состояния - "включено" и "выключено". Но это не функции. |
Автор: | Wlad [ Пт сен 20, 2019 19:29 ] |
Заголовок сообщения: | Re: Автоматы (FSM) |
Hishnik писал(а): Эээ... "состояния - это функции"??? Это как минимум требует пояснения. Это предложение узнавать состояние КА вызовами функций? КА - это, к примеру, настольная лампа с сенсорной кнопкой. У нее два состояния - "включено" и "выключено". Но это не функции. Поясню: переменная состояния представляет собой указатель на функцию. Эта функция - сосредоточие логики обработки входящих событий (через аргумент функции), на основании которых (+ учёта ряда условий) предпринимается решение о (возможной) смене состояния (назначение "хранителю текущего состояния"-указателю на функцию адреса другой функции). В этой же функции есть участки кода для обеспечения вызова кода при "входе" и "выходе" из состояния и вызов "функций-менеджеров" возможных вложенных состояний. Для справки: https://www.state-machine.com/psicc2 |
Автор: | mOleg [ Пт сен 20, 2019 20:31 ] |
Заголовок сообщения: | Re: Автоматы (FSM) |
Wlad писал(а): Поясню: переменная состояния представляет собой указатель на функцию. То есть просто нет переменной, хранящей текущее состояние? Понимаю, как должно работать для одного единственного автомата, а если их пучок? |
Автор: | mOleg [ Пт сен 20, 2019 20:35 ] |
Заголовок сообщения: | Re: Автоматы (FSM) |
_Harry писал(а): Я тоже последнее время этот способ активно использую. Кстати считал себя "изобретателем" :) нигде не встречал описания такого способа реализации автоматов. ну, я тоже не встречал, прижало - пораскинул мыслями 8) (хотя очень подозреваю, что все же кто-то уже давно придумал раньше) Так однозначно удобнее, чем: _Harry писал(а): Но для малого количества состояний использую swith() case: классический способ он как то нагляднее особенно если на одну страницу все помещается. тем более, чем более сложные переходы между состояниями и чем больше их приходится править (расширять). _Harry писал(а): (Мне вот даже жалко стало что воспользоваться кодом не могу на работе только Си.) а я пользую, но для оснастки, отладки, диагностики, в различных утилитарных целях, не касающихся готового изделия, т.к. там требуется, чтобы кроме меня кто-то что-то мог понять. |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |