Embedded 2018

Не сразу сформулировал словами, а сейчас решил уже доформулировать до эссе, расширив вопрос: а что может нравиться в embedded low level? Ответ напрочь лирический, состоит из двух причин. Причины, конечно, мои. Ещё я люблю пельмени, пиво и белый шоколад (что ни фига не шоколад).
Оставлю вне обсуждения темы количества, разнообразия и оплаты работы в этой области, оно (как и везде) ситуативно и колеблется от копейки до миллиона. Хочу про романтику. Чем оно может радовать, воодушевлять, восхищать, удивлять, удовлетворять. Также ограничу embedded до MCU категории «дорого-богато» (в районе single-board ARM computers (SBC) плюс-минус). Да, это удобный чит, который ставит под вопрос сам «термин» embedded, ибо остаётся всего шаг до «ну а чё, давайте тогда разработку на Android запишем, там те же платы», но… есть какой-то психологический водораздел, пожалуй.
Ещё требуется обозначить low level, что тоже получится не строго. Допустим, речь про asm / C / C++, а область технических задач при разработке максимально близка к железу. С другой стороны, если вы в контексте IoT на каком-нибудь Orange Pi в Python-коде будете работать с GPIO, оно тоже в какой-то мере low level. Наверное.
В общем, границы плавают, у каждого своя линейка, особенно если подходить к теме со стороны программирования. Железо может быть внутри класса вполне high level (та же Raspberry Pi 3B/B+ «просто» компьютер же), но писать для него строго на asm, шевеля руками каждый бит портов. Ну вы поняли.

Допустим, вы романтик и тонко чувствующая гармонию мира личность. И вас штырят компьютерные 1970-е. Тогда железо было железным, лампы мигали, не было шшшаблонов, отцов их, проектирования. Эпоха рассвета идей (на которых по сию пору живём) и решений. Тогда были созданы PDP-11 и Cray-1, вышла на пик популярности БЭСМ-6. Начала восход Intel со своим первым Intel 4004, за ней в кильватер вошла AMD. Включилась ARPAnet. Вылез из детских штанишек UNIX. IBM сотворила сначала флоппики, потом винты (кстати, «винт» потому, что внутреннее название проекта было «Winchester»).
1101650402_400
Обложка TIME, 2 апреля 1965 года
Программисты не отставали. Ритчи разработал C, народ осваивал пришедший в разум ALGOL (который 68), FORTRAN начал завоёвывать планету (его далеко не сразу приняли), COBOL вообще поглотил всех, Prolog, Pascal, Smalltalk, BASIC, LISP, Forth — всё это либо создано в 1970-х, либо к тому десятилетию вошло в полную силу. Фактически 90% современного программирования тогда уже было реализовано. А если не реализовали, то описали на бумаге и отложили. Особый спорт — спрашивать в барной болтовне, мол, как думаешь, когда появилось ООП, когда ты уже мог ООПисать код? Многие считают, что в 1990-х, рубеж категории «ну, когда Ленин умер, а Сталин всех карал».
Короче говоря, эпоха, в которую все окончательно смирились с тем, что компьютеры всерьёз и надолго, а сделать с ними можно всё, что ночью в сухую голову приходит. Интересное время, к которому фиг прикоснёшься руками. И железок не осталось почти (только маленькие шкафы в музеях и у энтузиастов), и эмуляторы фигня какая-то без вкуса и запаха. Всё не то. Но до меня вдруг дошло.
Посмотрите ассортимент и возможности современных SBC. Посмотрите ассортимент и возможности компьютеров 1970-х. Одно и то же! Пусть флопсы и похожи на средних сферических попугаев по больнице, но давайте сверим старое с, например, Raspberry Pi. Raspberry Pi 3 B+ — это класс Эльбрус-2 и Cray-1. А, скажем, Arduino — БЭСМ-6 и CDC 6600. Хорошо, по флопугаям железо близенько. Сейчас на нём торренты и видео делают, а 45 лет назад космос и физику осваивали.
Окей, что с языками? Ну… 1970-е — эдакий рубеж. Если ты хотел сделать что-то хардкорное с максимальной оптимизацией, использовал ассемблер. Если не хотел (а и такой хардкор многих подзадолбал), использовал высокоуровневые ЯП, коих уже был целый зоопарк (и половина программистов планеты только тем и занималась, что переносила компиляторы с одной платформы на другую). Но, мне кажется, современный даже RISC-ассемблер представляет собою язык высокого уровня первого поколения, так сказать. Ну, да, мнемоники не так натуральны, как keywords C или Java. Но если в БЭСМ-6 было около 60 команд, то в ARM их почти 180 (и это не считая condition code). Т.ч. любой каприз реализуем с достаточным комфортом. А, ну и да, OS уже тоже вовсю были, к их процедурам из кода тоже уже обращались.
Окей, что с вводом/выводом? Сейчас всё круче, конечно. Никаких тебе перфокарт или магнитных лент, результат работы тоже не на принтере выбивается. Однако, первый популярный emacs (ещё не GNU) Столлман написал в 1976 году. Да и вообще, уже в 1964 году у DEC был расчудесный Precision CRT Display Type 30 (PDF), фотографию которого ниже я взял со страницы computerhistory.org.
DEC Precision CRT Display Type 30
DEC Precision CRT Display Type 30
Иными словами, хоть с некоторыми условностями, но заход по ssh на плату и редактирование асм-кода в каком-нибудь nano / vim с последующим выводом результата на текстовую консоль тоже неплохо напоминает работу в старых терминалах. Собственно, это и есть терминал, просто более модный и с минимизированной рутиной подключения, листания, просмотра истории и т.д. Если на то пошло, то Xerox Alto с его GUI появился уже в 1973 году.
Наконец, периферия. Бери железку, подключай, читай даташит, мигай диодами, верти мотором. Да и то не очень аутентично будет, т.к. драйвера умели писать уже тогда, потому конечные потребители всё же редко работали с внешним оборудованием настолько хардкорно. Тем не менее, при желании можно и так развлекаться.
Что в итоге? SBC 2018 года по всем показателям (кроме размера, надёжности и энергопотребления) здорово близки ЭВМ 1970-х. Хочешь почувствовать себя в шкуре чувака, который сначала в тетрадях писал программу кодами / мнемониками, потом собирал, запускал и пырился на портянку текста (затем чертыхался и дампил регистры) — запускай ChtoNibud Pi и вперёд. Романтично. Хардкорно. Почти аутентично. Захотел побыть сумасшедшим инженером из старого фантастического фильма — будь им, можно даже сотню диодов приделать, чтобы красиво и нарядно.

Второй аспект, но не менее значимый, такой: иногда хочется делать технически выверенные до последней точки продукты. Продуктики. Чтобы каждая инструкция в дело, чтобы оптимально было до упора, ни байта назад. А современные продукты для бизнеса часто делаются по другому принципу (настолько детально и настолько многократно озвученному со всех площадок за последние лет тридцать, что останавливаться для раскрытия не буду). Более того, нередко у вас и нет настолько плотного контроля над системой, чтобы обеспечить требуемую душе точность работы. Ну да, заопитимизировал ты функцию. А соседний вызов популярного фрейморка сожрёт и не подавится. Заоптимизировал и его. Окей, а теперь базу загнули, всё просело. С базой разобрался… ну блин, теперь оказывается, что фронтенд работает медленнее, чем отрабатывают вызовы API, потому настолько быстрыми им и не надо быть. В общем, всюду клин.
В SBC же (и прочей мелочи) оптимальный, плотный и выверенный код — требование техническое. Чуть ли не обязательное. Железку не интересуют ваши пламенные речи на тему того, как в современном мире важно и приоритетно быстро говнокодить. У неё, например, 512KB на борту, привет, шевели извилиной. Ну добро, возьмём Raspberry Pi 3 B+, там 1GB ОЗУ. Но если торкнет со всей силы, вы начнёте ваять мелкие поделки, на каждую из которых по $50 не напасёшься. А оно ещё и одноядерным будет. А и память не сверхбыстрая. И частота будет не в гигагерцах, ага. Кайф же!

Повторю: это мои причины. И да, я не зарабатываю этим, потому могу помечтать, пофантазировать, не окунаясь с головой в профессиональную разработку для MCU со всем, что свойственно любой профессиональной разработке (сроки, начальство, говнокод, удивляющие заказчики и т.п.). Но… слушайте, всё это хороший способ не закиснуть и погрузиться в ещё одно измерение программирования.
Добро пожаловать в 1970-е.

Про Эльбрус

Тема российского «Эльбруса» мне интересна по множеству причин.
Во-первых, нравится думать, что ещё не все полимеры потеряны и в России остались коллективы, могущие делать железный hi-tech, особенно в области процессоров. Можно испытывать тот патриотизм, что приятен, а не фейспалм от ряженых с нагайками.
Во-вторых, сам по себе «Эльбрус» представляет из себя любопытную архитектурную альтернативу. И если на этапе развития отрасли зоопарк архитектур был тормозом прогресса (а в СССР ещё и привёл на неоднозначный путь IBM / ЕС), то в современном мире таки хочется больше зоопарка и разнообразия, но не лабораторного (чего хватало и хватает), а промышленного.
В-третьих, тема «Эльбрусов» представляет из себя замечательный психиатрический маркер. Часто достаточно лишь упомянуть эти процессоры, чтобы минут десять слушать монолог, по которому ставится диагноз. Тут и слепые патриоты, и «ненавижу всё русское», и «всё украли», и «да я такое на коленке за вечер сделаю», и «буква ‘Э’ не так нарисована, потому процессор плохой», и «мне не доложили». Бери попкорн и наслаждайся цирком. Особенно полюбил в последнее время чуваков класса «мне, Мишке Синичке, такой процессор не нужен, потому и другим он не нужен».
В-четвёртых, «Эльбрусы» заставляют задуматься (и копать глубже) о том, зачем государствам нужны свои разработки? Сколько стоит процессор построить? Что мешает и помогает популяризации процессоров? Как с этим всем в России дела и что дальше? Как теряются и сохраняются разработки (тут любопытно копнуть историю ИТМиВТ до и после 1990-х)? Вот перед глазами живой пример, а не гипотетическая фантазия.
Фигня в том, что доступной информации про «Эльбрус» катастрофически мало, потому в головах роятся глупости. Сам грешен, писал чепуху, только потом думал. После изучения публикаций и просмотра роликов получил ответы. Не на все вопросы, но на важные. И ответы вполне очевидные, лежат на поверхности.
Если кратко, проблем у МЦСТ хватает, но проблемы потихоньку решаются. Т.к. архитектура и команды «Эльбруса» совсем не x86, для раскрытия потенциала софт либо заново писать, либо пересобирать правильным тулчейном. Массовому рынку (Петя, Вася и Вахтанг) оно в таком виде нафиг не надо, потому МЦСТ туда и не идёт. Идут к тем, у кого софта мало (переделка обозрима) и кому просто нужен «Эльбрус» (те же военные и безопасные). Также нюанс с выносом наружу всякого — часть работ сделана в рамках работ для структур, которые всё покрывают бумажками ДСП.
Соответственно, у МЦСТ ваще нет приоритета работы с населением. У них и бухгалтерия на физлица не заточена, не умеют. А с юрлицами, как понимаю, работают в русле перспективы. Если «Точмашурюпком» разрабатывает на базе «Эльбруса» решение для дальнейшего продвижения (и расширения сбыта), процессоры получит. Если «ВасяВаре Ltd.» из любопытства одну плату просит, не получит. Но это уже из области догадок. Сервера, например, у них достаточно спокойно продаются, если не ошибаюсь. Только не по цене смартфона, конечно, и софт там своеобразный.
И… Если экстраполировать на МЦСТ опыт обычного, «Эльбрус» до состояния внешнего продукта не доведён. Т.е. нет толковой документации (не по зубодробительным ГОСТ) как разработческой, так и пользовательской. Нет возможности отдать всё нужное Васе, не утомив того объяснениями, почему у него софт работает так, а не эдак. Нет инфраструктуры сопровождения массмаркета (сайты, саппорт, подготовка и распространение патчей, гарантийное обслуживание тёти Вали, etc). Короче, «Эльбрус» сейчас — это основа для относительно штучных и мелкосерийных решений, которые можно индивидуально сопровождать, и на которых можно нарабатывать рынок и компетенцию.
Отсюда неутешительный вывод: «Эльбрус» в магазинах если и появится, то вряд ли скоро. Как минимум, пока не придумают, как массовому покупателю объяснить, нафига ему такой компьютер с такими особенностями (ну вот разве Microsoft даст переписать / пересобрать Windows, чтобы работало нативно, а не в режиме совместимости?), да ещё дороже привычных Intel / AMD раза в два.

Если не кратко, список основных источников ниже. В сети есть множество обсуждений и лоскутной информации, но не вижу смысла сюда тащить, легко нагугливается (вместе с горой мусора, впрочем).
Во-первых, свежее интервью DZ с Константином Трушкиным, директором по маркетингу МЦСТ. Трушкин на диво толковый, говорит хорошо и правильно, интервью интересное, 45 минут жизни не зря. Смотреть там нечего, только слушать, а жаль.
Во-вторых, на том же Youtube канал Максима Горшенина. Можно сказать, это новости про бизнес «Эльбруса» из Института электронных управляющих машин имени И. С. Брука. Фактически в интернетах 95% тиражируемых сведений о процессоре происходят от видео Горшенина.
В-третьих, книга [Ким А.К., Перекатов В.И., Ермаков С.Г. Микропроцессоры и вычислительные комплексы семейства «Эльбрус». СПб.: Питер, 2013]. Спасибо, доступна в разделе публикаций МЦСТ. Часть информации в ней устарела, всё-таки материалу лет шесть, но основные положения остались неизменными. Ну и история архитектуры есть.
В-четвёртых, интервью и доклады Бабаяна Б.А. Несколько одиозный дядька (другие дядьки с ним нередко в полемике), по текстам кажется, что он в корень задолбался доказывать «не верблюд», но зато раскрывает истоки и особенности. Текстов, впрочем, мало: раз и два — внутри PDF большая лекция, желающие могут посмотреть или послушать.

Как мне кажется, «Эльбрус» сейчас находится в серединке между оценками дежурных хейтеров и фанбоев. Нет, у МЦСТ не всё плохо — просто они себя не продают и [за небольшим исключением] продавать не стремятся. Да и не особо умеют, кажется. И нет, у них не всё хорошо. Им до массового рынка даже дорогих устройств ещё до фига всего сделать. Не понять, будут ли они этим заниматься. Ну вот серверные стойки для ЦОД — да, уже есть, но штука нишевая всё же.
Как-то так. Висит вкусная груша, нельзя скушать. На мнение завсегдатаев соцсетей МЦСТ в целом далеко и высоко чихает, и правильно делает. Надеюсь, что до доступного десктопа всё же доживу.
PS. Пожалуйста, короткометражку «Миру — мир» не смотрите. Оно такое кхм… Не понимаю восторга DZ, трижды (!) посмотревшего эту… это.

Raspberry Pi как платформа учёбы

Несколько лет посматривал на Raspberry Pi, но энтузиазма не вызывало. Первые модели были откровенно слабыми. Модель 3B уже интереснее, но как-то незачем было. Да, микрокомпьютер, но всё равно не совсем полноценный по субъективным ощущениям. Да и к ARM по незнанию относился снисходительно. Короче, Малинка — игрушка для тех, кто в Arduino наигрался.
Но сошлись звёзды.
В-нулевых, несколько раз достаточно болезненно для ЧСВ получил понимание того, что без знания железа и low level программистом могу лишь считаться, но не быть им. Ощущения не понравились.
Во-первых, до меня дошло, что ARM’ы вполне серьёзная и любопытная штука. Могло и раньше, конечно, но вот так. А те чипы, что вышли за последнюю пару лет, вообще конфеты.
Во-вторых, за 2016..2017 гг. появилась литература, хорошо укладываемая на мои привычки обучаться, да и в целом качественной информации стало заметно больше.
В-третьих, остальная техника дошла до того уровня комфорта (мощность, цена, качество, удобство, доступный работающий софт), что позволяет оборудовать учёбу так, как считаешь нужным, а не как приходится.
И вот тут я подзавис. Крайне сложно чему-либо учиться, когда по квартире носится почти двухлетка с реактивным двигателем ниже спины, разрушительным любопытством и уверенностью, что во всех папиных делах найдётся место не только папе. Испробовал несколько решений, всё не подошло. ТЗ на процесс жёстко давило: нет проводам (быстро доберётся), нет ноуту (громоздко и тоже ооочень интересно), нет выделенному пятачку с любым оборудованием. Спокойно кнопить можно только с планшета по ночам. Но как, если надо собирать, дебажить и запускать программы на ARM-асме? Да чтобы не потратить кучу времени и денег на обустройство.
Осенило. Вернее, сначала подтолкнули учебники, в которых ARM даётся на MCU A-серии, а не на моей почему-то любимой M. Отправился листать каталоги плат, споткнулся об Raspberry Pi 3B+. Внезапно это уже хорошая железка. Памяти всё так же убого 1GB, но остальное норм, особенно набортные Wi-Fi, Bluetooth и Ethernet. Достаточно мощный и полноценный микросервер, итить, за почти разумные рубли. Дальше голова пришла к тривиальному, банальному, очевидному, прямому и простому решению, которое должно приходить в голову сразу, но приходит после поисков и метаний ромашкой в проруби — почему бы не поднять в квартире ARM-сервер на Raspberry Pi, после чего ходить туда и радоваться? Бинго.
По шагам получилось следующее:

  1. Купить наиболее оптимальный для себя вариант. Вариантов овердофига.
  2. Собрать железку, залить свежий образ нужной OS.
  3. Поднять SSH.
  4. Поднять Wi-Fi.
  5. Дать static IP.
  6. Закинуть на полку у розетки.

Всё просто. Нюанс только один: делать это всё на headless Raspberry Pi, разделы мануалов читать соответственно нюансу.


Во-первых, купил Raspberry Pi 3B+ Official Starter Kit за 6К рублей. Просто потому, что мне влом было по закромам собирать к голой плате солянку из блока питания, карточки и корпуса, а потом подбирать охлаждение, но при желании всё это заметно дешевле, конечно, особенно из Китая (этот же набор там 4.7К, например). Очевидно мажорское решение с переплатой за тот же ненужный HDMI-кабель, зато удобное. Не советую так делать, если у вас есть время и желание сделать более правильно. В любом случае 6К — это вот максимум цены за решение. Также учитывайте, что под одним и тем же названием по миру разные наборы.
Во-вторых, сразу залил на карточку образ последней Raspbian Stretch Lite. Десктоп не нужен. Кстати, всё равно там не всё последнее, потому потом ещё обновил пакеты. После заливки в boot создал файл ssh (без расширения и можно пустой), так при загрузке впервые поднимется ssh, иначе он выключен. Ну и собрал железку (наклеить радиаторы, сунуть в корпус).
В-третьих, карту с образом в Малинку, Малинку к блоку питания, блок питания в сеть. Пока грузится, найти патчкорд и подключить к ноуту, благо, с обеих сторон есть Ethernet. Завелось. Заходим на pi@raspberrypi.local, пароль raspberry, его правильнее сразу сменить. Запустить raspi-config, пойти в настройки интерфейсов и включить там ssh. Всё, пункт выполнен. Нужен Wi-Fi.
В-четвёртых, в том же raspi-config идём в настройки сети и включаем Wi-Fi. Этот пункт несколько мимо многих мануалов ручной настройки, но с ним намного проще, т.к. эти же мануалы часто пропускают настройку страны, без которой не получается. Можно иначе, но проще и быстрее всё же вот так. В итоге появляется конфиг wpa. Правкой конфигов донастраиваете под себя, погрязая в ребутах и косяках на пустом месте (помогли не тупить два мануала: один и другой). В конце концов Wi-Fi заводится, железка получает IP, сеть есть, ура.
В-пятых, в админке роутера прибиваете Малинке static IP. Этот IP и сопутствующие изменения вносите в конфиги. Отстёгиваете патчкорд окончательно, проверяете. Завелось. Дальше находите место у розетки, закидываете корпус с блоком туда, включаете и всё.
Уверен, есть более прямой путь настройки, но я настолько давно делал подобное руками, что вместо 15..20 минут удовольствия убился на пару-тройку WTF-часов, потому в тексте есть разница глаголов «сделал» (сделал вовремя нужное) и «сделать» (то, что надо было сделать сразу вместо того, чтобы тупить).
Теперь планшет. У меня всё разработческое на Android’ном планшете, потому поставил Termius. Он же есть и на iOS, но сам не пробовал, хвалить не буду. Андроидный хвалю — всё подключается, гамма приятная, виртуальная клавиатура удобная [для vim’ера], работает всё шустро.
Готово. Пару часов обкатывал. Ну… Получилось круто. Из любой точки квартиры в любой момент под рукой полный комплект (планшет с читалкой, гуглилкой и терминалом) учащегося. В целом удобно, если не наслаждаться непереносимостью голой консольки без IDE и прочих кнопочек. Если наслаждаться, то это же Debian, с прямыми руками многое можно под себя подкрутить. Проработал 80 страниц учебника, доволен. Ровно то, что хотелось. Подозреваю, в будущем могу к Малинке подключить какой-нибудь STM32 Nucleo и удалённо играть с ним, не изобретая варианты для освоения M-серии.

Может возникнуть здравый вопрос: чувак, ты просто поднял малиновый сервер и ходишь к нему по ssh, нафига столько букв? Ну, технически да. Эмоционально нет, большой шаг для человека, если посмотреть на всё в комплексе. В 2018 году Raspberry Pi внезапно представляет собою вполне неплохой bare-metal server, сравнимый с t3.micro, только с портами и GPIO, и без ограничений AWS. В 2018 году внезапно ты можешь кодить для ARM с планшета, удобно устроив тело на диване, и при этом не особо страдаешь. Также радуют современные «бытовые» ARM’ы (Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz вот просто так, считай, Карл). И радует возможность не просто кодить с планшета, но одновременно на нём читать учебник, сверяться со справочниками, гуглить странное, дебажить программу и всё-всё-всё. А в руках у тебя устройство размером с брошюру. А на полке в прихожей лежит устройство размером с сигаретную пачку.
Наконец, меня долго терзал вопрос «нафига» в адрес Raspberry Pi. И долго не долетал лобовой публичный ответ «для обучения». А ведь действительно это отличная платформа для обучения. Стоит недорого. Возможностей [3B+] даёт уйму. Сегодня учи ассемблер. Завтра подключи датчики к GPIO. Послезавтра напиши какую-нибудь фигню на Python. Надоело? Сделай из Малинки полезный сервер к чему-нибудь. Учебников хороших уже немало (от железных до программистских). Важно, что это не просто обучение, но полноценное обучение, вполне промышленное. Всё, что осваивается, так или иначе, но пригодится.
Вот это в сумме и восхитило.

Про историческую конференцию SORUCOM

В поисках источников по истории информатики в СССР набрёл на международную конференцию SORUCOM, тематика которой звучит как «Развитие вычислительной техники в России и странах бывшего СССР: История и перспективы». Если кратко, раз в N лет вместе сходятся ветераны разработки железа и софта, делятся воспоминаниями, докладами, исследованиями, материалами. В результате публикуют «Труды SORUCOM-YYYY», где YYYY год проведения конференции. К настоящему времени их было четыре: 2006 (Петрозаводск), 2011 (Великий Новгород), 2014 (Казань), 2017 (Зеленоград). Описание (и дух) первого собрания можно прочитать вот тут.
Слава всем причастным, в сети есть материалы всех конференций:

К сожалению, за 2006 год PDF’ку (удобно для читалок) не нашёл, про HTML ниже. Только печатную обложку. Не понять, можно ли купить книгу.

На этом можно было завершить текст, но после прочтения 1000+ страниц этих текстов дополню.
Сборники очень эклектичны. Вы либо читаете / листаете всё подряд, либо точечно знаете, какой материал нужен (и потому игнорируете остальные). Под одной обложкой статистические доклады, небольшие биографические заметки, полемические доклады (вроде моей любимой темы о роли перехода на ЕС), микромемуары, рассказы про учреждения, даже почти справочные тексты про архитектуры машин. Солянка та ещё. Если не знать и после первых десятков страниц решить, что дальше так же, потеряется возможность узнать информацию из первых рук.
Нюанс ещё в том, что авторы… как бы так мягко… старой школы. Т.е. вот ни разу не поколение 140 символов. У них нет задачи развлекать или доступно донести, т.к. аудитория состоит из таких же докторов наук и профессоров, которым не надо подавать арифметику комиксами. Однако, если уж вы начали читать, значит, мотивации достаточно для преодоления первой непривычности.
Очень жаль, что о таких конференциях узнаёшь едва ли не случайно. Если бы я не листал подряд чуть ли не все страницы замечательного сайта Виртуального компьютерного музея, не добрался бы до материалов конференций, а там не обратил бы внимание на SORUCOM… Ну хорошо, что мимо не прошло. Если вдруг однажды вы захотите узнать / понять истоки некоторых событий и решений в нашей истории, вспомните про SORUCOM, стоит того.

Книга: Пять уроков Великого Магистра

magister
Виктор Рябченко.
Пять уроков Великого Магистра, или Повесть о том, как Петя Бочкин изучал программирование.
Омск, 1988.
Обычно подобные книги не вношу сюда в прочитанные, но эта меня поразила своей непонятностью, упоротостью (пардон) и не прекращающимся при размышлениях вопросом «нафига».
По задумке автора очень начальный текст о программировании, дающий базовое представление о том, что такое алгоритм. Чтобы незрелому читателю скучно не было, знание подаётся в антураже некой… фантасмагории, не могу назвать иначе.
У Пети Бочкина раздвигаются стены комнаты и к пляжу подплывает корабль, на котором матросы, чувак (Казимир) и девушка (Кристина). Девушка существует в двух ипостасях, девической и роботной. В робота вводят программу (феминистки вздрагивают), при этом Кристина в основном занимается едой (снова вздрагивают). Первое знакомство с процессом описано вот так:

Казимир снял с себя бескозырку и нахлобучил ее на голову Кристины.
— Клади программу под бескозырку, — приказал он.
Петя положил программу под бескозырку.
— Эту процедуру мы будем называть «вводом программы», — объяснил Казимир. В действительности программа вводится в машину несколько иначе, но в данный момент это несущественно.
Казимир обошел Кристину вокруг и с чувством удовлетворения пропел:
— Ар-лята! Учатся летать! — он взглянул на Петю и велел:
— А теперь трахни ее по голове кулаком!
— Зачем?
— Затем, что эту процедуру мы будем называть командой «Пуск».
Петя приблизился к Кристине и легонько хлопнул ее по бескозырке.
— Можно было и сильнее… — начал Казимир, но тут Кристина вздрогнула и монотонно заговорила:
— Программа не прошла. Программа не прошла. Программа не прошла.

Ну… кхм. Ну вот типа такого весь текст. То из пушки курицами стреляют. То в море бочки с капустой. То «Шаварган-трах-тарарах!» Иные абзацы перечитывал несколько раз. Вот ещё микрошедевр:

— Так вот, сегодня клипер «Котангенс» под командованием Великого Магистра и Пети Бочкина должен был отправиться на операцию. Нужно было подойти к берегам герцогства и подвергнуть его столицу бомбардировке солеными огурцами. Из всех орудий. Но кракелюры, хитрые бестии, что-то пронюхали. Они заминировали всю прибрежную акваторию. Сегодня, когда клипер шел сюда, в бухту, чтобы забрать на борт Петю («адмирала Бочкина», тут же поправил Казимир), пришлось пробираться по сплошным минным полям… Мины кракелюров представляют из себя дубовые кадушки, начиненные квашеной капустой. Кстати, это еще раз подтверждает собственное убожество кракелюров. Прочная логика! Они, мол, нас — огурцами, а мы их — капустой! Не выйдет, господа! Капусту мы любим, хотя квашеную, по правде сказать, не очень. Но никакого вреда она нам не приносит, неприятно только. Рванет такая мина под днищем, обляпает весь корабль с носа до кормы. Б-р-р… Противно!

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

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

Про Arduino

Писал другой текст, обнаружил, что слишком много объёма про Arduino, выделил в отдельное эссе. Тема, естественно, джихадная, потому заранее избавлюсь от части нападок: нет, я не впервые сталкиваюсь с Arduino, да, через мои руки несколько моделей прошло, да, положенные новичкам проекты делал, после чего железки отдал желающим и о платформе забыл. Но в 2018 году решил вспомнить, посмотреть заново уже на фоне достижений конкурентов.
N лет назад Arduino — платки на базе Atmel AVR. Спустя эти N лет появились как родные платы на ARM Cortex-M, так и мегалиард клонов и фиг поймёшь чего, что завершается на -duino и сделано в гараже дяди Ляо. Удобства изложения ради ограничусь в эссе решениями на Atmel AVR, конкретнее, на ATmega2560 как на топ ветки (если не ошибаюсь). Текущая ревизия платы Arduino Mega 2560 v3: arduino.cc. Цена в рознице Москвы озадачивает. Часть магазинов продаёт модель за около 900 рублей, часть за около 3500 рублей. Возможно, первый вариант паяли китайцы, а второй итальянцы. Во всяком случае, у итальянских официалов $38 на сайте, что наводит на размышления о происхождении 900-рублёвых плат.
a000067_featured_1_
Arduino Mega 2560 v3
В качестве оппонента выбрал STM32 Nucleo-F767ZI — топовую на данный момент плату линейки, с которой STMicroelectronics вышла в 2014 году на рынок Arduino-DIY. На борту каждой платы (а их сейчас 42, Карл) один из Cortex’ов, но צימעס‏‎ в том, что по пинам Nucleo совместимы с шилдами Arduino Uno V3. Цена F767ZI в рознице Москвы на уровне 2300 рублей.
nucleo-f767zi
STM32 Nucleo-F767ZI
Что сравниваем? Сам MCU (архитектуру и «мощность»). Обвес на плате. Экосистема: даташиты, книги, библиотеки, IDE, сообщество. Платы расширения. Потенциал.

Но сначала о пользователях. Что Arduino, что Nucleo — решения для обучающихся энтузиастов и ленивых на паяльник мейкеров. Чуваки, на форумах яростно дерущиеся на тему избыточности этих плат… ну, да, они избыточны для профессионального использования. Профессионалы, как понимаю, и не используют (разве что контора закупит коробку для экспериментов), у них свои линейки продуктов. Чему учатся на Arduino / Nucleo?
Во-первых, простой работе с железом. Тут макетка, там перемычка, здесь резистор с диодом, туда LCD и датчик влажности. Остаётся прокинуть к плате и по готовым проектам подкрутить, чтобы всё весело вертелось и радовало глаз. Я у мамы инженер. Часть специалистов относятся к такому занятию с иронией, да и напрасно. Именно такие простые действия пробивают порог «магии» внутри корпуса компьютеров, убирают страх работы руками, ну и вообще дико прикольно, когда ты чуть ли не сам своими руками заставил железку моргать лампочками.
Во-вторых, началу и завершению проектов. До меня не сразу дошло, но потом понял. У многих людей нет в жизни того, что есть у инженеров / разработчиков — проектов. Спланировать, начать, сделать, ввести в строй. Нами это воспринимается как естественные итерации в жизни, а у вашего соседа Пети этих итераций нет. Он просто живёт и просто работает, при этом испытывая тягу делать что-то законченное. Соответственно, бесчисленные каталоги DIY-проектов позволяют тягу удовлетворить, не убившись на год в углу балкона.
В-третьих, ассемблеру. В [Larry D. Pyeatt. Modern Assembly Language Programming with the ARM Processor. Newnes, 2016] автор на страницу толково объяснил, я перескажу кратко. Ассемблер x86 большой, сложный и страшный. Новички (да и не только) в нём быстро тонут, в лучшем случае осваивая маленькое подмножество команд без особой пользы для головы. Сами процессоры x86 тоже слишком сложные, чтобы их можно было комфортно изучить. Потому лучшим выбором являются относительно простые микроконтроллеры, на примере которых можно и RISC-процессоры освоить, и ассемблер, и успеть без испуга всё это в голову за курс уложить, да ещё и сделать что-то работающее.
В-четвёртых, низкоуровневому программированию [на C/C++]. Не понимаю, зачем извращаться и для таких железочек писать на каком-нибудь JavaScript (примером Iskra JS), самому себе укорачивая кайф вполовину. Как если бы выйти на пробежку, но сидеть в тележке, которую таскают вокруг поля. Как по мне, пустая трата головы и времени, если не хардкор.
Тут же замечу, что учиться делать embedded лучше не на AVR / ARM, для этого сектора есть замечательные PIC, они же почти идеальны для будущих простых IoT-экспериментов.

Что с MCU? Смотрим:

  • ATmega2560 (Arduino) — AVR, 8-битный, 16MHz, 256KB flash, 8KB SRAM.
  • STM32F767ZI (Nucleo) — ARM (Cortex-M7), 32-битный, 216MHz, 2MB flash, 512KB SRAM.

Бенчмарки MIPS/DMIPS гуляют по сети, числа не абсолютные, но везде одно — STM32F767ZI дальше ATmega2560 минимум на порядок, а если взять пару вырожденных случаев, получается что-то вроде 16 MIPS ATmega и 450 MIPS STM32. Чёт раньше не так ясно видел, насколько железно отстаёт AVR. Ну ок, теперь виднее.

Что с обвесом? Платы почти равны. Отмечу только наличие Ethernet у Nucleo (у Arduino, соответственно, его нет), ну и у Nucleo [заметно] больше пинов.
Что с экосистемой? Вот тут Arduino отрывается на десять корпусов. Я всё никак не мог понять, почему за настолько слабое и простенькое железо берут денег как за небольшой космолёт, но после изучения этого пункта понял: при покупке Arduino вы платите налог на обилие информации, на маркетинг, на конференции, на книги, наклейки, каталоги проектов, мейкерский движняк. Фактически вы словно попадаете в хорошо оборудованный первый класс — сразу с комплектом нужных учебников, с готовой партой, с толерантными и терпеливыми учителями.
Что с платами расширения? У Arduino гораздо больше доступных. Собственно, их и просто так больше-больше. Было бы. Но напомню: Nucleo совместим с Uno-шилдами. Вопрос их реального использования (наличие библиотек, удобство программирования с ними) открыт, но на уровне железа теперь такого отрыва нет.
Что с потенциалом? Ну… Я раньше не понимал причины, по которым был выбран AVR для Arduino. Читал любопытное мнение: AVR был выбран потому, что в те времена не было ARM’ов в DIP (а платформа предполагалась и для самосборки), а у PIC не было нормального общедоступного тулчейна. Похоже на правду. Фигня в том, что Arduino AVR мне кажется эдаким… заповедником экспериментов и учёбы, после которого всё равно надо будет переучиваться. Мало того, что сами железки по возможностям куцые относительно современных конкурентов, так и в промышленности и в практике массово используются другие решения. Учить AVR для того, чтобы сигнализацию потом делать на PIC, а сервер видеонаблюдения на ARM?
Наконец, смотрю на них… Ок, большинство программ маленькие и уместятся в десяток килобайтов. Но что делать, когда захочется большего? Я в первые же пять минут могу придумать десяток проектов, в которых найду, чем заполнить даже 512KB. В следующие пять минут ещё десяток, в которых потребуется быстрый процессор.

В итоге сам я от Arduino отказался. Это очень сопровождаемая учебная платформа, которая замечательно помогает сделать начинающим первый шаг и помогает избавиться от страха перед магическими технологиями. Что-то вроде локаций-песочниц в RPG — в противниках бабочки, соседи не дерутся, пастораль и благодать. Через час игры уходишь оттуда и не возвращаешься, выбросив тонкую рубашку первого уровня и прутик, что выдали вместо меча.
Да, ARM и PIC сложнее. Но в 2018 году многие былые сложности уже решены. Вчера я за пару часов осилил то, на что раньше могла уйти неделя — собрал в Ubuntu / Eclipse проект и залил его по USB в Nucleo. Т.е. да, всё так же раздражает, что на такую простую последовательность операций убил часы, но блин, раньше и этого не было, всё работало под Windows, остальные рыдали.
Литературы на пару порядков меньше. Но нужная литература есть. Вам не нужны десять мануалов по ассемблеру, достаточно пары-тройки имеющихся. Осилил? Всё, дальше уже по накатанной сам. Проекты при желании можно тырить из мира Arduino. Сообщества ARM и PIC тоже старые и большие, информации накопили много. В общем, в какой-то мере изобилие Arduino компенсируется достаточным минимализмом ARM’ов. Фраза звучит как «хорошо, что книг мало» (что нелепо), но так я пытаюсь сформулировать другое: по ARM есть хорошие книги, для обучения их хватает.
В общем, как-то фиг знает. Arduino тупиковая ветвь учёбы. Счётные палочки мейкерства. Есть чуваки, умудряющиеся этими палочками пейзажи рисовать, зажав коленом, но такой фанатизм не для всех.