|
Автоматный подход (SWITCH), Поделитесь опытом использования |
|
|
|
Jul 2 2006, 17:17
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 20-03-05
Пользователь №: 3 533

|
Решил в последнее время освоить более строгие-формальные методы проектирования программ для МК (да и для ПК). Делаю уже третий проект с помощью КА. правда, я использую некую смесь из того, что где-то прочитал и того, что сам придумываю по ходу. При этом всё выполняется на бумаге (проектирование КА), а далее ложится на код, по моим личным предпочтениям.
Результаты положительные, но тут хотелось бы спросить совета профессионалов, каким путём дальше идти, стоит ли использовать кодогенераторы и прочее ПО и т. д.
Интересно было бы узнать, насколько часто микроконтроллерщики используют автоматный подход к проектированию программ. Какое ПО при этом используется (Visual State etc.), каковы результаты (увеличение скорости разработки, надёжности, улучшение взаимопонимания в коллективе разарботчиков).
|
|
|
|
|
 |
Ответов
|
Jul 4 2006, 14:54
|

Частый гость
 
Группа: Свой
Сообщений: 174
Регистрация: 4-11-04
Из: zp.ua
Пользователь №: 1 046

|
Хотел бы пару слов сказать в ответ исходному посту.
Вижуал Стейт пробовал-смотрел. Мне не понравилось. Хотя идея с виду красивая, но есть ряд ограничений, которые не переплюнешь никак. Поэтому в дальнейшем отказался.
Вижуал Стейт предлагает практически замкнутый процесс разработки -- от проектирования и симуляции, до отладки на прототипе или реальном железе. Их символ -- колесо, как отображение идеи замкнутого цикла разработки. Или итеративного цикла.
Сами по себе диаграммы состояний IVS (Iar Visual State) -- это часть стандарта UML, слегка модифицированные под нужды IVS (чего-то добавлено, даже кажется полезного). В итоге получаем проектирование жесткой системы. Наиболее вероятным кандидатом в качестве целевой платформы для генерируемой системы являются ПЛК. На это указывает многое. В частности, так любимый в ПЛК принцип "сначал читаем все входы - затем обновляем все выходы".
Генерируемая система хоть и представляет собой си-код, но на самом деле это табличный жесткозашитый автомат, т.е. руками сгенерированный код не отредактируешь даже при большом желании. Плохо это тем, что IVS нельзя использовать для кодогенерации отдельных разнообразных автоматов для нетипичных с точки зрения IVS задач. Так, например, IVS определяет понятие параллельных автоматов, но желание создать массив однотипных параллельных автоматов в количестве N штук не позволяет, т.е. необходимо как-то выкручиваться с copy-paste и не факт, что вам это удастся. По крайней мере для меня это стало одним из главных препятствий в использовании.
Сам редактор расчитан на большую и вдумчивую работу и несложные автоматы по своей сути. Нащелкивать мышкой сложный автомат -- дело весьма трудоемкое, особенно для тех, кто любит, чтобы было еще и красиво (это как с рисованием схем в OrCad -- как начнешь красоту наводить, так пару часов на это потратить нефиг делать).
В общем, несмотря на красивый фасад и уйму потенциальных возможностей, для областей не связанных с ПЛК использование IVS, особенно на мелких контроллерах (типа АВР) представляется мне неоправданным.
Сам по себе автоматный подход (оно же синхронное программирование -- в западных источниках) мне видится единственным способом писать логику работы. НО! не всего устройства в целом в виде одного огромного автомата, а в виде N количества паралелльных слабозависимых (в идеале независимых вообще) автоматов. А там или ОС применить для жонглирования этими автоматами или просто в один бесконечный цикл их засунуть -- это дело личных пристрастий каждого.
Поэтому с точки зрения делать всю программу на одном жестком конечном автомате или на ОС -- я не стал бы выбирать первое (только если это задача по написанию ПО для открыванию лотка CDROM или миганию лампочек). Для реальных задач лучше использовать россыпь небольших квазипараллельно работающих конечных автоматов.
Сам я ОС до сих пор не пользовался, ибо по сути тщательно спроектированная система в виде набора параллельных автоматов -- это практически тоже самое, что и кооперативная ОС, только памяти жрет еще меньше и ты всегда имеешь полный контроль над процессом. Т.е. каждый раз я делаю примитивную кооперативную карусель, и мне хватает. Из набора сервисов: таймеры, фифо, реже семафоры. Это позволяет обеспечивать максимальную независимость работы разных задач, плюс регулировать насколько часто та или иная задача будет выполнять свою работу. Т.е. deadlock в таком виде невозможен, система работает предсказуемо. Что еще нужно для счастья?
--------------------
Имей мужество пользоваться своим собственным разумом! (с) И.Кант
|
|
|
|
|
Jul 7 2006, 06:45
|
Участник

Группа: Новичок
Сообщений: 20
Регистрация: 1-09-05
Из: Рыбинск
Пользователь №: 8 130

|
Цитата(krdmitry @ Jul 3 2006, 00:34)  ...Есть еще вопрос с достаточно узкой "специализацией" КА-представления алгоритма. Например, ожидание таймера в одном из состояний приходится представлять как несколько состояний (инициализация, ожидание сигнала, останов таймера). Расписывание действий на выходах состояний тоже "отягощает" рисунок... Поэтому ИМХО нужно искать более "современные" и актуальные формы представления управляющих алгоритмов, похожие на КА, но обладающие расширенными возможностями. Есть ли такие? Соответственно, есть вопрос и по оформлению документанции на программу. Вроде, в нашем родном ГОСТе предусматриваются только алгоритмы ("схема программы")... Я использую автоматное программирование на AVR, сразу предупреждаю что программирую на ассемблере. Для реализации автоматной структуры написал несколько макросов и простеньких подпрограммок(которые вызываются макросами). Макросы звучат типа так: 1. СТАРТОВАТЬ_АВТОМАТ_СРАЗУ ИМЯ_АВТОМАТА, ИМЯ_СОСТОЯНИЯ 2. СТАРТОВАТЬ_АВТОМАТ_С_ЗАДЕРЖКОЙ ИМЯ_АВТОМАТА, ИМЯ_СОСТОЯНИЯ, ВЕЛИЧИНА_ЗАДЕРЖКИ 3. ОСТАНОВИТЬ_АВТОМАТ ИМЯ_АВТОМАТА 4. ВЫПОЛНИТЬ_АВТОМАТ ИМЯ_АВТОМАТА 5. ПЕРЕЙТИ_НА_ДРУГОЕ_СОСТОЯНИЕ_СРАЗУ ИМЯ_СОСТОЯНИЯ 6. ПЕРЕЙТИ_НА_ДРУГОЕ_СОСТОЯНИЕ_С_ЗАДЕРЖКОЙ ИМЯ_СОСТОЯНИЯ, ВЕЛИЧИНА_ЗАДЕРЖКИ 7. ОСТАНОВИТЬСЯ 8. ПОВТОРИТЬ_СОСТОЯНИЕ_С_ЗАДЕРЖКОЙ Макросами 1-4 пользуются в любом месте программы. Макросами 5-8 пользуются внутри состояния автомата. С помощью этих макросов реализуется в общем любая автоматная структура (любое количество атоматов, любое количество состояний, вложенные автоматы с любой глубиной вложенности). Даже такие вещи как автомат состоящий из одного состояния  Автоматы могут управлять друг другом. Все задержки отрабатываются каждым автоматом независимо с кратностью единого кванта времени. При этом нет холостых циклов. Документированием в графике стараюсь не заниматься - уходит много времени, к тому же при изменении структуры надо документацию менять. Вместо этого стараюсь максимально комментирвать текст самой программы. Но если все-таки рисую графы (не алгоритмы) то делаю это в Visio. Цитата(bialix @ Jul 4 2006, 18:54)  ...Сам по себе автоматный подход (оно же синхронное программирование -- в западных источниках) мне видится единственным способом писать логику работы. НО! не всего устройства в целом в виде одного огромного автомата, а в виде N количества паралелльных слабозависимых (в идеале независимых вообще) автоматов. А там или ОС применить для жонглирования этими автоматами или просто в один бесконечный цикл их засунуть -- это дело личных пристрастий каждого...
Сам я ОС до сих пор не пользовался, ибо по сути тщательно спроектированная система в виде набора параллельных автоматов -- это практически тоже самое, что и кооперативная ОС, только памяти жрет еще меньше и ты всегда имеешь полный контроль над процессом. Т.е. каждый раз я делаю примитивную кооперативную карусель, и мне хватает. Из набора сервисов: таймеры, фифо, реже семафоры. Это позволяет обеспечивать максимальную независимость работы разных задач, плюс регулировать насколько часто та или иная задача будет выполнять свою работу. Т.е. deadlock в таком виде невозможен, система работает предсказуемо. Что еще нужно для счастья? Так и есть. Куча параллельных автоматов. Фактически многозадачность. Загружаем процессор равномерно - задачи "размазываются" по времени. Последняя программа построенная описанным способом - для полуавтомата сортировки пружин - опрашивает датчики, управляет пневмоцилиндрами, электроприводом, отсчитывает различные задержки, контролирует аварийные ситуации и пр. Реализации могут быть разные смотря что надо - быстродействие, удобство, размер кода. Приведенные макросы реализуют понятную и удобную структуру с коротким кодом, но не самую быструю. Избавившись от возможностей задержек, вложенности и исключив вызовы подпрограмм можно повысить быстродействие но увеличить размер кода. Кому интересно - предлагаю обсудить мою реализацию на ассемблере с целью оптимизировать набор макросов для максимального удобства-быстродействия-размера, может быть на конкретных примерах.
|
|
|
|
Сообщений в этой теме
Lem Автоматный подход (SWITCH) Jul 2 2006, 17:17 Laptop Я использую следующий подход. main выполняется в в... Jul 2 2006, 19:09 vet Да, собственно, выбор-то невелик - или КА, или зад... Jul 2 2006, 19:22 pitt Цитата(vet @ Jul 2 2006, 15:22) ..задачи ... Jul 2 2006, 21:28  krdmitry Цитата(pitt @ Jul 3 2006, 01:28) Цитата(v... Jul 3 2006, 08:22 tag Цитата(vet @ Jul 2 2006, 23:22) Да, собст... Sep 17 2007, 06:17 krdmitry А есть ли еще программы-кодогенераторы, кроме Visu... Jul 2 2006, 20:34 Lem Цитата(krdmitry @ Jul 3 2006, 00:34) А ес... Jul 2 2006, 20:53 tag Цитата(krdmitry @ Jul 3 2006, 00:34) Врод... Jul 10 2006, 15:17 Lem Выбор - понятно.
но интересно узнать именно соотн... Jul 2 2006, 20:41 osnwt Цитата(Lem @ Jul 2 2006, 23:41) возможнос... Jul 3 2006, 09:14 µµC Цитата(Lem @ Jul 3 2006, 00:41) Причём, р... Jul 14 2006, 12:34  osnwt Цитата(µµC @ Jul 14 2006, 15:34) Для mega... Jul 14 2006, 12:43   µµC Цитата(osnwt @ Jul 14 2006, 16:43) Особен... Jul 14 2006, 13:30 _artem_ имхо автомат конечных состояний и ртос это две раз... Jul 3 2006, 09:33 osnwt Цитата(_artem_ @ Jul 3 2006, 12:33) имхо ... Jul 3 2006, 09:44  _artem_ Цитата(osnwt @ Jul 3 2006, 12:44) Цитата(... Jul 3 2006, 09:53   osnwt Цитата(_artem_ @ Jul 3 2006, 12:53) Цитат... Jul 3 2006, 10:51 sensor_ua Посмотрите NesOS - Finite State Machine Operating ... Jul 3 2006, 11:03 osnwt Цитата(sensor_ua @ Jul 3 2006, 14:03) Пос... Jul 3 2006, 11:16  =GM= Еще один пример ОСРВ для МК и ДСП можно посмотреть... Jul 3 2006, 12:37 _artem_ 2 osnwt, в слючае роунд робин можно сделать так чт... Jul 3 2006, 11:26 osnwt Цитата(_artem_ @ Jul 3 2006, 14:26) 2 osn... Jul 3 2006, 11:36  _artem_ ЦитатаЕсли разговор конкретно про jacos, то там пр... Jul 3 2006, 13:10   osnwt Цитата(_artem_ @ Jul 3 2006, 16:10) Цитат... Jul 3 2006, 14:09 bialix вот еще один какбы генератор WhatOS: http://www.st... Jul 3 2006, 12:20 pitt RTOS большая и многогранная тема. Нет и не может б... Jul 3 2006, 15:00 vesago Вперве применил КА когда надо было сделать контрол... Jul 4 2006, 08:13 _artem_ Цитата(vesago @ Jul 4 2006, 11:13) Вперве... Jul 4 2006, 08:43  ig_z Цитата(_artem_ @ Jul 4 2006, 11:43) Вызов... Jul 4 2006, 10:30   _artem_ Цитата(ig_z @ Jul 4 2006, 13:30) Цитата(_... Jul 4 2006, 11:22    bialix Цитата(_artem_ @ Jul 4 2006, 14:22) Visua... Jul 4 2006, 14:34     _artem_ Цитата(bialix @ Jul 4 2006, 17:34) Цитата... Jul 4 2006, 15:16      bialix Цитата(_artem_ @ Jul 4 2006, 18:16) Цитат... Jul 4 2006, 17:10  _Bill Цитата(_artem_ @ Jul 4 2006, 11:43) Вызов... Jul 4 2006, 11:21  Kirill Frolov Цитата(_artem_ @ Jul 4 2006, 12:43) Вызов... Sep 16 2007, 14:22   Dog Pawlowa Цитата(Kirill Frolov @ Sep 16 2007, 17:22... Sep 16 2007, 19:32   singlskv Цитата(Kirill Frolov @ Sep 16 2007, 18:22... Sep 16 2007, 20:16 white.wind Возможно полезным будет ресурс на тему http://soft... Jul 4 2006, 08:24  bialix Цитата(Crystaly @ Jul 7 2006, 09:45) Цита... Jul 7 2006, 13:04   krdmitry Цитата(bialix @ Jul 7 2006, 17:04) Неправ... Jul 7 2006, 19:34    Lem Цитата(krdmitry @ Jul 7 2006, 23:34) Цита... Jul 7 2006, 19:56    bialix Цитата(krdmitry @ Jul 7 2006, 22:34) Цита... Jul 10 2006, 09:45   Crystaly Цитата(bialix @ Jul 7 2006, 17:04) У вас ... Jul 10 2006, 06:13    bialix [quote name='Crystaly' date='Jul 10 20... Jul 10 2006, 09:58 _artem_ Ну думаю, что скорее всего осязание подвело Вас иб... Jul 4 2006, 17:26 CD_Eater Цитата(bialix @ Jul 4 2006, 18:54) Сам по... Jul 6 2006, 21:54 osnwt Цитата(CD_Eater @ Jul 7 2006, 00:54) Имхо... Jul 6 2006, 22:14  bialix Цитата(osnwt @ Jul 7 2006, 01:14) Цитата(... Jul 7 2006, 05:57 Evgeny_CD Может кому пригодится
****************************... Jul 10 2006, 07:25 bialix Перепишем алгоритм светофора в терминах классическ... Jul 10 2006, 10:16 Tran Раньше уже была тема о КА - http://electronix.ru/f... Jul 10 2006, 11:27 bialix По поводу диаграмм конечных автоматов в нотации UM... Jul 11 2006, 05:36 sensor_ua Cегодня такая вот прелесть попалась - 4 макроса дл... Jul 11 2006, 18:22 sensor_ua ЦитатаВо-первых оптимизирующий компилятор заменяет... Sep 16 2007, 17:20 sansnotfor Вот перевод упомянутой здесь статьи о конечных авт... Mar 24 2011, 00:24 kovz могу посоветовать вот это http://www.state-machine... Mar 28 2011, 13:15
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|