Автор Тема: Может кому пригодится. Подобие протопотоков-автоматов  (Прочитано 11315 раз)

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Вообще, хорошо бы описать решаемую задачу простым текстом.

Ага, вот где нужен ДРАКОН! )))
http://forum.oberoncore.ru/viewtopic.php?f=78&t=4284&sid=8c14d8769c57628b9f266f355391e26d
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Ага, вот где нужен ДРАКОН! )))

Ага, Дракон здесь бы хорошо подошел.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Ага, вот где нужен ДРАКОН! )))

Ага, Дракон здесь бы хорошо подошел.
Зачем? Это же конечные автоматы! Там есть вполне устоявшаяся методика и нотация графического описания конечных автоматов: http://en.wikipedia.org/wiki/State_diagram

Ну и еще картинок (в статье): http://www.rsdn.ru/article/alg/nka.xml

Ну и вообще, см. тему: http://oberspace.dyndns.org/index.php?topic=60.0

Там как раз Илья Ермаков советовал http://jflap.org/ - и это ровно то что нужно! Никакой дракон в подметки тут не годится!
Y = λf.(λx.f (x x)) (λx.f (x x))

Madzi

  • Jr. Member
  • **
  • Сообщений: 86
    • Просмотр профиля
А ещё помню, конечные автоматы (конечные) хорошо описывались таблицами переходов...

...так ДРАКОН лишился ещё одного возможного направления развития :)

Wlad

  • Jr. Member
  • **
  • Сообщений: 91
    • Просмотр профиля
Упс. Ну, ок. Не будет работать new/delete (рантайм выкинули - никакого менеджера памяти, равно как и никаких malloc/free), не будет исключений и rtti. Все остальное - будет.
Как на встроенные системы "пересел", не припомню, что бы хоть раз malloc/free использовал... :)
Даже если попадается что-то переделывать из чьих-то готовых исходников изгоняю эту дьявольщину, переделывая структуры и алгоритмы! Чтение про ядро Миникс3 у Таненбаума и сами ея исходники - очень пользительны в плане корректировки мировозрения и оценок, что к чему в реальности и при жёстких ограничениях.

"Всё остальное" - это просто "несколько иной" компилятор на уровне конструкций и типов.
Хотя, "объектоподобность" я могу и "вручную" на Си(без крестов) организовывать и получается по затратам на память всё равно меньше. Вместо поддержки таблиц виртуальных функций больше подходит подход из первого Оберона с указателями на функции. Но чаще Обходишься чем-то вроде Queue_Add( TQueue* this, void* pItem ) и void* Queue_Get( TQueue* this ) :)
Сами же, например, буферы, помещаемые и удаляемые из очереди - элементы массива буферов

uint8_t buffers[N][BUFFER_SIZE];
uint8_t* freeBuffers[N];
uint8_t* buffersToTX[N];
uint8_t* RXedBuffer, *TXedBuffer;

и т.д.

А это другим, для расширения кругозора :-) Я просто пишу под вот это все, и, так сказать, делюсь опытом. Кстати, привычки которые приобретаешь при программировании под смартфоны современные позволяют существенно лучше писать проги под ноуты - это здорово когда приложение не сжирает батарейку за полчаса.
Ну, у меня в изделиях проблем с энергией нет. Хотя потребление стараемся минимизировать. Больше стараемся скорострельность выжать при минимизации самой тактовой. Плюс температурный диапазон и вибро- и удароустойчивость. Ну и что бы "свистело" потише по цепям питания... :)

Wlad

  • Jr. Member
  • **
  • Сообщений: 91
    • Просмотр профиля
У меня есть конкретный вопрос.
Какой смысл в присваивании state_res = E_TW2700_FS_INIT_READ_HEADER, если за этим сразу идет state_res = -1?
_E_TW2700_FS_INIT_READ_HEADER_: 
    state_res = E_TW2700_FS_INIT_READ_HEADER;  goto _E_timedout_;
_E_timedout_:
    IDE_ready = FALSE;
    FS_ready = FALSE;
    state_res = -1;
Потому, что не все комментарии вписал.
Вы наверное заметили, что куча кода выкинута?
Задача была показать применение конкретного подхода и конструкций.

Вообще, хорошо бы описать решаемую задачу простым текстом.
Оно вам надо? :)

Wlad

  • Jr. Member
  • **
  • Сообщений: 91
    • Просмотр профиля
Подозреваю, что между "_E_timedout_:" и "state_res = -1;" должно было быть логирование причины таймаута или что-то в этом духе...
Там много чего ещё есть.
Просто предоставлена иллюстрация использования макросов учёта "состояния автомата".
Оставлен только "скелет" типового использования.
Не буду же я весь тысячестрочный модуль низкоуровневой работы с IDE флеш-диском и тасования в памяти видеоконтроллера информации выкладывать! Во-первых, оно не для того писАлось, во-вторых, завуалировало бы применение "макросов состояния" лишней инфой.