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

[Вроде решено] Массив указателей на функции. Указатель на массив

. . . .

Нет. PC - вот лучшее место для хранения состояния автомата состояния! :yeah:

Параллельное ПЗУ разнообразной емкости и разрядности данных, аналогичный регистр-защелка по данным,

обратная связь выхода регистра на адресные входы ПЗУ.

Входные сигналы - также на адресные входы ПЗУ.

Автомат однако.

Декодер манчестерского кода был сделан по такой схеме.

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


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

Да, наверное есть случаи, когда Ваш метод имеет смысл. Спасибо, я попробую.

Да, наверное такой случай можно придумать и вообще в порыве энтузиазма притянуть еще пару случаев. Но в общем довольно НЕЧИТАЕМО на самом деле. Причина в том, что под читаемость попадает и привычность стиля. Для меня еще огромный недостаток, что при работе/отладке в реальных условиях, а не на столе под отладчиком, нет ЕСТЕСТВЕННОГО наглядного вывода развития событий автомата и истории вылета автомата.

 

Вариант с switch/case при кол-ве состояний >=20 много хуже получается и это, имхо, очевидно.

МОНОЛИТНЫЕ Автоматы с большим количеством состояний просто незачем делать. У меня есть не один проект, где при лобовом использовании автоматов состояний были-бы тысячи.

Вместо этого есть порядка десятка связанных автоматов с десятком, ну двумя десятками состояний. При этом они находятся тоже не в одном switch/case. Например, часть из них уходит в ОТДЕЛЬНЫНУЮ функцию переключения состояний автомата. В этой же функции вся отладка консольная.

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


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

нет ЕСТЕСТВЕННОГО наглядного вывода развития событий автомата и истории вылета автомата.

Если Вы откажетесь от любимой консоли, то будете в отладчике смотреть состояние по осмысленному наименованию одной строкой из enum ;)

 

мой метод значительно упрощает код, он становится легче для анализа и отладки.

Кстати, расскажите подробнее про отладку - как то происходит? Вот как быстро понять текущее состояние автомата?

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


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

Если Вы откажетесь от любимой консоли, то будете в отладчике смотреть состояние по осмысленному наименованию одной строкой из enum ;)

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

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

 

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


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

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

 

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

 

{27.01.17-08:09:46} "Filling"
Time Water A    B
>Cycle A c0 p0 w0 f11
4 4 A:1/6945525 B:0/0
>F reduced A factor10 prod714
14 4 A:2/2310679 B:0/0
{27.01.17-08:09:48} "Discharge finished"
Post pulses=4
W.counter: a/r/s/n 4/899/0/4;
W. volume: r/a=3979400/4752;
ConcA pulses r/a: 28/2 vol: r/a=20600/1428
ConcB pulses r/a: 0/0 vol: r/a=0/0
S. volume: r/a=4000000/6180;
16 4 A:2/2310679 B:0/0
Num     Date  Time   Liter  A% B%  Err
0240:27.01.17-08:09-000.0-23.106-0.000-15
{27.01.17-08:09:49} "Error" 15 Low water pressure
{27.01.17-08:09:56} "Error-2"
{27.01.17-08:09:57} "Waiting"
Stagnation 283572
0,5%  |0,5% 0,5% |0,5%
A:4,0l|A+B:1,5l  |B:1,5l

{27.01.17-08:09:58} "Filling"

 

 

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


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

С быстрыми автоматами буферизация данных становится сама по себе непростой задачей.

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

 

 

 

 

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


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

Быстрые обычно внутренние, их можно и на столе отладчиком посмотреть.

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

 

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


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

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

Тогда и меня должны понять, поскольку у меня "протокол по описанию" нередко бывал на многие ТЫСЯЧИ страниц. Тут уж никакой симулятор "на столе" не изобразишь для отладки, тем более без ошибок. Ну и встречное оборудование на реальных сетях все время меняется. И служит все десятки лет. Вот перед Новым Годом по подключению очередного комплекта оборудования разработанного и вылизанного более 10 лет назад "компетентные органы" https://ru.wikipedia.org/wiki/СОРМ мозг выносили - типа у них "все правильно".

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


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

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

А Вы не поняли и недостаток пытаетесь выдать за достоинство.

Я Вас ни в чём не собираюсь убеждать. Каждый пишет в меру своего умения и знаний. Насильно обучить чему-то невозможно.

Кто хочет, тот поймёт и все преимущества моего метода, плюсы и минусы и случаи когда его удобно применять. Ибо они очевидны.

Описал этот метод не для того чтобы с кем-то спорить тут. Использовать его только понимающим. Остальные - пройдите мимо, не вам это.

 

Вот как быстро понять текущее состояние автомата?

Включить мозг и догадаться, что PC сохраняется по фиксированному адресу ОЗУ - посмотреть там.

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


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

PC сохраняется по фиксированному адресу ОЗУ - посмотреть там.

А потом ? - искать по окну дизассемблера?

Не выглядит особенно удобным по сравнению со значением из enum.

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


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

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

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

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

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

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

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

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

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

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