DRAKON.SU

Текущее время: Вторник, 17 Июнь, 2025 21:27

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 69 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
СообщениеДобавлено: Понедельник, 26 Октябрь, 2009 18:11 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5999
Откуда: Москва
and007 писал(а):
Привожу пример полностью написанной программы интеллектуального датчика на микроконтроллере. В 1-м файле собственно алгоритм коррекции. В 2-м математическая библиотечка.
...из-за использования устаревшего микроконтроллера с малым объемом памяти без встроенной математики пришлось писать на асме. В итоге код программы занял около 9 страниц.


Уважаемый and007!

Просьба дать развернутый комментарий. Например, достоинства и недостатки. И,самое главное ВЫВОДЫ, к которым Вы пришли после того, как Вы написали Вашу 9-страничную программу на asm.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Октябрь, 2009 21:06 

Зарегистрирован: Среда, 06 Май, 2009 21:00
Сообщения: 32
Геннадий Николаевич спасибо!
Действительно опечатка, вместо JJ надо J. В алгоритме вывода телеметрии есть логическая ошибка.
Идея была в том, чтобы получить максимальное быстродействие. Для этого вывод байтов должен идти параллельно с выполнением основной программы (т.е. в «фоновом режиме»).
В начале измерительного цикла указывается, какой байт из очереди надо вывести, а при вызове очередного прерывания (частота вызовов 19200 Гц) выводится очередной бит этого байта.
Есть ограничение – число команд, выполняемых в прерывании должно быть минимально, иначе не остается времени на выполнение основной программы, или даже они не успеют выполнится до запроса на очередное прерывание.

Логическая ошибка алгоритма в следующем. Если бы контроллер был сверхбыстродействующим (т.е. период выполнения измерительного цикла << периода вызова прерывания) то нарушилась бы очередность передаваемых байтов; если count_bit=0, то номер байта может увеличиться, прежде чем вызовется прерывание.
На практике измерительный цикл длится ~3000 мкс, а период прерывания ~50 мкс и ошибки не происходит.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Октябрь, 2009 21:22 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Извините, ранее поторопился написать.
В схеме "Пересылка байта в UART" комментарий "По заданному номеру отсылаем байт на почту" скорее должно быть иконой "Действие".
В контекстном меню есть замена вида иконы.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Октябрь, 2009 21:29 

Зарегистрирован: Среда, 06 Май, 2009 21:00
Сообщения: 32
Владимир Даниелович!
У меня нет достаточного опыта в программировании микроконтроллеров, не с чем сравнивать и мнение будет субъективно.

Если сравнивать по трудоемкости ассемблер и Си, то разработка на Си идет раз в 5 быстрее, и получается удобно читаемая (для специалиста) программа.
Но многие серьезные разработчики Си недолюбливают, поскольку из-за ограничения аппаратных возможностей микроконтроллеров и несовершенства компиляторов (как коммерческих, так и бесплатных) трудно получить надежный код и еще труднее предсказать, как себя поведет устройство в нештатной ситуации (например, при воздействии помех).
Поэтому ответственные задачи стараются программировать на ассемблере. Но здесь другая сложность. Из-за детализации в машинных инструкциях код получается очень громоздкий. И если ассемблерная программа содержит более 300-400 строк кода, то практически никто, кроме разработчика в ней не разберется. Проще написать код заново. Очень трудно проконтролировать ошибки разработчика.

В итоге - Си быстро, но не надежно; ассемблер же долго, сложно и не факт, что надежно.
Получается противоречие между качеством результата и средствами его достижения.

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

Все это существенно упрощает написание и понимание кода и увеличивает его надежность.

PS ассемблерный листинг (черновик)


Вложения:
prf_idat.txt [24.75 КБ]
Скачиваний: 836
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Декабрь, 2010 14:31 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Здесь
Владимир Паронджанов писал(а):
Привожу пример реальной дракон-схемы.
...
http://store.oberoncore.ru/lib/image/drakon/list4.png
http://store.oberoncore.ru/lib/image/drakon/list5.png

Обратите внимание на следующее:
...
5. Описание цикла ДЛЯ на листах 4 и 5.
Цикл ДЛЯ занимает три ветки:

6. Правило. Если цикл ДЛЯ занимает две или более веток, то цикл ДЛЯ
должен быть обрамлен веточным циклом.

Имхо, правило №6 порождает потенциальную опасность непонимания алгоритма.
Об этом уже говорил Геннадий Тышов

Геннадий Тышов писал(а):
При цикле FOR в нескольких ветках, куда передается управление из иконы "Конец FOR" после завершения последней итерации?

Ведь за ней находится икона "Адрес" с передачей управления на ветку с иконой "Начало FOR", т.е. цикл FOR находится внутри веточного цикла.

Выход из цикла возможен только по иконе "Вопрос" через заземленную лианы на внешнею ветку и невозможен при завершению всех итераций.

Ниже рисунок, показывающий в упрощённом виде алгоритм, изображённый на листах 4 и 5
Вложение:
a1.png
a1.png [ 61.99 КБ | Просмотров: 19019 ]

(стрелки к алгоритму не относятся, просто показывают передачу управления)

Если я правильно понял, Владимир Паронджанов в алгоритме хотел показать 1 цикл, расположенный в разных ветках. Но визульно считывается 2 цикла: веточный и вложенный в него цикл FOR.
При этом:
1. Ошибкой является невозможность выхода из цикла по завершению всех итераций.
2. Создаётся впечатление присутствия 2-х циклов (веточный цикл и, вложенный в него, цикл FOR), хотя автор намеревался показать именно 1 цикл.

Ошибку №1 Владимир Паронджанов предложил исправить следующим образом (на рисунке ниже выделено жёлтым цветом)

Владимир Паронджанов писал(а):
...
Ответ
...
Геннадий Тышов писал:

Цитата:
В.Д., у меня вопрос.

При цикле FOR в нескольких ветках, куда передается
управление из иконы "Конец FOR" после завершения
последней итерации?
...
2. После иконы "Конец цикла ДЛЯ" вставляется икона вопрос.

3. После окончания цикла ДЛЯ икона вопрос изменяет путь
(выходим направо через да) и входим в икону адрес
"Завершение" и т. д.

4.Не забудьте: Надо заблаговременно инициализировать идентификатор
в иконе вопрос.

Вложение:
a2.png
a2.png [ 50.96 КБ | Просмотров: 19019 ]

Появляется совершенно лишняя и ненаглядная для цикла FOR проверка.

А ведь Дракон-схема — это эргономичность, наглядность, понимание с первого взгляда.

Ошибка №2 (по крайней мере я это воспринимаю как ошибку) никак не устранена.

Ценность Дракон-схем (опять же, по крайней мере для меня) в том, что человек глядя на неё, практически без знания правил языка Дракон, может правильно понять алгоритм.

Обрамление цикла FOR веточным циклом, имхо, неестественно и путает восприятие.

Например, если ввести две новых иконы и разрешить использовать иконы Цикл FOR в качестве имени ветки и адреса то может получиться схема показанная на рисунке ниже.

Правила для цикла FOR, расположенного в разных ветвях силуэта:
1. Иконы «Адрес в цикле» и «Имя ветки в цикле» могут использоваться только внутри цикла FOR, размещённого на разных ветках силуэта.
2. Икона «Адрес» может передать управление только на начало цикла FOR и никогда во внутрь цикла, а также из цикла FOR наружу.
3. Иконы «Адрес в цикле» может передавать управление только внутри цикла FOR, включая начало цикла FOR.
4. При завершении цикла FOR управление естественным образом передаётся на следующую справа от цикла FOR ветку.
5. Икона "Начало цикла FOR" всегда располагается в шапке силуэта.
Вложение:
a3.png
a3.png [ 60.38 КБ | Просмотров: 19019 ]

Слова «оператор» в скобках - это пробование на вкус других терминов : )


Последний раз редактировалось Ильченко Эдуард Воскресенье, 12 Декабрь, 2010 23:48, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Декабрь, 2010 16:25 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Опыт реализации в и.с. Drakon.

Отказался от реализации многоветочного цикла ДЛЯ, т.к. нарушается однородность схемы из-за разрыва цикла ДЛЯ и т.к. нарушается однозначность логики языка из-за ввода дополнительных условностей. В книгах В.Д. Паронджанова до 2010 года описание и возможность наличия многоветочного цикла ДЛЯ отсутствует.

Согласно принципа "Автомат Калашникова" координатора Info21 цикл For не должен существовать, его функции полностью обеспечиваются циклом While.

В Драконе многоветочный цикл органично реализуется "Обычным циклом".
Вводить дополнительные сущности без крайней необходимости не следует.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Декабрь, 2010 16:53 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Геннадий Тышов писал(а):
В Драконе многоветочный цикл органично реализуется "Обычным циклом".
Вводить дополнительные сущности без крайней необходимости не следует.


Отказом от многоветочного цикла Вы убиваете автоматную составляющую ДРАКОНа. Вы уже не можете использовать силуэт как конечный автомат.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Декабрь, 2010 17:20 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Илья Ермаков писал(а):
Отказом от многоветочного цикла Вы убиваете автоматную составляющую ДРАКОНа. Вы уже не можете использовать силуэт как конечный автомат.

Где вы видете отказ от многоветочного цикла? Ведь сказано:
Геннадий Тышов писал(а):
В Драконе многоветочный цикл органично реализуется "Обычным циклом".

Илья Ермаков писал(а):
Вы уже не можете использовать силуэт как конечный автомат.
Во всей литературе В.Д. Пароджанова нет связи между силуэтом и конечным автоматом. Илья, каким образом сложилось у вас такое мнение. Смотрите и.с. Drakon, там как раз для программирования используется модель конечного автомата.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Декабрь, 2010 17:27 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
У Владимира Даниеловича есть иллюстрация связи между силуэтом и КА. На одном рисунке. Силуэт с веточными циклами - и ниже соответствующий КА. Сейчас точно не укажу страницу.

Хотя у меня "сложилось" сразу, как только я прочитал первые страницы про ДРАКОН. Это очевидно.

Упоминания конечных автоматов в и.с. Дракон (версия ноября 2010) не нашёл, хотя помню, что Вы про них говорили.
(кстати, могу порадовать - под Линуксом и.с. Дракон запустилась нормально)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Декабрь, 2010 17:41 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5999
Откуда: Москва
Ильченко Эдуард писал(а):
Владимир Паронджанов писал(а):
6. Правило. Если цикл ДЛЯ занимает две или более веток, то цикл ДЛЯ
должен быть обрамлен веточным циклом.

Имхо, правило №6 порождает потенциальную опасность непонимания алгоритма.
Об этом уже говорил Геннадий Тышов

Уважаемый Эдуард Ильченко!

Я допустил ошибку. Правило 6 следует отменить.
Вы абсолютно правы, это правило
не помогает, а запутывает дело.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Декабрь, 2010 17:51 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Илья, смотрите справку, раздел "Программирование, синтез программного обеспечения в интегрированной среде DRAKON".
Цитата:
Особенности программирования Дракон – схем
На листе все иконы имеют уникальный номер, из которого формируется метка для перехода.

Дракон-схема рассматривается как конечный автомат. Состоянием автомата является шампур схемы, имеющий иконы. Переход в состояние автомата, т.е. на шампур, производится переходом на метку иконы шампура. Выходом из текущего состояния автомата является безусловные переходы от нижнего узла шампура, от икон «Адрес» и переходы по условию.


Илья Ермаков писал(а):
У Владимира Даниеловича есть иллюстрация связи между силуэтом и КА. На одном рисунке. Силуэт с веточными циклами - и ниже соответствующий КА. Сейчас точно не укажу страницу.
Да есть рис135, 136, но по тексту упоминание 1 раз в примечании к другим вопросам (структурный, лианный, адресный блок).


Последний раз редактировалось ==== Воскресенье, 12 Декабрь, 2010 18:01, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Декабрь, 2010 17:58 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Что-то я не пойму.
Состояние - это ветка. Переход в другое состояние - это оператор "Адрес" в конце ветки.

У Вас - шампур и ещё какой-то непонятный способ перехода на него. Или то же самое, только другими словами?

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

Документация, вынужден огорчить, под Линуксом не открывается. Так что обратиться к ней не могу.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Декабрь, 2010 18:01 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 1442
Владимир Паронджанов писал(а):
Ильченко Эдуард писал(а):
Владимир Паронджанов писал(а):
6. Правило. Если цикл ДЛЯ занимает две или более веток, то цикл ДЛЯ
должен быть обрамлен веточным циклом.

Имхо, правило №6 порождает потенциальную опасность непонимания алгоритма.
Об этом уже говорил Геннадий Тышов

Уважаемый Эдуард Ильченко!

Я допустил ошибку. Правило 6 следует отменить.
Вы абсолютно правы, это правило
не помогает, а запутывает дело.

Нельзя вообще разносить цикл ДЛЯ на разные ветки - это передача управления, минуя петлю силуэта. Если нужен многоветочный цикл с параметром - приводить к циклу ДО, как показано в книге (с. 136).


Последний раз редактировалось Владислав Жаринов Воскресенье, 12 Декабрь, 2010 18:54, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Декабрь, 2010 18:06 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Илья Ермаков писал(а):
Документация, вынужден огорчить, под Линуксом не открывается. Так что обратиться к ней не могу.
Найдите способ работать с *.CHM файлами.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Декабрь, 2010 18:07 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5999
Откуда: Москва
Илья Ермаков писал(а):
У Владимира Даниеловича есть иллюстрация связи между силуэтом и КА. На одном рисунке. Силуэт с веточными циклами - и ниже соответствующий КА. Сейчас точно не укажу страницу.
.....................................................................


Илья Евгеньевич прав. Про конечный автомат говорится в двух местах:

1. На стр. 260.
См. Примечание внизу страницы:
Цитата:
Заметим, что силуэт на рис. 136 можно интерпретировать как детерминирован-ный конечный автомат [19], показанный на рис. 137 (входной алфавит и переходная функция автомата не показаны).


2. На стр. 262, рис. 137.
Подрисуночная подпись:
Цитата:
Рис. 137. Детерминированный конечный автомат, соответствующий силуэту на рис. 136.


Первым сказал, что "силуэт -- это конечный автомат", -- Леонид Эйсымонт из Института прикладной математики им. акад. Келдыша.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Декабрь, 2010 18:32 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
http://forum.oberoncore.ru/viewtopic.php?p=55582#p55582
Геннадий Тышов писал(а):
В Драконе многоветочный цикл органично реализуется "Обычным циклом".
Поправляюсь:
В Драконе многоветочный цикл органично реализуется в последней ветке цикла блоком "Развилка" с заземленной лианой правого выхода.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Декабрь, 2010 18:50 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5999
Откуда: Москва
Эдуард Ильченко пишет:
Цитата:
Появляется совершенно лишняя и ненаглядная для цикла FOR проверка. Согласен.

А ведь Дракон-схема — это эргономичность, наглядность, понимание с первого взгляда. Согласен.

Ошибка №2 (по крайней мере я это воспринимаю как ошибку) никак не устранена. Согласен.

Ценность Дракон-схем (опять же, по крайней мере для меня) в том, что человек глядя на неё, практически без знания правил языка Дракон, может правильно понять алгоритм. Согласен.

Обрамление цикла FOR веточным циклом, имхо, неестественно и путает восприятие. Согласен.


Спасибо за предложение (которое после). Оно требует тщательного обдумывания.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Декабрь, 2010 18:53 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Владимир Паронджанов писал(а):
Правило 6 следует отменить.

Вы вообще отказались от использования цикла FOR, разнося его на разные ветки силуэта, или допускаете использование в каком-то другом варианте?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Декабрь, 2010 18:56 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 1442
Геннадий Тышов писал(а):
http://forum.oberoncore.ru/viewtopic.php?p=55582#p55582
Геннадий Тышов писал(а):
В Драконе многоветочный цикл органично реализуется "Обычным циклом".
Поправляюсь:
В Драконе многоветочный цикл органично реализуется в последней ветке цикла блоком "Развилка" с заземленной лианой правого выхода.

Без вложений других циклов - да. Если в этой же ветке закачивается не один цикл - визуализация несколько усложняется.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Декабрь, 2010 20:09 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5999
Откуда: Москва
Ильченко Эдуард писал(а):
Владимир Паронджанов писал(а):
Правило 6 следует отменить.

Вы вообще отказались от использования цикла FOR, разнося его на разные ветки силуэта, или допускаете использование в каком-то другом варианте?


Считаю нужным использовать цикл FOR. В том числе разнося его на разные ветки силуэта.

Во избежание недоразумений изложу свою позицию подробно.

Красным написано то, что следует удалить.

6. Правило. Если цикл ДЛЯ занимает две или более веток, то цикл ДЛЯ
должен быть обрамлен веточным циклом.

6.1. Икона "Начало цикла ДЛЯ" размещается сразу под иконой
"имя ветки", обозначающей начало веточного цикла.
6.2. Икона "Конец цикла ДЛЯ" размещается перед иконой "адрес"
обозначающей конец веточного цикла.
6.3. В иконе "имя ветки",обозначающей начало веточного цикла, в данном
случае написано ДИАЛОГ.НАЧАЛО,
6.4. В иконе "адрес",обозначающей конец веточного цикла, в данном
случае написано ДИАЛОГ.КОНЕЦ,

7. Пояснение. Цикл ДЛЯ может быть длинным. Он может не поместиться
в одну ветку (и даже в две ветки). В этом случае иконы "Начало цикла
ДЛЯ" и "Конец цикла ДЛЯ" могут оказаться в разных ветках
(см. пункты 6.1 и 6.2).


Красный текст заменяется на следующий:

6. Правило. Цикл ДЛЯ может быть длинным. Он может не поместиться
в одной ветке (и даже в двух ветках). В этом случае иконы "Начало цикла
ДЛЯ" и "Конец цикла ДЛЯ" могут оказаться в разных ветках.

:6.1. Рекомендация. Если цикл ДЛЯ размещается в двух или более ветках,
рекомендуется икону "Начало цикла ДЛЯ" размещать сразу под иконой "имя ветки".
(чтобы ее можно было легко отыскать взглядом).


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 69 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2008-2025, участники конференции «DRAKON.SU», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB