Раньше программаторы для микроконтроллеров делал для себя сам. Но все мы становимся со временем хуже, и на этот раз я поленился и решил купить готовый. Речь идет про микроконтроллеры STM32.
Вообще говоря, им вообще не требуется программатор. Если подать единицу на вывод BOOT0 (при нуле на BOOT1), то программа стартует с встроенного загрузчика, который позволяет программировать контроллер по UART (как один из вариантов, можно и через другие интерфейсы). Обычно при этом применяют переходник USB – UART. Но это не очень удобно, лучше использовать для программирования и отладки интерфейс SWD. У меня есть плата Discovery со встроенным отладчиком и штырьками SWD, которую вначале и использовал. Но хотелось иметь отдельный программатор, и тут на Aliexpress увидел по вполне доступной цене клон ST-LINK V2 в красивом корпусе. Этот корпус и склонил меня к покупке.
Качество исполнения корпуса и логотип – прямо как у фирменной вещи. Снизу – большая наклейка, где часть надписей на китайском.
В комплекте идет провод USB (довольно тонкий), шлейф с разъемами IDC на 20 контактов, провод интерфейса SWIM для программирования STM8 (с ними пока дела не имел) и провод, которым можно подключиться к SWD.
Посмотрим, что у него внутри. Корпус скрепляется двумя саморезами, которые расположены под наклейкой снизу. Наклейка держится хорошо, отрывается с трудом. Потом ее можно приклеить обратно.
Внутри все красиво, качество литья пластика вопросов не вызывает. Плата тоже спаяна аккуратно.
На плате установлен микроконтроллер Geehy APM32F103CBT6. Судя по обозначению, это клон STM32F103CBT6, но раньше я такого клона не встречал.
Сайт производителя нашелся без проблем. При подключении программатора к компьютеру в окне утилиты STM32 ST-LINK Utility можно увидеть версию прошивки: «ST-LINK Firmware version: V2J28S7».
Рядом с разъемом USB виден стабилизатор напряжения на 3.3 В с маркировкой 422P (LN1154B332MR-G). Максимальный выходной ток – 300 мА. Элементов защиты линий USB не замечено.
Фото платы с двух сторон в более высоком разрешении:
Дополнение: плата и схема оригинального ST-LINK V2 имеет отличия. Сам я такую плату никогда не видел, все данные из Интернета. Вот эта плата и схема:
На линиях интерфейса SWD установлена ESD-защита (ESDA5V3L, маркировка EL53). Еще есть буфер (SN74LVC8T245, маркировка NH245), который позволяет работать с V_TARGET (напряжение питания отлаживаемого устройства) не равным 3.3 В. У меня такой необходимости пока не возникало, STM32 всегда питаю от 3.3 В. Что касается защиты, то при желании ее можно добавить и на плату клона. Снизу полигон земли находится рядом со всеми выводами разъема, можно добавить, скажем, стабилитроны на 5.1 В в корпусе SOT-23.
Основной разъем здесь – 20-контактный, который обычно используют для JTAG. Но я не понимаю, что должно случиться, чтобы поставить такой разъем в свое устройство. JTAG для ПЛИС и то использует намного более компактный 10-пиновый разъем. К тому же, у STM32 есть удобный интерфейс SWD, который требует в минимальной конфигурации подключения всего 4-х проводов. Но тут делать это крайне неудобно – надо по одному подключать провода к штырькам 20-контактного разъема, можно легко ошибиться. Такое терпеть невозможно, и я сделал переходник – в разъем IDC-20 завел отдельные провода, а на другом конце установил 4-контактный разъем.
Очень удобно, когда отлаживаемое устройство может питаться от программатора. Здесь как раз есть выход напряжения питания +3.3 В (контакт 19). Для включения питания это напряжение надо подать на вывод V_TARGET. Но делать такое соединение постоянным неправильно. Когда устройство питается от собственного источника, он окажется подключенным к выходу питания программатора, что плохо. Поэтому лучше предусмотреть выключатель питания, что у меня в этом переходнике и сделано.
Готовые переходники с 20-контактного разъема JTAG на 4-контактный SWD существуют (
ссылка,
ссылка), но выполнены они не самым лучшим образом. И у них нет возможности подключения питания. И они торчат вверх, что очень неудобно.
Видел на фото более подходящий переходник с джампером для включения питания, но там используется сверхплоский шлейф, что в любительских условиях непрактично.
Возможно, я бы и дальше жил со своим переходником, но однажды пришлось сделать устройство на STM32 с режимом сна. Когда устройство находится во сне с выключенным тактовым генератором, то подключиться к нему по SWD нельзя. Аналогичная ситуация возникает и в случае, когда интерфейс SWD программно отключен. Мне приходили с Aliexpress контроллеры в таком состоянии. В этих случаях требуется подключение программатора с использованием сигнала сброса (Connect Under Reset). Подача сигнала сброса не требует большой скорости, это можно сделать даже вручную: закоротить вход сброса на землю, запустить утилиту программирования, быстро раскоротить. Но удобнее, когда сброс будет подаваться автоматически. Для этого потребуется 5-проводное подключение (добавляется сигнал NRST). Поэтому я решил сделать новый переходник. Схема переходника получилась следующая:
Отдельно надо сказать о распиновке разъема SWD. Я привык к схеме, которая реализована на плате Discovery.
Такое расположение контактов выглядит очень логичным: между сигналами SWCLK и SWDIO в шлейфе проходит земля, что снижает взаимные наводки. Именно такую разводку разъема я использую во всех своих устройствах. Но с большим удивлением я обнаружил, что на популярных платах Blue Pill (и некоторых других) разводка SWD другая.
Такая разводка мне кажется менее логичной, поэтому в переходнике я сделаю как в Discovery. А для подобных плат сделаю отдельный провод, где просто переставлю контакты разъема.
Чтобы переходник выглядел приличней, решил спрятать весь монтаж снизу, сделав его полностью SMD, включая разъем. Светодиод смонтирую так, чтобы излучение было направлено к плате, где будет отверстие. Выключатель нашелся для обычного монтажа в отверстия, но сделать из него SMD не проблема. Его тоже буду паять снизу, а для корпуса сделаю в плате прямоугольное окно. Заодно оно сделает крепление выключателя более надежным. Плата развелась так:
Ну а дальше – изготовление. Вырезаю заготовку из одностороннего стеклотекстолита толщиной 1.5 мм с размерами чуть больше будущей платы. Теперь – мой любимый ЛУТ. Несколько минут, и рисунок перенесен на текстолит.
Дальше – травление. Такая маленькая плата проходит через горло в бутылку с хлорным железом, поэтому пачкать ванночку нет смысла. Просто подвешиваю плату на тоненькой проволочке внутри бутылки. Можно заниматься своими делами, пока плата травится. Лишь изредка надо вынимать ее за проволочку и смотреть результат.
Плата вытравлена, следующий этап – обработка контура. Это можно сделать ножовкой и напильником, но я делаю это на фрезерном станке.
Отверстий в этой плате почти нет, только одно для светодиода, плюс окно для выключателя. Для светодиода сверлю отверстие сначала диаметром 2 мм, затем сверху с помощью зенкера с углом 90 градусов делаю его коническим. Для выключателя фрезерую паз (но можно просто просверлить пару отверстий), затем довожу надфилем до прямоугольной формы.
Осталось спаять плату. Для светодиода отверстие тоже немного доработал надфилем, чтобы в него входила выступающая прямоугольная часть светодиода, и он плотно лежал на плате. Выходные штырьки взял с черным пластиком, кроме первого, где пластик красный. Это будет маркер первого вывода.
Вместе с ST-LINK переходник выглядит так:
Поверхность платы выглядит несколько пустовато, надо будет напечатать сюда этикетку с пояснениями.
Теперь очередь за проводами. Сначала делаю простейший провод с 4-контактными разъемами для подключения SWD с разводкой как у Discovery. Первый контакт обозначен красной полоской на шлейфе.
Второй провод – с разводкой контактов как у Blue Pill. Делаю разъем белым, ну типа белая ворона.
И теперь то, ради чего все это затевалось – 5-контакный переходник с контактом NRST. Он мне понадобился для конкретных плат, где штырьки для SWD вообще запаиваться не будут. Отверстия для этих штырьков остаются свободными. Контактировать с такими отверстиями можно с помощью подпружиненных контактов, которые продаются на Aliexpress (
ссылка). Такие контакты были куплены.
Вот чертеж контакта с сайта продавца, размеры на нем более-менее соответствуют действительности:
Смонтировать эти контакты можно прямо в вилке разъема, они нормально входят в контакты разъема, если удалить пружинящие язычки. Вставляются довольно плотно, потом пропаиваются. Дальше обычным образом разделывается провод.
В корпусе разъема отверстия надо немного увеличить (сверлом примерно 1.4 мм), чтобы прошли конические части контактов.
Провод готов.
Проверка показала, что контактировать к плате с отверстиями им вполне удобно.
Раньше я для этих целей использовал гребенку со слегка изогнутыми контактами. Тоже вполне годный вариант, как плюс – держится сама. Но все зависит от задачи. Если надо быстро зашить много плат, удобней подпружиненные контакты.
Для программирования использую bat-файл такого содержания:
C:\Progra~1\STMicr~1\STM32S~1\ST-LIN~1\ST-LINK_CLI.exe -c SWD UR -P %1 -V -Rst -Run
pause
В командной строке ему передается имя hex-файла. Иногда вписываю имя прямо в этот файл, когда надо прошивать много одинаковых плат. При вызове утилиты командной строки ST-LINK_CLI.exe используется параметр UR, который означает Connect Under Reset. Если сигнал сброса не используется, этот параметр не нужен. Описание параметров командной строки есть в документе UM0892 «STM32 ST-LINK utility software description».
Программирую в среде IAR, для удобства прошивки после компиляции назначил кнопку F8 для запуска утилиты ST-LINK. Настройки следующие:
В полях введены следующие строки:
C:\Program Files\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ST-LINK_CLI.exe
-c SWD -P $TARGET_BPATH$.hex -V -Rst –Run
Вывод отладочной информации через SWO не проверял, на своих платах я никогда SWO не вывожу на разъем. Но в самом программаторе сигнал SWO выведен на контакт 13 разъема. По протоколу JTAG также работать не пробовал за ненадобностью. Есть проекты самодельных программаторов, которые имеют более широкие возможности, например, вот
этот. Но при такой цене за готовый программатор делать что-то свое не имеет особого смысла.
Дополнение: ST-LINK и пустота. Пустое место на плате переходника не дает нормально работать. С этим надо что-то делать. Перенес контур платы в Corel Draw (из PCAD напечатал в файл post script, затем этот файл открыл в Corel) и нарисовал этикетку.
Для печати взял пленку из металлизированного полиэстера Apli. Это прекрасная пленка для всяких наклеек, но безумно дорогая. У меня остались лишь обрезки от одного листа А4, который я выпросил на старом месте работы. Продается она пачками, от цены за пачку мутнеет в глазах и разгорается любовь к пустоте и свободному от этикеток пространству.
Напечатал наклейку на лазерном принтере и приклеил ее к плате переходника. Теперь всё, работать можно. Единственное, пока размышляю, может добавить защиту на линии SWD.
Можно подвести итог:
Плюсы:
+ работает;
+ красивый корпус;
+ можно программировать STM32 и STM8;
+ поддержка JTAG и SWD;
+ в комплекте USB кабель и все необходимые провода.
Минусы:
– не лучшее решение штатного переходника для SWD.
Я вот, со временем стал только лучше. )
А программатор где-то такой валяется, брал давно, и ценник в раза 3-4 был выше.
З.Ы. Спасибо за статью, как всегда!
У меня пылесос с фильтрами через которые асбест не летит…
Будучи смазанной маслицом стружка лежит на поверхности…
а чем не угодили «народные» стлинки по полтора-два бакса?
я про такие и подобные — тысячи их на Алишечке, можно спокойно выбрать для своего региона с наименьшим ценником
https://aliexpress.com/item/1005003575620794.html
В шкафу подотчетный оригинальный референс, за него платил не я но его рано или поздно придется возвращать или оплачивать из своего кармана.
Используется референс крайне редко, как правило в ситуациях когда что-то идет не так и последняя надежда на то, что виновата «поддельность».
Так вот если бы у свистка был референс то использовал бы свистки, а так как референса нет то использую мыльницы.
1) Debug Wire — его таки нет, а жаль, приятная штука.
2) Virtual COM Port — вроде как в 2.1 он есть, но на «свистках» какие-то сильно разные отзывы о том, завёлся или нет. То есть с дебаггера подключаемся ещё на tx/rx на отлаживаемом контроллере, и дебаггер работает как usb-serial заодно.
И физически этих пинов тоже на 10-контактном разъеме свистка нет?
Может, и можно что-то наколхозить, мне хабровская статья попадалась — там что-то получалось, что-то нет, но деталей не помню.
Я искренне не понимаю смысла ковыряния в этих свистках, которые для начала надо расковырять, отмыть и заизолировать, если в в любую «таблетку» можно зашить совершенно понятный дебаггер, к которому есть исходники, документация и люди, готовые помочь в случае чего.
ну это пока вы его в CubeIDE не использовали.
Но, иногда, новый инструмент бывает намного удобнее (после его освоения), чем старый, пусть и привычный.
Однако согласен — если творческий зуд не беспокоит и все насущные задачи успешно решаются теми инструментами, к которым уже привык — то нет смысла тратить время на изучение чего-то нового… Хотя это, как по мне, верный признак старости и закостенелости )))
Сужу по себе )
На самом деле самый покупаемый компилятор это GreenHills, он занимает половину корпоративного рынка, IAR только второй.
Secure Development — достаточно давняя тема в С++, многие моменты сейчас подсвечиваются даже самим компилятором. Какая-то часть уже отрабатывается «автоматически» (типа C++ cast only). Но осознанные нарушение (типа арифметики указателей), конечно же, применяются.
Оригинал можно обновить, и он снова в деле, а с этим клоном придётся доставать бубен и разбираться, как пользоваться OpenOCD (в принципе, ничего сложного).
Кстати, на Али продаются «прищепки» с такими пинами, которые идеально подойдут в Вашей ситуации — можно будет не держать разъём, а подключить прищепку и убрать руки. Вот пример:прищепка для программирования
К сожалению, Вы приобрели явную подделку оригинального программатора — в оригинале множество дополнительных деталей, например, защитный буфер на линиях данных.
Согласен, что с большинстве ситуаций достаточно и такой версии без защит, но тогда экономически более целесообразно купить «свисток» ST-Link на том же Али — стоит 2-3 доллара, начинка абсолютно такая же, как у Вашего программатора. Единственный недостаток — разведены только линии SWD, полноценный JTAG использовать не получится. Но не думаю, что это существенно — у микроконтроллеров STM32 SWD отлично работает. Вот пример: St-Link V2
Если ориентироваться на будущее, можно поискать ST-Link V3, но они выпускаются в абсолютно убогих исполнениях, стоят дороже, а дополнительного функционала не дают.
Кстати, множество выходов из строя китайских программаторов ST-Link V2 связаны с некачественными кварцами на 8 МГц. Если программатор перестал подавать признаки жизни, стоит попробовать перепаять кварц — зачастую помогает.
Знаю. Только не «к сожалению», а «к радости», ибо не подделка стоила бы других денег. А сгорит — так сгорит, процессор поменять не проблема, прошивки доступны. Главное — корпус останется.
Решительно не нравится эстетика. У того, что в обзоре, очень красивый корпус, это и стало решающим в выборе. Еще плюс — разъем mini-USB, который у меня всегда на рабочем столе, а так надо будет еще удлинитель USB заводить.
Я вообще не знаю, зачем это нужно.
Спасибо! В своих конструкциях я тоже с таким столкнулся. Купил на Aliexpress кварцы, так было уже довольно много случаев, когда они уходили в обрыв.
и «ручные»:
Всё равно, конечно, дороже наборов для сборки, но прикуплю.
даже если монтажники спалят — не жалко за их цену.
про пого-пины — спасибо.
Связано это вероятно с наличием большого количества земель, делающих возможным использовать простые плоские кабеля с изоляцией сигнальных проводов друг от друга земляным проводом, это крайне важно для быстрых дебагеров, коим ST-Link не является но очень хочет казаться.
Железячники и девы работают параллельно, и примерно 75% кода готово до выхода первого сэмпла от железячников, и как раз таки на девбордах. Очень часто и дальше продолжают дебажить на девбордах лишь изредка проверяя ключевые релизы на сэмпле. Уже ближе к финалу переходят на дебаг на сэмпле, если это возможно, что встречается не часто.
Имея большой опыт самостоятельной работы это по началу очень тяжело понять, особенно когда впервые заходишь в компанию делающую скажем роботов и ждешь что на каждом рабочем месте как минимум десептиконы а там ни одного реального образца а куча вот таких вот плат и коробок с лампочками и переключателями к этим платам подключенными, а до самого робота еще как до луны пешком.
фотку кстати не правильную вставил, вот эта должна была быть
ссылка
В любом серьёзном проекте ты целое толком не увидишь, так как делаешь маленький кусочек. когда-то меня это тревожило, пото попустило. То, что удалось пару раз за железку подержаться ничего особо не меняет. А там, где делаешь целиком — это какая-то мелочёвка, банально в силу ограниченности человеческих возможностей.
Времена когда программист действительно участвовал в разработке у крупных компаний давно уже прошли, у средних на исходе, а у мелких эти времена закончатся скорее всего вместе с мелкими компаниями.
сколько человек в команде?
Ещё раз говорю — раньше и было «все занимаются своим» — подход исчерпал себя, слишком много накладных расходов и потерь времени на согласования. Сейчас, грубо говоря, девопсы занимаются тем, где нужно знать глубокую девопсовскую специфику, а если мне тупо в моём билд плане дефолтное значение переменной поменять или к скрипту параметр добавить — я могу это сделать сам, максимум получив аппрув. А было так, что мне дольше объяснять, что нужно, чем сделать, потому что я своё поле наизусть знаю, а у девопсов таких планов пара сотен.
И кого-то обязательно за это трахнут, а именно того кто отвечает за дефолтные значения, конкретно системного инженера или рек инженера, потому что они дали св архитекту значения а он их дал мне. Еще раз возникнет у меня желание менять дефолт кого-то из них опять трахнут, но жестче. И так до тех пор, пока он не поймет что надо включать мозги когда выбираешь дефолт. И после этого у меня не возникнет желания менять дефолт- в этом и смысл, каждый делает свое дело правильно и другим не нужно напрягаться.
А у вас просто махновщина, кто-то другой накосячил с дефолтом или забыл добавить параметр в архитектуру которую ты уже реализовал и тут ты такой добрый устремился фиксить, ага, а потом еще раз и еще раз, а ему пофигу, зачем если есть ты.
Я (точнее, команда) отвечаю за подсистему, в том числе за то, чтобы относящиеся к ней билд планы ранились как нужно и демонстрировали, что всё работает соответственно рекам. Сиайщики детали наших билд планов, по большому счёту, не знают — их банально много, и разных, заточенных под потребности той или иной команды.
И если при рефакторинге мы решили, что какой-то параметр удобно иметь конфигурируемым и добавили дополнительную перменную в билд план, чтобы для отладки можно было как-то изменить поведение — это наше внутреннее дело, снаружи никому не интересное. Или там — в плане смены дефолта — решили, что всё отладили и логи в 200 мегабайт по дефолту нам ни к чему, и понизили дефолтный уровень логирования. В общем, это не те вещи, где надо бегать и согласовывать.
И тут два варианта — либо я иду к команде CI, завожу им тикет, они его куда-то там планируют и в конце концов делают Либо правлю сам (благо, там одна строка), даю им на ревью, и готово.
Это называется «специалист широкого профиля». Раньше такие ценились, т.к. «могли всё». Сейчас «всё» стало настолько обширным, что уже невозможно его объять одним человеком. Поэтому на первый план выходят знания в одной конкретной области, но глубокие.
Я тоже когда-то работал в небольших компаниях, знал «всё» по нашему продукту и мог заменить любого другого работника на любом этапе. Переход в более крупную компанию был болезненным — месяца два меня не покидало ощущение неполноценности, что я не понимаю, что происходит там, там и там. Но потом я понял, насколько это хорошо — я сосредотачиваюсь на свой области, а если мне нужна информация о других частях продукта — я всегда могу по любому вопросу обратиться и получить консультацию, ведь я окружен такими же профессионалами в своих областях, которым я вполне могу доверять.
Вот это и плохо. У меня бывали случаи, когда связывался с какой-то тематикой, которая длилась годы. От скуки помереть можно. Нравится постоянно менять проекты и области приложения своих сил. Вот сейчас приходится с лазерной оптикой дело иметь, вчера делал для коровника счетчик молока при доильном аппарате, позавчера — электронику для DLTS-спектрометра, который делался по программе CERN для БАК, а завтра вообще не знаю, что буду делать. Когда большая компания годами делает один продукт, и заниматься еще малой его частью — да зачем это надо? Лучше неглубоко, но шире и разнообразней.
Люди уже привыкли покупать готовые решения в Китае, вот я помню 20 лет назад взял 1000 баксов за контроллер для гостиничной стиральной машины, оригинальная плата стоила штук около 5ти. Там работы то было на 2 недели, экран кнопки да релюшки.
А теперь на алиэкспрессе универсальный контроллер стиральной машины с экраном и датчиком стоит 40 баксов, сорок мать его баксов. И так почти во всех темах, с которых мы кушали хлеб с маслом и иногда икрой в конце 90тых начале 2000, куда не ткнись уже есть готовое решение за очень не дорого.
На живом железе есть только тесты, к которым программист не имеет никакого отношения, куча специально обученных людей на разных уровнях делают свою работу и до программиста дело доходит только в форме отчета о ошибке уже воспроизведенной на эмуляторах. Программист фиксит, загружает в репозиторий и забывает как страшный сон.
Чем круче компания тем меньше шансов у программиста даже поговорить напрямую с тем, кто видел робота, потому что роли очень четко распределены по уровням.
В маленьких компаниях с маленькими бюджетами да, программист и швец и жнец и на дуде игрец, и он будет заниматься отладкой на живом железе, потому что некому было отловить его косяки на всех предыдущих этапах.
NDA, так что деталей не будет, но вполне большая контора и серьёзная железка. Понятно, что отладка в виде степов и брякпоинтов не работает, но влезть на живое железо и, скажем, процесс перезапустить или какие-то сообщения поправить — в порядке вещей, как и нужную версию софта накатить.
А вот описанный вами процесс — «до программиста дело доходит только в форме отчета о ошибке уже воспроизведенной на эмуляторах» — вообще не слишком понимаю, потому что для того, чтобы что-то сложное воспроизвести на эмуляторе и получить достаточные для фикса данные нужна та же квалификация и то же понимание работы, что и для самого фикса, соответственно, получится просто лишняя бюрократия, проще этим одному человеку заниматься. Да и полноценный эмулятор, со всеми системами, эмуляцией движков, корректными задежками, потерями сигнала и прочим — может, сделать и можно, но стоимость будет такая, что дешевле лишний десяток реальных железок поставить, и результаты на них надёжнее и быстрее получать.
Вообще из моего опыта работы со сложным железом — чем оно сложнее, тем менее выгодна возня с более-менее полноценными эмуляторами. Какие-то куски замокать — да, дать среду, в которой можно начерно что-то разработать и проверить — тоже да, но с полным пониманием, что все нюансы не поймаешь, и просто сократишь конкуренцию за железки (что тоже важно, конечно).
Вся эта система типа EC15504 и прочих V-model сделана именно для того, чтоб избежать «одного человека», заменить его на толпу середнячков каждый из которых делает свою узкую работу. И это оказывается в конечном счете выгоднее и стабильнее чем один гении который делает все сам и который завтра может попасть под трамвай и обрушить бизнес кучи зависимых компаний.
Про гениев никто и не говорил. Вполне себе толпа обычных разработчиков, не вижу, как это связано с наличием/отсутствием эмулятора. Делать полноценный эмулятор — долго/дорого, проще готовую систему использовать. А эмулятор имеет смысл простой, трудозатраты которого на два порядка меньше и который позволяет раза в четыре разгрузить тестовые машины.
В общем, давайте сойдёмся, что бывает и так и так, всё равно детали толком дать ни вы не можете, ни я.
Кстати, у нас в итоге вышло, что «каждый из которых делает свою узкую работу» не прокатывает, в итоге всё перетрясли и заставили народ освоить смежную функциональность, а то слишком много пинания задач на коллег получалось.
Общая идея — улучшить понимание смежников и дать возможность, как минимум, тривиальные пятиминутные задачи не пинать к кому-то, а сделать самому, плюс повысить гибкость, чтобы не выходило, что одни стоят и ждут других. Подход вообще здравый, но, понятно, есть те, кто из своей канавы вылезать не хочет ни в какую.
Главное не сболтнуть это кому-то из коллег, точно настучат ашэрам что я в неадеквате.
1) Избавляет от ожидания от коллег, пока они сделают банальные вещи, которые ты вообще-то можешь сделать сам за пять минут.
2) Ломает менталитет «это не моя проблема».
3) Позволяет лучше понять боль коллег и, соответсвенно, стимулирует делать так, чтобы этой боли было поменьше. когда разработчик при реализации думает о том, как это верифицировать или деплоить — это хорошо.
4) Заставляет профессионально расти.
2. Это действительно не моя проблема. У моего лида зарплата на 20% выше моей, почему я должен заниматься тем что не досмотрел он?
3. Боль коллег устраняется четким следованием документу, который описывает принципы написания кода, если там написано что нельзя в if закидывать функцию то ты не должен ее туда закидывать, если написано что нельзя из for вываливаться по брейку то ты не должен так делать, не по тому что тебе жалко тестера а потому что просто нельзя.
4. Никакого роста внутри проекта нет, никто не даст в угоду тщеславию ломать KPI. Все что связанно с ростом это тренинги, которые делают в те периоды проекта, когда нагрузка минимальна.
2. Ну, как бы, зарплата — даже не её размер, а наличие — зависит от выполнения задач более-менее в срок. То есть в этом все заинтересованы. Предлагаете, чтобы только тим лид следил за тем, чтобы, скажем, написанное было удобно деплоить на железо? А «удобно» — это такая штука, которая формализуется плохо.
3. Это банальности. А вот устранить боль коллег, которые не могут выдернуть достаточные данные для теста, потому что вы к ним банально не даёте доступ можно только зная, что этот тест есть. А для этого с ними поговорить надо и уточнить, как вы будете верифицировать вот это конкретно требование. Или у вас тест предполагает два деплоя, а потом к вам приходит сиайщик и говорит — ну хорошо, но деплой — это два часа. Ты не можешь что-то с этим сделать? А оказывается, ты вообще можешь ничего не деплоить, а просто закинуть пару файлов на железку, но дедеплой было инициировать проще.
4. Вообще-то профессиональный рост и даёт рост KPI. Вы лучше понимаете систему, больше знаете — ваша продуктивность растёт. Уж не знаю, при чём тут тщеславие. И лучший способ для этого — не тренинги, а как раз реальная не сильно сложная задача плюс кто-то из коллег, кто может в случае чего подсказать, что к чему. Плюс фирме это даёт большую гибкость в аллокации ресурсов, в и тоге — все в выгоде.
У нас такого нет, если я не получу зарплату и при этом мой KPI в норме то на следующий день после расчетного я пишу в таймшите вынужденный простой и не прихожу на работу, пока на карту не упадут денежки. И за простой я тоже получу полную зарплату. И это знает мой работодатель, по этому он и не занимается такими манипуляциями с перекладыванием ответственности и очень жестко пресекает все попытки отойти от принятого жесткого рабочего цикла с четким разделением ролей, в котором все медленно но надежно, как на кладбище.
Кстати, если что — в норме график работ не делается скрам мастером.
15 лет проработал компаниях до 50 чел, начинал со студента-практиканта закончил продакт оунером. Какраз слово в слово говорил все то, что говоришь ты, верил в это и хотел чтоб это продолжалось всю жизнь.
В результате случайного знакомства перешел в очень крупную компанию, убеждая себя в том что это только изза денег, вот заработаю и обязательно вернусь в махновщину. Но очень быстро понял что в махновщине будущего нет, и вот уже 15 лет работаю только в крупных компаниях, и считаю что то, во что верил прошлые 15 лет, является простым инфантилизмом и не желанием принимать свое место в пищевой цепочке.
Но человеку свойственно хотеть, мне вот хочется Теслу купить, смогу ли я на нее заработать делая счетчик надоя- сомневаюсь, а работая в крупной компании- да легко.
То, что вы описали, как раз особо будущего не имеет из-за явных проблем с гибкостью. А тенденция обратная — не зря все на тот или иной вариант Agile поуходили.
Да, бывают непредвиденные вещи, например недавнее наводнение на заводе в Тайване, но это форсмажор, на такие случаи всегда есть шаг за шагом описанный план B которому надо следовать а не проявлять гибкость.
Во-первых, потому что рыночная ситуация имеет свойство меняться — как со стороны клиентов, так и конкурентов. А у вас, образно говоря, получается, что когда Эппл выкатила айфон Нокия продолжает кнопочники клепать — там, собственно, что-то близкое и произошло, наглядный пример, так сказать.
Во-вторых потому что сложную систему вообще, совсем, в принципе нельзя безошибочно спроектировать с начала до конца. Всегда будут изменения и дополнительные итерации. От «поставщик обанкротился и компоненты надо менять» до «не вывозим, нужен более мощный FPGA, который вдвое дороже, давайте резать фичи». Мелочи наподобие того, что у стороннего компонента, как оказалось, одна из фич, считай, не работает, я и не упоминаю, когда этих компонент тысячи — это неизбежно. А в водопаде пока пройдёт цикл изменений — впору новый запускать, потому что ещё что-то поменялось.
В-третьих, для хоть какой-то предсказуемости приходится оставлять немереный запас по затратам ресурсов и времени — вон, как у вас выше — «медленно но надежно, как на кладбище». Вот на кладбище оно и попадёт, потому что конкурентам не лень шевелиться быстрее и реагировать активнее.
А уж после начала продаж что начинается, когда приезжает реальный фидбек от клиентов и от сейлзов — это отдельное веселье.
В общем, не зря этот подход практически вымер.
Siemens/Varian
Siemens/Dade
DaVinci
DaVinci — не понял, который, много их, сходу три выгуглилось.
ДаВинчи это хирургические роботы- это уж точно никак нельзя назвать вымирающим.
Далее после переезда работал уже в Liebherr, сначала для скоростных железных дорог, потом краны для монтажа ветрогенераторов- тоже совсем не вымирающие виды.
То где работаю сейчас уже озвучить не могу.
И везде одинаковые требования к процессу разработки ПО, отличия только в стандартах и объеме бюрократии, чем выше риски тем выше процент бюрократии, в Сименсе примерно 80% времени уходило на бюрократию, в Либхере 60%, сейчас примерно 90%. И никакой «гибкости», никакой «махновщины».
Только я не могу похвастаться работой в Сименса подобных конторах но однажды работать в компании, которая производила железо миллионными партиями. Это считается?
Там вот дебажили всё именно на реальных железках. Да были и девборды, но на самом начальном уровне
Но если загрузить мой говнокод в какой-то статический анализатор сконфигурированный скажем на самый тяжелый стандарт из медицины, авто или авиации то я уделаю всех «гибких» как котят, потому что я пишу такой код каждый день и знаю на что должен быть похож продукт желающий получить сертификацию Боинга или претендовать на использование в ADAS уровня 5.
И это при том, что я уже 15 лет не отлаживал софт на полностью живом железе, в редких случаях на живой голове когда ее можно поставить на стол, а все остальное только эмуляция, как и везде, во всех фирмах занимающихся техникой главным требованием к которой является «не навреди человеку».
Так ведут себя многие, тотже Лебхер в котором я работал, с одной стороны бытовые холодильники, а с другой системы охлаждения для истребителей.
Но этот подход показывает результат- ведь МакБук есть, а продуктов чьи разработчики не придерживались такого-же подхода или не существует или они сильно позади МакБука.
У меня сейчас больше пересборок, чем чего-то ещё, так что избыток свободного времени днём… что заметно :-)
Биты надо поставить в DBGMCU для отладки в Sleep и Standby режимах
Еще отмечу, если память не изменяет, полноценный стлинк можно сделать из блю пилки — неудобство только в том, что распиновка хаотичная.
Программатор тоже копия как и у вас, но рассматриваю вариант покупки оригинального с гальванической развязкой. Не за свои конечно средства.
Вижу, выводите на край плату кучу сигналов — и SWO, и RXD с TXD. Реально используете?
Почему захотелось купить с гальванической развязкой? Были какие-то инциденты? Я вижу только одно применение развязанному — дебажить какие-то аудиоустройства. А то с подключенной к компьютеру землей образуется петля с землей аудиокарты и уровень помех заметно повышается.
Были случаи выхода МК из строя при подключении платы. Возможно статика или разность потенциалов земли. Использую одновременное подключение двумя интерфейсами, SWO и USB.
У меня были мысли собрать программатор по руководству автора ютуб канала Vladimir Medintsev. Но пока в этом не увидел крайней нужды.
вот посмотрите.
и продублировал в лс
Но, вообще, касательно питания давно понял — если есть возможность получать требуемое напряжение без внешних деталей — надо её использовать и ставить специализированные чипы. Что угодно может случиться с верхним резистором и приехали.
https://aliexpress.ru/item/1005005303809188.html
чип оригинальный, никаких проблем с обновами и программирование где бы не было.
За подробный разбор спасибо, многое из этого будет полезно для меня как новичку.
Схему для P-CAD не выложите?
Питать свое устройство, про которое известно всё — да, допустимо. Но зачем привыкать к плохой практике? Завтра может и свое устройство оказаться таким, что его питать будет нельзя, а тогда надо помнить, какое питать можно, а какое — нельзя.
Первую половину жизни казалось крутым учиться всяким правилам, ставить защиты и прочее. Но в жизни так мало всего сгорало, что стало понятно — с перестаховкой случился явный перебор.
Существует, как минимум, два программатора, о которых есть масса хороших отзывов, есть активная разработка/поддержка и открытый код: Black Magic Probe и Pico DebugProbe. Первый идёт на куче платок с STM32 (в т.ч. blue pill/black pill), второй — на копеечной raspberry pi pico.
А тут, получается, натурально купили корпус с непонятной микросхемой, и в ней — непонятной прошивкой. То, что в клонах ST-Link буферов нет, в общем-то, давно известно.
Про помощь разработчика и перестановку ног — это ни разу не шутка. Если есть какие-то идеи по доработке прошивки или какие-то проблемы — можно пойти тикет на их гитхабе завести. Что касается ног — вон, вы в статье упоминаете, что ноги SWD в непривычной последовательности — в открытой прошивке если не так, как нравится — можете поменять, чтобы рядом были в нужном порядке.
Насчёт блокировки клонов — вот первое, что попалось: community.st.com/t5/stm32-mcus-boards-and-hardware/stlink-v2-clones-blocked-by-st-with-latest-fw-stmcubeide-1-10-1/td-p/134962
Да, покупку выбирал по корпусу, но нельзя сказать, что купил только корпус. Купил программатор, который прекрасно работает. Единственная реальная претензия к нему — это по поводу отсутствия защиты. Может сгореть процессор. Поэтому, наверное, соберусь с духом и защиту добавлю. К слову, в программаторах на основе pill тоже никакой защиты нет.
Про перестановку ног — ну бросьте прикалываться. Если у части плат SWD разведен по-другому, так что, прошивку программатора каждый раз менять? :)
Только корпус — потому что pi стоит 2 бакса, а не 10, а функциональных возможностей больше. Так что в основном деньги отданы за корпус.
Про перестановку ног — просто пример возможной кастомизации, который скорее был бы полезен, если бы использоваля какой-то готовый переходник. А так — но тут уже правда прикол — добавить команду, чтобы можно было в openocd конфигурировать.
Промежуточный софт, который умеет работать с кучей разных железок-отладчиков и прошивальщиков, начиная с FT232 в режиме битбенга, и заканчивая всякими JLink, а софту предоставляет GDB-сервер. Ну, или можно просто его разово запускать для прошивки. Pico Probe подразумевает работу через OpenOCD.
Понятно, для каждой железки у него есть своя конфигурация, которую при желании можно и расширить.
Переразведённый как мне удобро ST-Link от платы Nucleo
Защита только резисторы, в общем как всё по схеме оригинала.
И тут есть UART ещё и вот этот факт лично мне максимально удобен оказался. Одна USB дырка занята и там тебе и JTAG и UART сразу
На разъёме UART, SWD, NRST и чёт там ещё чем никогда не пользовался )
В прецизионность лезть моих умстенных способностей не хватает, я так попроще чего поделать а в последнее время всё больше и больше в продажи ухожу от всего этого разработчиского и этот факт меня безмерно радует )
Пишу сейчас управление 8-ю частотниками, с управлением как в автоматическом (командами от ПЛК), так и в ручном (кнопки на плате) режимах, всё это дело общается по Modbus-RTU. Приходится рисовать блок-схемы, а они становятся всё сложнее и запутаннее при добавлении обработчиков всевозможных ошибок и отслеживании таймаутов.
Вот и думаю, наверняка я не первый этим путём иду, так зачем изобретать велосипед?
Однако ничего дельного найти я не смог.
Свой код написал и я. У меня там ещё индикация на ws1812, благо её на DMA + ШИМ удалось запустить и оно само вертится. Плюс ко всему, второй уарт на g030 не умеет RTO отслеживать, приходится выкручиваться таймером, а их тоже не так много на борту. Да, блок-схема получается громадной. Но всё решаемо, если постараться. «Терпение и труд всё перетрут» гласит пословица.
Вы так красочно расписывали свои проекты, что я решил спросить совета по проектированию. По мере накопления опыта и я прихожу к мысли, что написание кода это 10-15% общего времени, а остальное — схемы-диаграмы, документация и много-много раздумий.
Зато по опыту понял, что, когда нарисуешь блок-схему, то сам код пишется легко, отслеживать прогресс и вносить изменеия просто, а вся логика прослеживается без особых трудностей. Ведь даже собственный код становится малопонятен через какое-то время, как его не коментируй, что уж говорить о чужом.
Поймите, что все люди разные. Огромной ошибкой будет считать, что если кто-то сделал, то и я смогу. Нет, не сможете. Путем нечеловеческих усилий можно закончить сложный проект, но такая работа не будет приносить никакого удовольствия, и качество ее выполнения будет желать лучшего. Какой смысл страдать и выдавать сомнительные результаты? Выбирать работу всегда надо по способностям. Я никогда не берусь за работы, которые видятся для меня сложными. Хотя для кого-то это раз плюнуть.
И более того, я всё написал, всё работает. Мой вопрос был об используемых Вами инструментах проектирования, а Вы стали меня убеждать в том, что я что-то там не осилю. Какой-то Вася сможет, а я — нет.
Ничего не понимаю. Так хотелось найти единомышленников, инженеров, которым интересно решать непростые задачи, а наткнулся на стену непонимания и неверие в собственные силы.
Не «какой-то Вася». Надо понимать, что разработчики — это уникальные люди с очень высоким интеллектом. Мне до них, например, очень далеко. Всегда с восхищением изучаю чужие решения. Если чувствете себя гением — тогда продолжайте. Но раз возникли такие проблемы, то это звоночек, что взялись не за свое дело.
Если вопрос жизни и смерти, тогда с мучениями можно как-то доделать. Но если это обычная задача на работе — бросить и забыть. И браться впредь только за те работы, которые способны сделать хорошо.
И это всё не потому, что я такой гениальный. Было бы желание, а освоить можно всё. Главное — не бояться. Даже Кейл этот конченый и тот удалось победить, хотя после Атмел Студио писать в нём код это сплошное мучение. Можно, конечно ВСкод с надстройками использовать, но отладка в Кейле вне конкуренции. По крайней мере, я не смог найти достойной альтернативы. Или не смог разобраться, как настроить всё точно так же без затрат огромного количества времени и сил.
Но изначально я хотел с вами всеми обсудить подходы к раработке, помогающие воплощать в коде сложные проекты. А всё скатилось куда-то не туда.
Проблема знакомая. Решение — не брать сложные проекты.
Обратится за помощью к специалистам или компании разработчику. Нет денег на это — не нужно и начинать разработку. Сложные вещи одним человеком не делаются.
Как вариант можно попробовать нанять консультатна. Делать core review с другими разработчиками.
Дааа щас возразят: «Но постой, ведь я же ну вот же вжууух и сделал» — да, бывает такое, но в большинстве случаев серьёзные разработки командой в полтора землекопа не решаются.
Какие-то вы тут все… слюнтяи, более адекватного эпитета и не подобрать, пожалуй.
Инженеру надо всем и самому себе доказать что «я порвусь но смогу» а это как раз никому не нужно.
Решение проблемы должно быть оптимально с точки зрения затрат времени и сил. Упёрся в проблему — заплати людям за помощь. Как уж там они дошли до этой кучи знаний — вопрос индивидуальный.
Такое увы никому не интересно, решать задачи, которые можно решить небольшой суммой денег заниматься нет смысла
В общем менять надо подход к делам и жить станет намного проще и дела будут делаться быстрее
И все попытки доказать обратное разбиваются о потребительскую действительность.
Есть деньги — делаем, находим специалистов с нужным мозгом. Нет денег — значит это никому не нужно и нет никакого смысла делать.
Но инженерам это понять ой как непросто.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.