Вход на сайт

Просмотр новости

Найдите то, что Вас интересует

В Китай за embedded-мечтой: программируем микроконтроллеры в SHENZHEN I/O

Дата публикации: 06-10-2026 14:06:35

Доброе утро, Шэньчжэнь. На улице 19 градусов, плохое качество воздуха, высокая активность дронов, льет дождь и светит солнце. Все это я узнал от умной наружной камеры; мне же светят лишь холодные офисные лампы. Я мог бы торговать электроникой на рынке Хуачанбей неподалеку. Но у меня есть инженерное образование, мой воротничок белоснежен, и с сегодняшнего дня я работаю в Longteng Electronics.Так начинается SHENZHEN I/O — головоломка, где нужно заниматься аппаратной разработкой и программированием микроконтроллеров. Выполнять разные ТЗ с помощью имеющихся компонентов и стремиться к экономии по всем возможным направлениям. У реального меня, автора этой статьи, инженерного образования нет. Я лишь окончил базовый онлайн-курс схемотехники и написал об этом три статьи. Поможет ли это здесь? Не уверен. Доедаю воображаемый баоцзы и открываю почту сотрудника. Читать далее

Основное содержимое страницы с новостью.

Уровень сложностиПростой

Время на прочтение5 мин

Охват и читатели12K

Доброе утро, Шэньчжэнь. На улице 19 градусов, плохое качество воздуха, высокая активность дронов, льет дождь и светит солнце. Все это я узнал от умной наружной камеры; мне же светят лишь холодные офисные лампы. Я мог бы торговать электроникой на рынке Хуачанбей неподалеку. Но у меня есть инженерное образование, мой воротничок белоснежен, и с сегодняшнего дня я работаю в Longteng Electronics.

Так начинается SHENZHEN I/O — головоломка, где нужно заниматься аппаратной разработкой и программированием микроконтроллеров. Выполнять разные ТЗ с помощью имеющихся компонентов и стремиться к экономии по всем возможным направлениям. У реального меня, автора этой статьи, инженерного образования нет. Я лишь окончил базовый онлайн-курс схемотехники и написал об этом три статьи. Поможет ли это здесь? Не уверен. Доедаю воображаемый баоцзы и открываю почту сотрудника.

3dba838fbb8419e636c70b5a4ab8d9b5.jpeg

Меня уже ждет пачка приветственных писем от президента, вице-президента, продакт-менеджера и других коллег. Узнаю́, что Longteng Electronics — «мировой лидер индустрии» и что нормального сыра в Шэньчжэне не найти. А в списке ценностей компании, помимо усердия и связей, вижу загадочное salubriousness — что-то типа «здоровой атмосферы» в широком смысле. CEO Ванг Ёнгхонг призывает меня корректно питаться, корректно себя вести и корректно думать.

Чтобы корректно думать, мне послан даташит. PDF-файл открывается не в интерфейсе игры, а параллельно в просмотрщике как обычный документ. Каков реализм.

6088a5e19618e3786a86d60a5f0cd53d.jpeg

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

После инструкции по печати даташит открывает нам предысторию через письма — классика видеоигр. «Я помню, что ты хотел без релокации, но у нас в стране проблемы с вакансиями инженеров. Может, подумаешь о работе в Китае?» — предлагает рекрутер Марджи Фиш в первом письме. «Longteng Electronics — стабильная компания, сейчас расширяют штат своих инженеров, у тебя будет хорошая зарплата и макдак в городе», — подхватывает Джесси Хуанг.

На этом нехитрая арка протагониста завершена. Давайте уже поработаем.

Муляж камеры наблюдения

Проще говоря, коробка с двумя светодиодами — вот мое первое задание. Первый диод должен мигать строго равномерно, второй — более хаотично, но тоже в соответствии с таймингами во вкладке верификации:

569d49d16090d9bcdf2ae1e8e168791e.png

Для работы у меня есть две платы и два контроллера MC4000 по 3 юаня за штуку. Внизу автоматически подсчитывается стоимость компонентов в решении — возможно, это станет ограничением в будущем. Но пока думать об этом рано.

Контроллер MC4000 поддерживает протоколы Simple I/O и XBus. Первый — это непрерывный аналоговый сигнал с уровнем от 0 до 100, который можно читать и писать без каких-либо условий. Второй — это шина для обмена данными между микроконтроллерами, где обе стороны должны согласовать передачу данных — по назначению ей близок I2C (Inter-Integrated Circuit).

Для первого задания мне будет достаточно Simple I/O. Нахожу в даташите пример кода для сигнала с чередованием уровней 0 и 100 в равных периодах.

388449c31edbfa8fe0157105a7f1fc78.png

Вот так я повторил опорную осциллограмму. Или референсную вейвформу… это же одно и то же? После нескольких прогонов в симуляции мне предложили пройти в почту за следующим заданием. Также игра составляет таблицу рекордов — решений моих друзей в Steam, расставленных по дешевизне, потреблению энергии и строкам кода. Один из френдов потратил не 60 единиц энергии, а 59! За прогон у него получилось на одну инструкцию меньше, странно, прогоны же одинаковые…

Вслед за вторым заданием пришло письмо от Джи Чжана, главного инженера — в исходнике chief staff engineer. Дочка Джи разработала карточную игру, вариацию солитера на картах маджонга. И конечно, нам всем добровольно-принудительно нужно ее потестировать.

885541f3d4ae5f4dfbf6228c59c3d9d7.png

Разложил удачно один раз — и задача выполнена, иконка солитера осталась на рабочем столе. Теперь я могу виртуально бездельничать на своей виртуальной работе.

Модуль усилителя сигнала

Следующее задание — «отличная возможность познакомиться с input». Есть входной сигнал, а есть сигнал, который нам нужно отдать.

b373cafd5a03aebda625a21e805051ce.jpg

Я добавил контроллер MC4000, соединил его с p-портами протокола Simple I/O. Чтобы получить нужный сигнал, достаточно удвоить исходный. Здесь и далее я буду добавлять комментарии на русском языке только для статьи: в игре они просто не влезут в окошко.

mov p0 acc // переместить значение со входа p0 в регистр acc
mul 2 // умножить значение в регистре на 2
mov acc p1 // переместить значение в регистре на выход p1
slp 1 // подождать один цикл

Кажется, сложнее всего здесь разобраться в инструкциях и операндах. Но для меня постоянной ошибкой стала Part not sleeping! Я игнорировал эти три слова и снова лез в инструкции, хотя надо было всего лишь добавить последнюю строчку кода. Неспроста в мануале ей посвящена отдельная страница:

Добро пожаловать в аппаратную разработку!

Добро пожаловать в аппаратную разработку!

Генератор пульсирующего сигнала

Ура, теперь мне доступны все компоненты в игре. Следующее задание открывает мне conditional execution — предикацию. Когда нажата кнопка, нужно передавать пульсирующий сигнал, когда не нажата — не передавать.

teq p0 100 // сравнить значение на входе со 100 (уровень сигнала нажатой кнопки)
+ mov 100 p1 // передача пульсирующего сигнала, если условие сработало
+ slp 1
+ mov 0 p1
+ slp 1
- mov 0 p1 // передача нулевого сигнала, если условие не сработало
- slp 1

Это задание сначала не получалось, потому что я ставил знаки предиката — плюсы и минусы — только перед первой, а не перед каждой строкой условия. Интересно, почему мне не показалось это очевидным с самого начала? Может, будучи редактором, я воспринимал блоки инструкций как абзацы текста, а плюс и минус — просто как маркеры нового абзаца, типа «перевод строки и заглавная буква».

Если ваши знания об аппаратной разработке уже не сопоставить с требованиями SHENZHEN I/O, то, может, больше заинтересуют вакансии?

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

Путь между предикацией и предсказателями у реальных процессорных архитектур складывался по-разному. ARM начинала с предикации — SHENZHEN I/O воспроизводит всё довольно близко к ARM32, — но в AArch64 оставила ее лишь точечно.В x86 и RISC-V предикации не было изначально: в одной она появилась в 1995 году как точечная, в другой существует как опциональное расширение.

После этого задания мне пришел первый спам. Из России! Полет на орбиту за тысячу баксов!

После этого задания мне пришел первый спам. Из России! Полет на орбиту за тысячу баксов!

Световая вывеска

Теперь от меня требуют контроллер световой вывески для известной киберспортсменки THE SOLID STEEL GAMER. На вывеске она пьет содовую и кликает мышкой, параллельно мигает никнейм. Все это мой продакт-менеджер хочет подешевле, чтобы у нас наверняка купили большую партию.

Задание простое: воспроизведи пять паттернов в коде на пяти контроллерах. Но я помню, что нужно сделать дешевле, и такая возможность есть. В контроллере MC4000 за 3 юаня всего 9 строк памяти, и этого недостаточно, чтобы повторить один из сигналов линейно. Но с помощью цикла я вмещаю сигнал ровно в девять строк — и обхожусь без более дорогого MC6000 на 14 строк памяти. Экономлю 2 юаня!

mov 0 p1 // это уникальная часть сигнала
slp 7
mov 100 p1
slp 2
loop: mov 0 p1 // а это повторяющаяся, которую пришлось бы прописывать трижды
      slp 8
      mov 100 p1
      slp 2
      jmp loop

Экономим дальше: вместо одного из MC4000 для click-сигнала ставим простейший инвертор за 1 юань и дублируем через него сигнал соседнего click-контроллера. Еще 2 юаня экономии, и в сумме я наоптимизировал почти на четверть изначальной стоимости!

Разные сочетания сигналов формируют разные положения киберспортсменки

Разные сочетания сигналов формируют разные положения киберспортсменки

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

Миску риса этому инженеру

В следующем ТЗ прямым текстом говорится, что мне нужно использовать XBus — второй протокол в игре, передающий дискретные значения. Буду разбираться в следующей статье. А пока потренируюсь в произношении слов Shenzhen и yuan, как советует свежая рабочая рассылка для экспатов…

Схожие новости

#Наименование новостиТональностьИнформативностьДата публикации
1Особенности разработки встраиваемого программного обеспечения. Часть 108.4701-10-2026
2Пост №639025709.5628-09-2026
3Собираем полигон для пилота — или тестовая среда для РЕД АДМ в песочнице06.2629-09-2026
4Как мы сделали школу айтишников внутри Росатома08.1929-09-2026
5Симулятор микропроцессоров: запускаем BASIC и не только08.429-09-2026
6Найм уровня undefined09.1202-10-2026
7Составное устройство USB на AT32. Часть 1: Подготовка011.3801-10-2026
8Инженерная тайна AMD из нулевых: что общего между Xbox 360, HTC HD2, Sony Ericsson Xperia Play и LG Optimus L208.4703-10-2026
9Почему завод превращает электронику в тыкву. Как защитить промышленные контроллеры от электромагнитных бурь07.227-09-2026

Классификация: Пресс-релизы. Схожих патентов: 0. Схожих новостей: 9. Тональность: 0. Информативность: 8.72. Источник: habr.com.