|
State machine, Приведите примеры реализации |
|
|
|
Feb 2 2005, 12:29
|
Группа: Новичок
Сообщений: 10
Регистрация: 6-07-04
Пользователь №: 265

|
Где можно почитать по теме/посмотреть примеры на С, асме
|
|
|
|
|
 |
Ответов
|
Mar 5 2009, 06:54
|
Частый гость
 
Группа: Участник
Сообщений: 120
Регистрация: 16-02-08
Пользователь №: 35 087

|
Diz спасибо за ссылку на книги. В сети также есть «Samek Miro, Practical UML Statecharts in C/C++. 2008». Diz писал: Цитата Другое дело – визуализация уже написанного на низком уровне конечного автомата Нельзя ли в этом месте поподробней?! Задачи по дискретным системам автоматики я решал в основном по методе/идее изложено в книге «Юдицкий С.А. Проектирование дискретных систем автоматики. 1980». На русском искал, но больше ничего не встречал по этой теме. Встречались книги просто про конечные автоматы, без приложений к автоматике. Но там одна математика. Вот как я решал задачки по автоматике: по методе вначале рисовал конечный автомат (графы с переходами) в пакете Stateflow от Matlab, затем проверял логику работы автомата моделируя различные состояния, далее записывал граф в виде уравнений/формул (вручную на бумажке), оптимизировал (вручную на бумажке) если требовалось конечный автомат с применением методов дискретной математики. Потом формулы рисовал в виде релейно-контакторной схемы (или функционально-логической схемы – триггеры, или, и, не), писал программу на Step7 (софт для программирования логических контроллеров Siemens) или на CX-Programmer (софт плк Omron) и прогонял логику работы с использованием симулятора для этих контроллеров. Применяя эту методу к нескольким различным задачам, убедил себя (возможно зря) что самое главное для любой задачи по автоматике на плк это нарисовать правильно конечный автомат (графы с переходами) и проверить его работу средствами моделирования – все остальное дело техники, рутинный труд, все можно делать по одному шаблону/правилам, выключив мозг, нужно только время. Хотел даже весь этот процесс автоматизировать и написать автоматический генератор из графов всех этих формул и схем. Но потом подумал, что не надо горячиться: наверняка все это давным-давно уже сделано кем-то. Теперь вот вижу что на языке Си IAR реализует этот подход в VisualState, Telelogiс, великий ученый Шалыто А. А. и его друзья. Вопросы: 1) Какие инструменты для моделирования/визуализации абстрактного конечного автомата есть кроме VisualState, Stateflow? Кто чем пользуется, опишите пожалуйста и поделитесь впечатлениями. 2) Какие инструменты для визуализация/моделирования/отладки уже написанного на языке С алгоритма есть?! Если применительно к мк AVR: в Proteus если загнать hex файл – не видно кода на Си и видны только входы/выходы с мк, при отладке в AVRStudio – код на Си виден, но не наглядно – нет временных диаграмм. И еще: может есть другие инструменты, без приложениям к мк?! 3) Есть ли что-нибудь из книг наподобие Miro Samek на русском для Cи?! TMX писал Цитата Про реализацию напишу позже Ждем, интересны детали – уверен, что каждый по-разному генерирует код из графов. Diz писал Цитата Если интересно, могу рассказать и про вариант с иерархией Интересно все и с иерархией и без. Если это возможно – то с простыми примерами, постановка задачи, с графом на 3-4 состояния, с кодом и с комментариями, желательно на Си для микроконтроллеров. Все в форум не войдет – может быть в rar(е) куда-нибудь выложите. Спасибо.
Сообщение отредактировал Владимир_2010 - Mar 5 2009, 07:17
|
|
|
|
|
Mar 5 2009, 15:17
|
Частый гость
 
Группа: Свой
Сообщений: 100
Регистрация: 19-01-05
Из: Москва
Пользователь №: 2 064

|
Цитата(Владимир_2010 @ Mar 5 2009, 10:54)  Интересно все и с иерархией и без. Если это возможно – то с простыми примерами, постановка задачи, с графом на 3-4 состояния, с кодом и с комментариями, желательно на Си для микроконтроллеров. Все в форум не войдет – может быть в rar(е) куда-нибудь выложите. Спасибо. C для микроконтроллеров не бывает. Потому-то он так популярен, что где алгоритм не запусти, если стандарту соответствует, то работать будет. К сожалению, на русском языке можно почитать Шалыто и Парондажанова. На английском есть пяток книг, но там самые азы - только Самек предлагает интересную реализацию. Если нужно протокол сваять, то можно взять реализацию COCO/R для С и написать в L1 грамматике правила обработки, там генерится автомат, работает очень быстро. Правила обработки распознанных пакетов тоже удобно описывать автоматом, но на другом уровне. Продолжаю про автоматы - светофор как я думаю, вы и сами создать сможете, достаточно будет одного состояния. Простейшая реализация: состояния автомата нумеруются. пишется функция, в которой выбирается текущее состояние, в этом состоянии опрашиваются условия перехода в другое состояние. функция периодически вызывается. Код enum (RED, GREEN, YELLOW);
static char automaton_state = RED;
void super_auto(void) { switch (automaton_state) { case RED: if (timer_flag) { output_control(RED_LAMP, OFF); output_control(GREEN_LAMP, ON); start_timer (GREEN_DELAY); automaton_state = GREEN; } break; case YELLOW: ... ... } } преимущества: просто и понятно, минимальное использование стека, что для процессоров HOLTEK, например, весьма важно. недостатки: если состояний много, то они могут перебираться долго. На самом деле здесь помог бы переход по изменяемой метке, типа GOTO STATE, но в С такого нет. есть несколько модернизированных реализаций такого типа.
|
|
|
|
|
Mar 5 2009, 15:38
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(TMX @ Mar 5 2009, 18:17)  недостатки: если состояний много, то они могут перебираться долго. На самом деле здесь помог бы переход по изменяемой метке, типа GOTO STATE, но в С такого нет. есть несколько модернизированных реализаций такого типа. Позволю себе немного поправить Вас: С недавних пор реализация оператора switch() отдана на откуп оптимизатору, т.е если структура приводится к таблице переходов - никакого перебора не будет. За таким подходом - будущее. В принципе, компиляторы смогут даже патчить входные значения, например Код switch(state)
{
case 1:
case 2:
case 14:
case 15:
} Что мешает в "рваных" вариантах и вычислять адрес в таблице перехода по какому-нибудь вспомогательному алгоритму? По поводу вычисляемого goto - в гнусях такая фича ведь есть и давно. Если она войдет в "скрижали"...
|
|
|
|
|
Mar 5 2009, 17:09
|
Частый гость
 
Группа: Свой
Сообщений: 100
Регистрация: 19-01-05
Из: Москва
Пользователь №: 2 064

|
Цитата(_Pasha @ Mar 5 2009, 18:38)  Позволю себе немного поправить Вас:
С недавних пор реализация оператора switch() отдана на откуп оптимизатору, т.е если структура приводится к таблице переходов - никакого перебора не будет. За таким подходом - будущее. В принципе, компиляторы смогут даже патчить входные значения, например Встречал такое в аппнотах для PIC. Но это не бесплатно: таблица переходов тоже место занимает, кроме того, если вычисляемое значение, то компилятор может пустыми операциями забивать место. Реально проблема встает в дешевых контроллерах, где мало памяти, стека, скорости и т.п. или при реализации автомата в обработчике прерываний. Чтобы не полагаться на компилятор используются модернизированные методы: выше упоминалась ссылка http://www.embedded.com/2000/0012/0012feat1.htmтам Martin Gomez вручную забивает таблицу переходов: http://i.cmpnet.com/embedded/gifs/2000/001...t1_listing1.gifНедостатки: во-первых, надо записывать в трех местах и легко ошибиться. Во-вторых, вообще не понятно, зачем такая громоздкая реализация: состояние храниться в виде номера, функции и указателя на функцию. по номеру выбирается ссылка на функцию состояний и вызывается сама функция. Реализация требует и память и стек. Гораздо проще хранить состояние в виде ссылки на функцию. Память не используется, стек используется. Ошибиться при переходе сложнее. Цитата(Diz @ Mar 5 2009, 19:55)  Что касается визуализации, то я имел в виду следующее. Автомат описывается на С. Перед компляцией запускается утилита, которая парсит C-файл, находит все, относящееся к автомату - состояния, события, переходы, иерархию - после чего рисует красивый statechart. Который можно окинуть взглядом и убедиться, что все в порядке. Вот, для примера Pelican (светофор) от Самека: [attachment=30421:pelican.pdf] не слышал о таком, есть программа, которая flowchart генерирует. Писать программу без картинки - если получается, тогда зачем картинка?
|
|
|
|
|
Mar 5 2009, 17:50
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(TMX @ Mar 5 2009, 20:09)  там Martin Gomez вручную забивает таблицу переходов no comment  Цитата в виде номера, функции и указателя на функцию. по номеру выбирается ссылка на функцию состояний и вызывается сама функция. Реализация требует и память и стек.
Писать программу без картинки - если получается, тогда зачем картинка? 1. А что? Дорого? Зато может способствовать уменьшению количества функций 2.Например, для повышения уровня языка реализации до проблемно-ориентированного http://www.citforum.ru/internet/xml/graphml/
|
|
|
|
|
Mar 6 2009, 07:35
|
Частый гость
 
Группа: Свой
Сообщений: 100
Регистрация: 19-01-05
Из: Москва
Пользователь №: 2 064

|
Цитата(_Pasha @ Mar 5 2009, 20:50)  no comment  Возможно, я не совсем понятно выразился - Gomez забивает не всю таблицу переходов автомата, а только одномерный массив jump table, указателей на функции состояний. Там в самом начале листинга можно ее увидеть. В любом случае это не дает преимуществ по сравнению с прямым присвоением: Код void(*state_pointer)(void) = RED_state; void main (void) { while(1) { state_pointer(); } }
void RED_state (void) { if (timer_flag) { output_control(RED_LAMP, OFF); output_control(GREEN_LAMP, ON); start_timer (GREEN_DELAY); state_pointer = GREEN_state; return; } if (button_flag) ...................... } Преимущества: работает быстро, фактически как вычисляемое GOTO Недостатки: требует стек для вызова функций, при реализации в прерываниях вызова по ссылке компилятор обычно сохраняет весь контекст, это долго и требует много стека. По поводу объема: в 8-битных процессорах если указатель занимает 2 байта, то каждое присвоение требует 2 команды ассемблера. Соответственно для автомата на 50 состояний и 150 переходов потребуется 300 команд в ПЗУ (600Б для AVR), для switch с переменной состояния типа char потребуется 300Б ПЗУ на переходы, для Gomez-технологии потребуется 300Б на переходы и 100Б на jump_table, итого 400Б. Для 16-ти и 32-х битных объем switch и присвоения указателей практически одинаков, а для Gomeza все равно дополнительно требуется место для jump table. Цитата 1. А что? Дорого? Зато может способствовать уменьшению количества функций 2.Например, для повышения уровня языка реализации до проблемно-ориентированного http://www.citforum.ru/internet/xml/graphml/1. За счет чего? C использованием switch вообще одна функция. 2.Обычно проблему снаала описывают, а потом реализуют. если еще есть интерес, могу продолжить про реализации...
|
|
|
|
|
Mar 10 2009, 13:42
|
Частый гость
 
Группа: Свой
Сообщений: 100
Регистрация: 19-01-05
Из: Москва
Пользователь №: 2 064

|
Недостатки прямого присваивания значения переменной состояния, типа Код state = NEW_state в том, что при большом количестве ветвлений можно случайно пропустить присваивание. Одним из методов контроля на этапе компиляции является следующий: функция состояния возвращает значение следующего состояния Код void main (void) { static char state = STATE_X; while(1) { state = state_function(state); } }
char state_function (char state) { switch(state) { case STATE_X: if (event) { return STATE_Y; } else return STATE_X; case STATE_Y: ... case STATE_Z: ... } } кроме некоторого контроля за присваиванием, такой подход не дает никаких премуществ. Просто на практике не всегда бывает возможно обеспечить полноту тестов.
|
|
|
|
Сообщений в этой теме
sat State machine Feb 2 2005, 12:29 bialix Сайты:
http://is.ifmo.ru
http://softcraft.ru - раз... Feb 2 2005, 12:41 -Tумблер- Цитата(sat @ Feb 2 2005, 15:29)...посмотреть ... Feb 3 2005, 12:02 ALys 1. IAR VisualSTATE - в пакете примеры (под разные ... Feb 3 2005, 15:52 ig_z Цитата(ALys @ Feb 3 2005, 18:52)2. TS Control... Feb 4 2005, 12:44  sat Что то не ставится на ХР. Или это аддон к чему - ... Feb 7 2005, 11:50   maegg Может коротенько объясните, зачем это нужно и в ка... Feb 7 2005, 13:17    vet Цитата(maegg @ Feb 7 2005, 16:17)Может короте... Feb 7 2005, 19:54  ALys Что то не ставится на ХР. Или это аддон к чему - ... Feb 8 2005, 13:07 basileus SWITCH MACRO
local MYP
CLR ZH
ADZ (MYP>>1)... Feb 17 2005, 12:50 Tran Уважаемые, подскажите, пожалуйста, среды разработк... Sep 9 2005, 09:30 BVU Можно почитать теорию графов, там заложен базовый ... Sep 9 2005, 11:20 Sergu Вот хорошие объяснения с примерами есть:
State-O... Sep 12 2005, 03:27 TMX Код/**********************************************... Sep 12 2005, 10:29  Tran Этот код Вы наверняка писали руками. А есть ли про... Sep 12 2005, 11:14   TMX Цитата(Tran @ Sep 12 2005, 14:14)Этот код Вы ... Sep 15 2005, 16:34 lolikandr Если интересует интересный инструмент, то посмотри... Sep 13 2005, 09:35 Владимир_2010 Применение теории конечных автоматов к программиро... Mar 4 2009, 12:54 TMX Цитата(Владимир_2010 @ Mar 4 2009, 16:54)... Mar 4 2009, 17:31 Diz Рекомендую ознакомиться с реализацией иерархически... Mar 4 2009, 17:33 _Pasha Цитата(Diz @ Mar 4 2009, 20:33) Рекоменду... Mar 4 2009, 18:20  Alex B._ Цитата(_Pasha @ Mar 4 2009, 21:20) УПС. Т... Mar 4 2009, 21:41 TMX Цитата(Владимир_2010 @ Mar 5 2009, 10:54)... Mar 5 2009, 14:29    Diz Цитата(TMX @ Mar 5 2009, 20:09) не слышал... Mar 5 2009, 17:31      _Pasha Цитата(TMX @ Mar 6 2009, 10:35) если еще ... Mar 6 2009, 13:42 _Pasha А что-нибудь есть в ту же тему, но с текстовым вво... Mar 5 2009, 14:35 Diz Что касается визуализации, то я имел в виду следую... Mar 5 2009, 16:55 Diz Наверное, jumptable может быть полезен для сохране... Mar 6 2009, 13:20 TMX Цитата(Diz @ Mar 6 2009, 16:20) Наверное,... Mar 6 2009, 14:35  Dog Pawlowa Цитата(TMX @ Mar 6 2009, 18:35) сомнитель... Mar 10 2009, 16:14   TMX Цитата(Dog Pawlowa @ Mar 10 2009, 19:14) ... Mar 10 2009, 16:57    Dog Pawlowa Цитата(TMX @ Mar 10 2009, 20:57) с первым... Mar 10 2009, 17:36  Diz Цитата(TMX @ Mar 6 2009, 17:35) сомнитель... Mar 11 2009, 08:24   TMX Цитата(Diz @ Mar 11 2009, 11:24) Пример в... Mar 11 2009, 09:06    Dog Pawlowa Цитата(TMX @ Mar 11 2009, 12:06) то есть,... Mar 11 2009, 10:12     TMX Цитата(Dog Pawlowa @ Mar 11 2009, 13:12) ... Mar 11 2009, 13:22      _Pasha Цитата(TMX @ Mar 11 2009, 17:22) Тестиров... Mar 11 2009, 13:45      Dog Pawlowa Цитата(TMX @ Mar 11 2009, 17:22) А вот на... Mar 11 2009, 13:46       TMX Цитата(Dog Pawlowa @ Mar 11 2009, 16:46) ... Mar 12 2009, 12:14        Dog Pawlowa Цитата(TMX @ Mar 12 2009, 15:14) К пример... Mar 13 2009, 09:21         TMX Цитата(Dog Pawlowa @ Mar 13 2009, 12:21) ... Mar 13 2009, 10:07          Dog Pawlowa Цитата(TMX @ Mar 13 2009, 14:07) Просто м... Mar 13 2009, 14:59           _Pasha Цитата(Dog Pawlowa @ Mar 13 2009, 17:59) ... Mar 13 2009, 15:21           TMX Цитата(Dog Pawlowa @ Mar 13 2009, 17:59) ... Mar 13 2009, 16:08            _Pasha Цитата(TMX @ Mar 13 2009, 19:08) Если авт... Mar 13 2009, 16:23             TMX это я показал round-robin с постоянным приоритетом... Mar 13 2009, 16:55              _Pasha Цитата(TMX @ Mar 13 2009, 20:55) Вопрос в... Mar 13 2009, 17:14 -=TRO=- Внутри программируемой логики собирают микропроцес... Mar 10 2009, 16:47 _Pasha Весь смех в том, что сишная или иная ЯВУ-программа... Mar 10 2009, 18:17 Rst7 Цитатапри помощи переменной state эмулирует счетчи... Mar 10 2009, 19:15 ReAl Цитата(Rst7 @ Mar 10 2009, 21:15) Я давно... Mar 10 2009, 19:51  Dog Pawlowa Цитата(ReAl @ Mar 10 2009, 22:51) Тада, и... Mar 11 2009, 07:18   ReAl Цитата(Dog Pawlowa @ Mar 11 2009, 09:18) ... Mar 13 2009, 21:30 _Pasha Цитата(Diz @ Mar 11 2009, 11:24) Индекс -... Mar 11 2009, 11:40 Diz Интересно, а как сделать с набором параллельно раб... Mar 14 2009, 09:13 Dog Pawlowa Цитата(Diz @ Mar 14 2009, 13:13) Интересн... Mar 14 2009, 13:07 singlskv Цитата(Diz @ Mar 14 2009, 12:13) Интересн... Mar 14 2009, 22:23  Diz Цитата(singlskv @ Mar 15 2009, 01:23) Раз... Mar 15 2009, 09:26   _Pasha Цитата(Diz @ Mar 15 2009, 13:26) Вообщем,... Mar 16 2009, 06:17   singlskv Цитата(Diz @ Mar 15 2009, 12:26) Вообщем,... Mar 19 2009, 20:12 defunct Цитата(Diz @ Mar 14 2009, 11:13) Интересн... Mar 22 2009, 04:53  Dog Pawlowa Цитата(defunct @ Mar 22 2009, 07:53) Раск... Mar 23 2009, 09:57   _Pasha Цитата(Dog Pawlowa @ Mar 23 2009, 13:57) ... Mar 23 2009, 11:23    Dog Pawlowa Не нашел, чтобы эта ссылка была упомянута в теме.
... Mar 24 2009, 11:52 Diz Еще один интересный вариант реализации машины сост... Mar 17 2009, 20:14 Diz Цитата(singlskv @ Mar 19 2009, 23:12) Как... Mar 19 2009, 21:32 Dog Pawlowa Цитата(Diz @ Mar 20 2009, 00:32) Ну, это ... Mar 20 2009, 09:05  singlskv Цитата(Dog Pawlowa @ Mar 20 2009, 12:05) ... Mar 20 2009, 20:10
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|