реклама на сайте
подробности

 
 
> Как описывать архитектуру девайса
Hexel
сообщение Jun 13 2018, 16:36
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 13-03-12
Из: Украина
Пользователь №: 70 785



Добрый день!

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

Если конкретно, вот полная структурная схема девайса, нарисованная в визио. Компоненты в синем ящике - периферия проца, пакаджи - софтовые модули. Компоненты на свободном поле - участки схемы, в белых ящичках - коннекторы и соответствующие им входные цепи. Входа компонентов обозначены как интерфейсы (кружками), я старался размещать их слева. Например, модуль OutExt имеет процедуру SetOut, которая вызывается из модулей UserIF и Evt, и выдает наружу сигналы через выводы Ch1 и Ch2 и через периферию SPI. Местами путаница, но это промежуточный вариант, т. к. визио показался мне не самым удобным инструментом для даной задачи. Вот я и хочу спросить, кто в каком редакторе составляет такие диаграммы? Может быть, хотя бы для чисто софтовых проектов?
На мой взгляд это должен быть UML, пока что только для структуры. За описание процессов я может потом спрошу
Прикрепленные файлы
Прикрепленный файл  P171207__________.pdf ( 21.75 килобайт ) Кол-во скачиваний: 105
 


--------------------
нет повести печальнее на свете, чем повесть о запавшем ресете
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
p_v
сообщение Jun 18 2018, 15:41
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 16-06-18
Из: СПб
Пользователь №: 105 099



Теперь пройдемся еще раз по диаграммам. А точнее, по диаграммам данных (data flow). Допустим, с майндмапами вам уже все понятно (или с проектом все понятно и без них) и хочется двинуть дальше.

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

Возможно на очень больших проектах, где толпа людей, причем сомнительной квалификации, есть смысл прорисовывать все до деталей (потому что выхода нет). Но в ситуациях попроще обычно удобнее отрисовать и верифицировать "самое мясо", и переключиться непосредственно к программированию:
  • По мере роста деталей затраты времени на диаграммы возрастают, и эта зависимость не линейна.
  • Когда в код вносятся изменения - синхронизировать диаграммы это куча лишней работы. Примерно как возня с исправлением тестов, если их нафигачить "из принципа", до того как внутренние API достигли определенной стабильности.
Нет смысла упираться в абстрактные принципы. Важен баланс. Нам ведь не надо рисовать диаграммы ради вселенской справедливости или красивого вида. Мы обычно хотим с минимальными усилиями "правильно" разбить систему на части, чтобы не подставляться под дорогие переделки. Что будет балансом в конкретно вашем случае - можете решить только вы. Здесь универсальных советов, к сожалению, нет.

Конечно, всегда найдутся исключения, но я рассказываю про основной подход, с чего хотя бы начать, когда от страха дрожат ручки и дергается глазик. Если задуматься, то суть большинства систем - обработка данных. Есть черный ящик, у которого на входе ручки, за которые дергает безумный юзер, а на выходе (допустим) индикатор. Если проектируем библиотеку, то входы и выходы обзывают словом API. Как-то так, если совсем кратко и с упрощениями. Обращаю особое внимание, не надо путать данные с событиями. Данные можно какбэ "потрогать руками". В событиях проще запутаться. Пример исключения, когда выбирать не приходится - конечный автомат. Там без событий никак. Но не стоит усложнять себе жизнь раньше времени. Диаграммы данных вам понадобится рисовать практически всегда. Остальное - по обстоятельствам.

Профит: если вам удалось сделать корректную диаграмму данных, то налажать потом в коде практически невозможно sm.gif.

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

Итак, начинаем с того, что фиксируем входы и выходы. Т.к. если мы не знаем, "что обрабатывать", то и внутренние блоки станут перемалывать какую-то туфту, и ничего хорошего не выйдет. На самом верхнем уровне входы и выходы называются "use cases" - как юзер захочет подергать ручки, как ему будет удобно дергать API и что он захочет получить взамен. Обычно use cases сначала выглядят несколько сумбурно, поэтому проще их выписать в столбик, чтобы найти что-то общее. Или откатиться на шаг назад и прогнать через mind map для особо тяжелых случаев.
Итого, у нас должно получиться:
  • Исходные точки
  • Стрелочки (данных), которые выходят из этих точек или приземляются в них.
Ну и остается дорисовать блоки, которые эти данные как-то переколбасят.

На что стоит обратить внимание:
  • На "стрелочках" обязательно должны быть именно данные. В идеале - подписать. В крайнем случае вы как минимум должны быть готовы ответить до мельчайших деталей, что гонится по стрелочке. Если по стрелочке гонится фик знает что - хрен вам, а не полезная диаграмма в результате.
  • Надо постоянно верифицировать, что данных на входе (стрелочек) будет достаточно для работы блока, чтобы выплюнуть то что хочется. Если что-то пропустили - дорисовываем (или помечаем отдельно). Если не подумав нарисовали лишнее - убираем.
  • Бывает, что данных очень много. Например конфиг с 20 параметрами. Такую часть иногда удобнее записать сразу в виде кода, чтобы не превращать чертеж в месиво. Но верификацию целостности все равно надо проделывать.
  • Содержимое стрелок - основа для API (внешний или внутренних). Еще один повод отнестись к ним серьезно, а не использовать их в качестве декоративных соединителей.
Примеры "стрелок":
  • Фиговый вариант - "устройство ввода". Непонятно, какие данные и как оно выплевывает.
  • Дельный вариант - "коды клавиш, байты, с клавиатуры".
Примеры очень упрощенные, только чтобы продемонстрировать суть объяснений.

По блокам внутри диаграммы. Тут универсального рецепта нет. Могу только посоветовать придерживаться некоторых ограничений:
  • Избегайте большого количество блоков. Если диаграмма распухает - уводите "лишнее" в иерархии. Обычно советуют не превышать 7-9 блоков, но это субъективно. Если у вас сверхмозг - рисуйте хоть 20, раз можете объять разумом sm.gif. Главное - не забывайте верифицировать входы-выходы у каждого блока. И не забывайте, что если планируете показывать диаграммы другим - у них может быть не такой сверхмозг как у вас.
  • Избегайте "пустых" преобразований форматов данных и бездумных шаблонов. Типичная ошибка программиста - нарисовать класс с красивым названием "потому что так правильно", и потом пытаться подогнать стрелочки под этот класс. С надеждой, что в итоге все сойдется как надо. Если вас в качестве гарантий устраивает молитва и вера в лучшее - на здоровье. Если нужны гарантии посерьезнее - стоит опираться на содержимое "стрелочек", и дорисовывать блоки под них а не наоборот. Результат может получится абсолютно не такой, как вы предполагали в начале. Причем проще и лучше sm.gif. Убеждался несколько раз.
Возможно, в конце у вас получится совсем простая диаграмма из пары-тройки блоков, и вы подумаете "неужели из-за такой тривиальщины я страдал фигнёй". Но ведь смысл именно в том, чтобы понять, как сделать просто, а не наворотить чумную вундервафлю. На практике у меня получались рисунки с 3-5 блоками, и очень редко - с подуровнем для одного-двух блоков. Просто я не вижу смысла упираться в диаграмму как в самоцель. Рисую только до той степени, которая позволить двинуться дальше - продолжить в коде.

Можно делать иначе, сложнее и т.п. Все зависит от мастерства, потребностей и т.п. Я описал один из вариантов, с чего можно начать. Очень часто этого оказывается достаточно.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Hexel   Как описывать архитектуру девайса   Jun 13 2018, 16:36
- - AlexandrY   Цитата(Hexel @ Jun 13 2018, 19:36) Компон...   Jun 13 2018, 20:18
- - a123-flex   Цитата(Hexel @ Jun 13 2018, 20:36) Такой ...   Jun 14 2018, 03:38
|- - AlexandrY   Цитата(a123-flex @ Jun 14 2018, 06:3...   Jun 14 2018, 06:16
|- - a123-flex   Цитата(AlexandrY @ Jun 14 2018, 10:16) Кс...   Jun 14 2018, 07:34
|- - AlexandrY   Цитата(a123-flex @ Jun 14 2018, 10:3...   Jun 14 2018, 07:43
|- - a123-flex   Цитата(AlexandrY @ Jun 14 2018, 11:43) Не...   Jun 14 2018, 07:58
|- - AlexandrY   Цитата(a123-flex @ Jun 14 2018, 10:5...   Jun 14 2018, 08:18
- - Hexel   Ексель - хороший вариант, но на данный момент я со...   Jun 14 2018, 06:46
|- - a123-flex   Цитата(Hexel @ Jun 14 2018, 10:46) Что ка...   Jun 14 2018, 06:55
|- - AlexandrY   Цитата(Hexel @ Jun 14 2018, 09:46) Что ка...   Jun 14 2018, 07:31
- - one_eight_seven   Цитата900 пинов эт когда вы DDR хотите сделать на ...   Jun 14 2018, 10:58
|- - AlexandrY   Цитата(one_eight_seven @ Jun 14 2018, 13...   Jun 14 2018, 11:34
|- - a123-flex   Цитата(one_eight_seven @ Jun 14 2018, 14...   Jun 14 2018, 12:08
- - one_eight_seven   ЦитатаВ это трудно поверить, но в yed нельзя даже ...   Jun 14 2018, 14:37
- - Hexel   one_eight_seven Нормальная такая штука этот yed. П...   Jun 14 2018, 16:18
|- - a123-flex   Цитата(Hexel @ Jun 14 2018, 19:18) А что ...   Jun 14 2018, 19:04
- - p_v   Давайте начнем с нуля. Для начала, вы должны четко...   Jun 18 2018, 07:31
|- - AlexandrY   Цитата(p_v @ Jun 18 2018, 10:31) Инструме...   Jun 18 2018, 08:22
||- - p_v   Давайте не будем пытаться устраивать холивар и тем...   Jun 18 2018, 08:53
||- - AlexandrY   Цитата(p_v @ Jun 18 2018, 11:53) Давайте ...   Jun 18 2018, 10:26
||- - p_v   Цитата(Hexel @ Jun 13 2018, 19:36) Вот я ...   Jun 18 2018, 10:59
|- - a123-flex   Цитата(p_v @ Jun 18 2018, 10:31) На самом...   Jun 20 2018, 10:35
|- - p_v   Цитата(a123-flex @ Jun 20 2018, 13:3...   Jun 20 2018, 11:10
||- - a123-flex   Цитата(p_v @ Jun 20 2018, 14:10) Это из м...   Jun 20 2018, 11:38
||- - p_v   Цитата(a123-flex @ Jun 20 2018, 14:3...   Jun 20 2018, 12:17
|||- - a123-flex   Цитата(p_v @ Jun 20 2018, 15:17) Да сам н...   Jun 20 2018, 12:38
|||- - AlexandrY   Цитата(p_v @ Jun 20 2018, 15:17) Мне врем...   Jun 20 2018, 12:41
|||- - p_v   Цитата(AlexandrY @ Jun 20 2018, 15:41) Но...   Jun 20 2018, 13:21
|||- - AlexandrY   Цитата(p_v @ Jun 20 2018, 16:21) Просто н...   Jun 20 2018, 13:48
|||- - p_v   Хоссподя... ну вот человек только что с треском об...   Jun 20 2018, 14:44
||- - AlexandrY   Цитата(a123-flex @ Jun 20 2018, 14:3...   Jun 20 2018, 12:24
|- - AlexandrY   Цитата(a123-flex @ Jun 20 2018, 13:3...   Jun 20 2018, 11:28
- - one_eight_seven   ЦитатаСкажем честно 1. Кто вам дал право определя...   Jun 18 2018, 10:28
|- - AlexandrY   Цитата(one_eight_seven @ Jun 18 2018, 13...   Jun 18 2018, 11:04
- - p_v   Давайте допустим такой вариант, что я могу как мин...   Jun 18 2018, 11:30
|- - AlexandrY   Цитата(p_v @ Jun 18 2018, 14:30) Давайте ...   Jun 18 2018, 12:22
|- - p_v   Цитата(AlexandrY @ Jun 18 2018, 15:22) Пр...   Jun 18 2018, 13:23
||- - AlexandrY   Цитата(p_v @ Jun 18 2018, 16:23) Это ваше...   Jun 18 2018, 19:32
|- - a123-flex   Цитата(AlexandrY @ Jun 18 2018, 15:22) Ре...   Jun 19 2018, 20:33
- - p_v   Теперь по инструментам. Лично у меня очень экстрем...   Jun 18 2018, 18:13
- - one_eight_seven   Цитатаданном проекте речь о проектировании машины ...   Jun 18 2018, 19:55
- - p_v   У ВАС на ВАШИХ задачах - свой опыт. У МЕНЯ на МОИХ...   Jun 18 2018, 20:00
|- - AlexandrY   Цитата(p_v @ Jun 18 2018, 23:00) Я отвеча...   Jun 18 2018, 20:18
|- - p_v   Цитата(AlexandrY @ Jun 18 2018, 23:18) А ...   Jun 18 2018, 21:02
- - Hexel   сейчас я между прочим пытаюсь применить sybase PD1...   Jun 20 2018, 07:04
|- - AlexandrY   Цитата(Hexel @ Jun 20 2018, 10:04) сейчас...   Jun 20 2018, 08:57
- - Hexel   p_v Пожалуста, не нужно развивать этот спор. Вы по...   Jun 20 2018, 15:37
- - p_v   Цитата(Hexel @ Jun 20 2018, 18:37) ... Ко...   Jun 20 2018, 16:31
- - a123-flex   Цитата(p_v @ Jun 20 2018, 20:31) Когда за...   Jun 20 2018, 17:54
- - p_v   Цитата(a123-flex @ Jun 20 2018, 20:5...   Jun 20 2018, 18:08
- - a123-flex   Цитата(p_v @ Jun 20 2018, 22:08) Железку,...   Jun 20 2018, 18:19
- - p_v   Цитата(a123-flex @ Jun 20 2018, 21:1...   Jun 20 2018, 19:32


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 11th August 2025 - 20:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.02153 секунд с 7
ELECTRONIX ©2004-2016