реклама на сайте
подробности

 
 
> Автоматный подход (SWITCH), Поделитесь опытом использования
Lem
сообщение Jul 2 2006, 17:17
Сообщение #1


Участник
*

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



Решил в последнее время освоить более строгие-формальные методы проектирования программ для МК (да и для ПК). Делаю уже третий проект с помощью КА. правда, я использую некую смесь из того, что где-то прочитал и того, что сам придумываю по ходу. При этом всё выполняется на бумаге (проектирование КА), а далее ложится на код, по моим личным предпочтениям.

Результаты положительные, но тут хотелось бы спросить совета профессионалов, каким путём дальше идти, стоит ли использовать кодогенераторы и прочее ПО и т. д.

Интересно было бы узнать, насколько часто микроконтроллерщики используют автоматный подход к проектированию программ. Какое ПО при этом используется (Visual State etc.), каковы результаты (увеличение скорости разработки, надёжности, улучшение взаимопонимания в коллективе разарботчиков).
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
bialix
сообщение Jul 4 2006, 14:54
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 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 в таком виде невозможен, система работает предсказуемо. Что еще нужно для счастья?


--------------------
Имей мужество пользоваться своим собственным разумом! (с) И.Кант
Go to the top of the page
 
+Quote Post
Crystaly
сообщение Jul 7 2006, 06:45
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 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 пользуются внутри состояния автомата.
С помощью этих макросов реализуется в общем любая автоматная структура (любое количество атоматов, любое количество состояний, вложенные автоматы с любой глубиной вложенности). Даже такие вещи как автомат состоящий из одного состояния smile.gif Автоматы могут управлять друг другом. Все задержки отрабатываются каждым автоматом независимо с кратностью единого кванта времени. При этом нет холостых циклов.

Документированием в графике стараюсь не заниматься - уходит много времени, к тому же при изменении структуры надо документацию менять. Вместо этого стараюсь максимально комментирвать текст самой программы. Но если все-таки рисую графы (не алгоритмы) то делаю это в Visio.

Цитата(bialix @ Jul 4 2006, 18:54) *
...Сам по себе автоматный подход (оно же синхронное программирование -- в западных источниках) мне видится единственным способом писать логику работы. НО! не всего устройства в целом в виде одного огромного автомата, а в виде N количества паралелльных слабозависимых (в идеале независимых вообще) автоматов. А там или ОС применить для жонглирования этими автоматами или просто в один бесконечный цикл их засунуть -- это дело личных пристрастий каждого...

Сам я ОС до сих пор не пользовался, ибо по сути тщательно спроектированная система в виде набора параллельных автоматов -- это практически тоже самое, что и кооперативная ОС, только памяти жрет еще меньше и ты всегда имеешь полный контроль над процессом. Т.е. каждый раз я делаю примитивную кооперативную карусель, и мне хватает. Из набора сервисов: таймеры, фифо, реже семафоры. Это позволяет обеспечивать максимальную независимость работы разных задач, плюс регулировать насколько часто та или иная задача будет выполнять свою работу. Т.е. deadlock в таком виде невозможен, система работает предсказуемо. Что еще нужно для счастья?


Так и есть. Куча параллельных автоматов. Фактически многозадачность. Загружаем процессор равномерно - задачи "размазываются" по времени.

Последняя программа построенная описанным способом - для полуавтомата сортировки пружин - опрашивает датчики, управляет пневмоцилиндрами, электроприводом, отсчитывает различные задержки, контролирует аварийные ситуации и пр.

Реализации могут быть разные смотря что надо - быстродействие, удобство, размер кода. Приведенные макросы реализуют понятную и удобную структуру с коротким кодом, но не самую быструю. Избавившись от возможностей задержек, вложенности и исключив вызовы подпрограмм можно повысить быстродействие но увеличить размер кода.
Кому интересно - предлагаю обсудить мою реализацию на ассемблере с целью оптимизировать набор макросов для максимального удобства-быстродействия-размера, может быть на конкретных примерах.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 9th August 2025 - 09:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01452 секунд с 7
ELECTRONIX ©2004-2016