Pull to refresh
12
0
Александр Соловьёв @Dr_Dash

Пользователь

Send message
множественная альтернатива != автоматное программирование. Благодаря популяризаторству Шалыто они немного звучат как будто из одной оперы. Хотя стоит отдать ему должное — он популяризаторствует уже лет 30 судя по его книгам, этакий Донкихот и первопроходец 2 в 1. Может он и увидит эру автоматного программирования. Надеюсь у него хватит непредвзятости чтобы принять автоматное программирование таким какое оно будет, и не замыкаться на switch-операторе
и об этом будет, спасибо за участие
Я разработчик лабораторных измерительных приборов, msp arm микроконтроллеры разные. В институте я изучил автоматы для железа. Может это и осталось бы просто предметом, но был серьёзный курсач (система сбора данный втыкаемая в ISA), и я оценил всю силу микропрограммных автоматов. Я сделал это, хотя сначала даже не знал как подступиться. Обычное программирование знаю с детства но когда оно стало моей работой, в силу обстоятельств у меня после института было достаточно времени чтобы начать писать проги как автоматы, благо поставленная задача — стенд автоматизированного тестирования плат, прямо таки располагала к автомату. Я «вошёл в форму» и писал все модули управления периферией контроллера как автоматы. Сначала просто для себя, молодой исследователь, но потом это сложилось в систему, которую я довёл до некоторого уровня, когда можно поделиться с коллегами.
Лет 10 назад я обратился к интернету посмотреть — делает ли кто нибудь как я, но понял что автоматное программирование воспринимается несколько однобоко, и от этого оно кажется куцым. Я вас понимаю, если смотреть на программные автоматы так, как это предписывается распространённой практикой, в них мало преимуществ, поэтому я начал этот цикл, и сейчас как начинающий писатель я пытаюсь понять что писать чтобы был понятен именно процесс автомато-ориентированной разработки. Проект «Дисплей» неплохой вариант, это показательный пример. В следующей статье я обрисовываю его же только несколько с другого ракурса. Если вы после этого задатите конкретные вопросы, я смогу написать ещё более понятно. Я намерен сделать пособие, потому что автоматное программирование это подход к решению задачи а не только способ оформления, реализации программы.
Вероятно отладка у вас будет занимать меньше времени когда вы будете больше времени уделять планированию, проектированию модулей, именно в графическом виде. Просто всегда есть вопрос — а что собственно рисовать — это и хочу показать, просто я нащупываю почву чтобы читателю было понятно — я не преподаватель и это мой первый опыт обучения людей через лекции ) Спасибо что читаете
по моему айфон в кафе это такой хитрый отказ по-калифорнийски )
У меня в одной программе было две переменные, т.е. матрица состояний. И это был очень такой показательный автомат. Можно конечно свести это к одной переменной вида i*N+j — но это будет сова на глобусе.
трудно обсуждать это даже не «на пальцах». Если не сложно, напишите об этом попримеристей. Это может стать иллюстрацией для дальнейшего хода повествования. Автоматное программирование — общее дело, мы сами создаём будущее.
Просто умножаем мощность переменной на мощность этих флагов.
не остонавливайтесь на этой фразе, читайте весь абзац, там об этом и написано )

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

В общем каждый уважающий себя embedded программист изобретает свой автомат
примерно так и есть. Сделаем мир вокруг нас немного лучше
просто вылавливая и обрабатывая нужные сочетания сигналов [...] Узнали о новом поведении — добавили обработку характерных сочетаний сигналов.
Никаких состояний, никаких диаграмм переходов!

это верно когда новое поведение сосуществует параллельно с ранее запрограммированным. но когда новое сочетание сигналов вклинивается в ранее созданный алгоритм, это уже не соответствует действительности.
А автоматы и плохо масштабируются, и совершенно не гибкие и труднее отлаживаются,
хорошо что вы подняли эту тему. Как раз в случае когда автоматы «проектируются», не возникает проблем ни с отладкой ни с масштабируемостью ни с гибкостью.
Когда я был молодым и разработал «Дисплей» не так как это показано в примере, в какой то момент я убедился, что добавление новых свистелок «наступает на пятки» предыдущим, но когда я изобразил всё как показано в предыдущем примере, для всего нашлось место. Более того, я покажу как этот пример можно модифицировать.
С отладкой тоже не возникает проблем. У меня примерно 40% времени занимает проектирование, 20-30% написание кода, 10%! отладка, и остальное время я просто добавляю в программу кучу всяких фич, от которых тащатся заказчики. То есть, я не хвастаюсь сейчас, я обычный программист, я не отличаюсь особым вниманием и где то рассеян даже более чем остальные, но понимаете, отладка когда я разработал программу автоматно сводится в основном к тому чтобы убедиться что всё ок, и я хочу чтобы в будущем молодые программисты не убивались со слезами на глазах о необъяснимое поведение программы, и не лысели раньше времени.
Верно. На этом вопросе через несколько лет будут процветать многие люди: юристы, политики, технологи. Деперсонализация данных того стоит, потому что это механизм легализации огромных объёмов статистической информации.
Возможно в дополнение к плюшкам стоит ввести некую «деперсонализацию» данных, которые перестают быть связаны с конкретным человеком. деперсонализацию как некий юридический и точно специфицированный механизм. После этого облегчится обмен данными между вендорами, и составление «общечеловеческих» баз данных, которые будут доступны в том числе и университетам.
Будьте любезны, оцените изменения в тексте (начиная с рис 10 и до рис 11), стало понятней?
Идею уловил. На самом деле трудный пример? Это сквозной и очень хороший пример. Он не такой уж сложный, просто видимо я недостаточно освещаю какие то моменты. Напишите где «и тут всё опять усложняется», я сделаю переходы более плавными и пояснения более развёрнутыми. Во второй части у меня есть разные примеры и в том числе попроще, в том числе реализация этого же примера сделанная моим коллегой, в которой я выделю операционную часть и управляющую и они действительно проще и без сдвиговых регистров. я сравниваю эти две реализации примера: по быстродействию и с точки зрения замысла и здесь сдвиговые регистры ключевой элемент, они определяют почему сделано именно так а не иначе, без них не удастся показать процесс разработки. Может быть имело смысл начать с той реализации, но она появилась как ответ на мою реализацию)))
Про реализацию в коде скорее соглашусь с вами, может её под спойлер лучше?
одной статьёй не получается, поэтому прошу набраться терпения. Эта статья может рассматриваться как введение, иллюстрация понятия «автоматное проектирование». Сейчас я работаю над второй стаьёй где внимание уделено как философии автоматных программ так и реализации.
А хотелось бы в целом законченную статью про автоматы. С примером разработки автомата. Структурными схемами, и схемой работы каждого автомата.
но у меня же там про разработку ))). Вы просто ставите меня в тупик этой фразой, если можно то более конкретно.
Соответствие здесь это метки, они соответствуют названиям состояний.
Вероятно потому что в пример тяжело въехать из-за специфики. Получается, что абстракция вроде понятна, но за кучей низкоуровневого кода её не видно.
если описание, диаграммы состояний и чертежи перечислить отдельно а код поместить в конце это будет более понятно, я верно уловил?
Это нужно только начинающим программистам, у которых мозг не сформировал областей нужных паттернов мышления.

это ваше субъективное мнение,
Присутствие оператора switch в программе на языке C-и тоже не маркер автоматного программирования.

Всё верно, маркер автоматного программирования — набор явно выделенных состояний, плюс текущее состояние задаётся конретной переменной. У меня есть хороший пример.
У меня много материала, постепенно я его изложу, и все заявленные моменты будут раскрыты, это не для красного словца. Сейчас я смотрю на отклики читателей, чтобы выбрать материал для второй части, наберитесь терпения.
PS про маски понятно, за это тоже спасибо. это два подхода которые приятно сравнить, если есть возможность заменить 8ми байтным массивом операцию вычисления маски сдвигом на 7 позиций, лучше использовать массив, потому что взятие индекса одна операция пусть и двухтактная чем 7 сдвигов по одному такту плюс декремент счётчика один такт плюс сравнение и переход плюс ещё пара, итого 28тактов против 2х, выигрыш в производительности 14кратный!!!
ваши пояснения туманны, а выводы категоричны. вы в душе поэт ;)?
Спасибо за весьма корректно выполненную эмуляцию, это то чего мне реально не хватало. если вы не против я возьму её как пример для своей второй части.
нашёл что у вас получилось, запущу это под IAR ом можно будет сравнить с цифрами на руках
Если бы был некий стандарт записи автомата в какой-нибудь xml, позволяющий обмен автоматными алгоритмами, плюс некая «стандартная библиотека», возможно, все бы было иначе;
согласен с вами. Если вы так понимаете суть проблемы вам будет интересно продолжение, потому что то о чем дальше пойдёт речь находится как раз в том тренде о котором вы пишите

Information

Rating
Does not participate
Location
Челябинская обл., Россия
Registered
Activity