![]() |
||||
Средства и методы разработки | ||||
| Новая тема Настройки… Мои форумы… Правила | Поиск »» Архив |
| Вернуться в конференцию | Топик полностью |
|
Vit (13.06.2009 15:27, ссылка) , в ответ на Автоматное программирование - ну почему все так тоскливо в реале? автор: Evgeny_CD
Нельзя объять необъятное(С) "Конечные автоматы" это определение из теории алгоритмов и относится именно к алгоритмам, а не непосредственно к технологии их использования при программировании. В то же время термин "автоматное программирование" популяризован в рамках творчества одного г-на (кажется Шалыто) как технология, с математическим обоснованием её эффективности. Не осилил. Также не думаю, что стОит всё в кучу смешивать. я хоть и тоже дал линк на википедию, думаю, что по Вашему линку именно такая куча. Использование на практике описания работы некоего устройства (алгоритма) как конкретного конечного автомата чаще гораздо бОльший геморрой, чем это кажется. Ведь есть ортогональные вещи - синхронные и асинхронные процессы, изоляция задачи и межпроцессное взаимодействие, константы, инициализируемые и неинициализируемые переменные. Точно так же алгоритм может быть представлен в виде дерева и графов. Я использую FSM довольно часто, но для решения конкретных задач, которые сами по себе легко поддаются подобному описанию. ИМХО, ввиду объективных сложностей нецелесообразно описывать все задачи как FSM, а так как многозадачность вроде как норма, то использовать одну отвёртку для разных шлицев как-то не того. Точно так же можно вспомнить ЕСКД, где, например, схемы электрические бывают принципиальными, функциональными, структурными и смешанными - у них разное назначение. А проектирование ПО, ИМХО, должно начинаться с описания требований, а далее с создания спецификации (перечня) программных модулей. Структурированность такого перечня часто приводит к оперированию уже с объектами, при этом действия становятся методами и, как ни странно, часто далее не важен способ описания алгоритма, т.е. вся эта чехарда с UML становится нужна только для моделирования (что само по себе вполне может быть подспорьем при программировании) и/или оформления части документации (например, "алгоритм управления блоком наполнения емкости одоранта в режиме пониженного расхода газа при запрещенном дозировании" и рядом "алгоритм управления блоком наполнения емкости одоранта в режиме среднего расхода газа при разрешенном дозировании при измеряемом уровне протечки"). Так что если для описания взаимодействия контроллера с окружающим миром можно написать строчку "протокол Modbus, карта переменных представлена в Приложении Е", то если этого достаточно, бОльшего не нужно. А для реализации оного в конкретной программе берётся с полочки либа и пишется та же карта и соответствующий набор пользовательских функций. Точно так же не нужно очередной раз описывать релейные, ПИ- и ПИД-регуляторы, если всего-лишь меняются параметры. Опять же не имеет смысла описывать с помощью FSM те же скриптоподобные действия, например, настройка GSM-модема, задание параметров точки доступа, создание GPRS-соединения, отправка данных на первый сервер с использованием поочередно HHTP-get, HTTP-post, SMTP, те же действия для второго сервера, закрытие соединения - хоть и беспроблемно решается на FSM, но такой набор действий настолько очевиден, что разукрупнение не имеет смысла - один раз пишется модуль отправки и определяется набор конфигурационных параметров к нему, затем описание в виде повторяющегося алгоритма больше никому, кроме первоклашки, уже не нужно - только может затруднять чтение и понимание программы/алгоритма. Введение в обиход всяких "иерархических FSM" при этом видится всего-лишь неуклюжей попыткой структурирования задачи. Как у Форда "Вы можете выбрать автомобиль любого цвета, при условии что этот цвет черный"(С) (прошу сильно не пинать, если цитату привёл не точно). Не приживутся базы описания состояний для универсального генератора программ - некому, некогда и не за что этим заниматься. |
Ответы
Развернуть
Приведение всего к FSM - это слишком кардинально даже для меня :) Никто и не думает, чтобы отметить остальные методики. Туже многозадачность и пр. Вопрос в том, чтобы был инструмент, который можно использовать по мере необходимости. (+)- Evgeny_CD(1366 байт, 13.06.2009 15:57)
Я тут краем глаза видел как создаются embedded проги с GSM модемами в Линуксе. Ужаснулся. И ведь работает! (+)- AlexandrY(644 байт, 13.06.2009 23:00)
Чушь, чем-то напоминающая размышления старика хотабыча о мраморном телефоне... Скрипт -- такая же программа. И их можно писать нормально, с проверкой кодов ошибок и т.п. -- если кто-то делает это не нормально -- не показатель. - fk0(21.04.2010 13:26)
Я же говорю - жрецы произносят заклинание ->. И это еще раз подтверждает, что линуху не место во встраиваемых системах. (+)- Evgeny_CD(654 байт, 13.06.2009 23:49, ссылка, ссылка)
Вспомните о кодах возврата - их просто нужно правильно использовать (а не иксепшнами код загаживать). (+)- Vit(487 байт, 13.06.2009 17:05)
Код возврата - это диагностика довольно большоко куска, трактуемого как атом. На практике нужна меньшая гранулярность. - Evgeny_CD(13.06.2009 23:44)
Время человека стоит денег. Если из одной базы "объектов" рожается модель FSM, документация по ней и С исходник - это куда лучше, чем все ручками делать. - Evgeny_CD(13.06.2009 17:11)
к сожалению (или счастью), программирование более творческий процесс, чем заполнение табличек (наблюдал "программирование" Simatic S7). и чаще между идеей и формальным описанием реализации происходит сама реализация. - Vit(13.06.2009 17:17)
Ветно. Просто хочется, чтобы как можно меньше времени уходило на примитивные операции. - Evgeny_CD(13.06.2009 17:18)
FSM как матаппарат повсеместно применяется в компиляторах и парсерах. Скажем при каждой компиляции ядра линукса там попутно находу генерится на C-и, а потом компилируется в exe специальная стэйт-машина для парсинга и переконвертации неких исходников. (+)- AlexandrY(417 байт, 13.06.2009 16:53)
Видео показательное. Без передергивания батарейки в роботе и тут не обошлось :) - she(13.06.2009 21:07)
Однако этот робот-пылесос бегает, чета ищет, даже борется с другим роботом и все написано без всяких идиотских стейт машин. (+)- AlexandrY(415 байт, 13.06.2009 22:44)
Стейт машины - один из инструментов. Хорошо, когда он есть. Плохо, когда его используют не по назначению. Сама теория автоматов велика и могуча, вопрос как всегда в том, что пока не придумали, как ее обернуть в простые и понятные формы. Заслуга Шалыто и (+)- Evgeny_CD(429 байт, 13.06.2009 22:51)
Генератор нафиг не нужен. Невозможно всё сделать на автоматах, равно как и сложно обойтись без. Там где нужно -- рисуется на бумажке и кодируется по технологии приближенной к технологии им. Шалыто. Это из практики. - fk0(16.06.2009 12:58)
Нужен-нужен. Иначе это технология write only. А хотелось бы иметь ремонтнопригодность. - =AlexD=(16.06.2009 16:53)
write-only лечится документацией (в т.ч. и на ватмане A1). Кроме того, очень даже прекрасно и read получается по исходникам, просто писать код нормально нужно, без хакирства. - fk0(16.06.2009 17:21)
Речь идёт о том как облегчить работу, а не о том как нажить геморрой. - =AlexD=(16.06.2009 20:14)
Работающий код написанный "генератором" -- я ещё ни разу в жизни не видел. Код "с геморроем" -- везде вокруг. Фантастика, ага? - fk0(17.06.2009 12:50)
Если бы были нормальные генераторы, не было бы этой темы. (+)- =AlexD=(80 байт, 17.06.2009 13:10)
Для реальных стейт-машин нужна полная определенность входных воздействий и полная определенность свойств исполняющего движка. (+)- AlexandrY(377 байт, 13.06.2009 23:10)
Это да. Особенная радость - когда в процессе выполнения "скриптовых" задач происходит что-то неожиданное, например входящий звонок на модем при инициализации. (+)- she(162 байт, 13.06.2009 16:28)
"скриптовые задачи" вполне пишутся как автоматы. все проблемы -- исключительно в голове аффтара. вон awk просто создан для создания автоматов (там каждая строчка какбы начинается с условия-состояния). в состав enscript входит awk-подобный интерпретатор (+)- fk0(81 байт, 16.06.2009 12:55)
Ну дык для GSM модемов опытные товарищи давно ставят ключик на питание, не довлльствуясь входами сбоса :) Ну и таймер - если за цать секунд модем не пришел в адекватное состояние - сброс. - Evgeny_CD(13.06.2009 16:33)
Ага, была еще байка про то, как один комп треем сидюка жал на сброс другому. Так и живем. - she(13.06.2009 16:43)
О! Вот это "придумка"! - Evgeny_CD(13.06.2009 16:48)
-> - Evgeny_CD(13.06.2009 16:54, ссылка)
Точно. Девайс с парой контактов под установку в отсек 3,5 и радиобрелок - актуально. (+)- she(98 байт, 13.06.2009 17:01)
А если они друг-другу на Reset нажмут - дедлок случится, однако :) И тут без FSM не обойтись :) - Evgeny_CD(13.06.2009 16:51)|
|
Главная | Карта сайта | О проекте | Схемы | Компоненты | Микроконтроллеры | Проекты | Файлообменник | Регистрация | Вебмастер |
|