Перейти к содержанию
    

Еще раз о switch-технологии

Добрый день. Хотелось бы еще раз более подробно поговорить о switch-технологии.

Ввиду наличия свободного времени начал разрабатывать библиотеку классов для этого дела, хотелось бы узнать мнение специалистов о правильности самого подхода.

В целом, идея такова. Создать набор виртуальных классов, реализующих базовую функциональность. Сами автоматы создаются в виде наследников. Требование - должна быть реализована виртуальная функция переходов. Функция может быть написана как вручную, так и сгенерирована автоматически из dot файла (формата GraphViz) (в этом случае имеем дополнительно картинку, соответствующую функции переходов).

Такая библиотека кажется довольно удобной, особенно в случае программирования логических контроллеров (управление различными задвижками, пневмоцилиндрами, контакторами и т.д.), так как допускает множественное использование единожды написанного автомата сразу для нескольких объектов (для этого используются шаблоны). Единственная проблема - недостаток опыта. Хочется создать не просто одиночный проект, а именно библиотеку, а здесь все зависит от того, по тому ли пути пошел в самом начале.

В общем, подскажите, стоит ли игра свеч, и в каком направлении двигаться. В прикрепленных файлах - самое начало. Может, у кого есть подобные вещи - прошу поделиться, в целях, так сказать, повышения образованности.

StateMachines.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ресурсов сожрет немеряно...

По сравнению с концепцией "точка входа в подпрограмму, реализующую автомат есть состояние автомата". Применительно к АВР - это статическая переменная размером в 2 байта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ага. Ну и конструкцию новомодную ГЦЦ-шную тоже нельзя не упомянуть

static int count;
static void *pc=NULL;
void *thread_proc(void *pc)
{
  if(pc !=NULL) goto *pc;
//.............CODE.................
//...........MORE CODE..........

// example of the State
StateN:
    if(PIND & (1<<In_Pin)) count += 1;
    return &&StateN;
}

Вызов такого треда

 pc = thread_proc(pc);

Впрочем, в помянутых Protothreads это как вариант и так есть.

ЗЫ помогает избавиться от двухбайтового оверхеда

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Фреймворк использующий иерархические машины состояний http://state-machine.com/. Реализация на С и С++ под разные архитектуры.

Изменено пользователем alcosar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно Вам будет интересно почитать

http://www.rsdn.ru/article/alg/Static_Fini...ate_Machine.xml

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ввиду наличия свободного времени начал разрабатывать библиотеку классов для этого дела, хотелось бы узнать мнение специалистов о правильности самого подхода.

 

Вы не первый и не последний.

IMHO главная проблема писателей подобных систем - чрезмерная универсальность, превышающая реальные потребности решаемых с помощью подобных инструментов задач.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы не первый и не последний.

IMHO главная проблема писателей подобных систем - чрезмерная универсальность, превышающая реальные потребности решаемых с помощью подобных инструментов задач.

+1

Где предел абстрактности? Иногда идея возводится в абсолют.

Не знаю как у кого, но я, если превышаю какой-то порог универсальности, то потом этим воспользоваться всё равно не могу. То есть, по прошествии какого-то времени, мне надо сначала изучить свой же (!!!) вариант реализации и уж потом им воспользоваться. Написание документов и описаний (делаю всегда) не очень помогает. Надо перечитать документ (описание) вспомнить, вникнуть, и уж потом воспользоваться.

 

Если созданной библиотекой с таким уровнем абстракции, пользоваться постоянно, то, безусловно, это себя окупит. А если от раза к разу, то это работа ради идеи. Это моё мнение.

 

Не знаю как у кого, но у меня, как мне кажется, организм борется с избытком информации. И борется простым методом. Я забываю. Начисто. Хорошо усваиваю и тут же забываю. :biggrin:

Доходит до смешного. Бывали случаи когда я наново создавал некоторые вещи. Потом находишь - "Во! Так я это уже делал! Интересно! И решение интересное!" :)

 

Применительно к данной тематике, я бы предпочёл несколько разных решений, пусть менее универсальных, но более наглядных с точки зрения универсальности. Либо применил бы промежуточное ПО (скорее всего именно так). То есть реализовал бы систему с управлением состояниями в виде внешних данных. Интерпретатор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сколько всего вкусного ))))

Спасибо всем за отзывчивость.

Информации не на одну неделю. Нужно все это переосмыслить.

Пока более всего заинтересовал вариант, на который дал ссылку Dima_G.

(Кто-нибудь пользовал? В IAR откомпилится?)

Ладно, буду думать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделал перевод статьи о конечных автоматах. Эта статья где-то упоминалась на форуме - Martin Gomez "Embedded State Machine Implementation"

Изменено пользователем sansnotfor

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...