Pull to refresh
70
0.7
Иван Савватеев @SIISII

Микроконтроллеры, цифровая электроника, ОС…

Send message

Автоматическая Генерация Конфигураций для Make Сборок (или Лучшее Программирование — Конфигурирование)

Level of difficultyEasy
Reading time7 min
Views4.3K

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

Проблема в том, что конфигов становится так много, что можно нечаянно забыть какой-то важный конфиг.

В этом тексте представлен механизм автоматической конфигурации сборки.

Читать далее

Настройка ToolChain-нa для Разработки на Микроконтроллерах YTM32x

Level of difficultyEasy
Reading time18 min
Views3.4K

Абсолютно все микроконтроллеры программируются одинаково, если собирать код из make файлов.

Настало время освоить очередное семейство ARM-совместимых микроконтроллеров. За плечами уже AVR, MSP430x, LPC21x, STM32x, MDR32x, ESP32x, SPC58x, CC26x2, NRF53x, AT32Fx. Теперь вот YTM32x от компании YUN TU (Suzhou YTM Semiconductor Co Ltd).

С какой же стороны следует подходить к микроконтроллерам YTM32x?
Давайте разбираться...

Читать далее

Основы по GNU Make

Level of difficultyEasy
Reading time12 min
Views6.3K

GNU Make - это консольная утилита, которая запускает другие консольные утилиты в желаемой последовательности согласно скрипту. Только и всего.

В этом тексте я показал, как можно организовать самостоятельно написанные make скрипты для микроконтроллерных проектов.

Читать далее

Embedded Linux для начинающих (Часть первая)

Level of difficultyEasy
Reading time10 min
Views14K

Однажды по работе мне прилетела задача по сборке и запуску Linux на одноплатном ПК. Тогда я, будучи разработчиком ПО для микроконтроллеров, встал в небольшой ступор — задачка явно не решалась установкой IDE и нажатием в ней кнопки «Собрать проект». Гугл помог узнать о том, что существует некий Buildroot. В материалах по теме всё выглядело довольно просто: скачай, настрой, дерни пару команд, загрузи результат на одноплатник — и можно запускать! Получается, процесс не многим сложнее установки дистрибутива Linux или Windows на обычный ПК? Конечно же, нет. Ведь если у тебя в руках кастомный одноплатник неизвестного китайского бренда, а не BeagleBone или Raspberry Pi, то зарыться в Buildroot придётся с головой...

Читать далее

Биполярный транзистор. Принцип работы

Level of difficultyMedium
Reading time12 min
Views7.5K

Есть множество материалов написанных о работе полупроводников и работе транзисторов.

Зачем еще одна?

Дело в том, что я заметил такую тенденцию в вузовских учебниках – довольно подробное описание работы p-n перехода и очень поверхностное описание работы биполярного транзистора. Зачастую «механика» работы такого транзистора описывается довольно схематично (в совершенно неработоспособном виде) и далее следует быстрый переход на описание внешних параметров. Причем у этих же авторов описание «механики» работы полевого транзистора дается куда обширнее. Видимо, авторы учебников сами не очень «догоняют», как там все работает. И это не удивительно. Человечество вначале эры полупроводников пыталось повторить схему работы вакуумной лампы на полупроводниках, т.к. работа лампы достаточно логична. И собственно полевые транзисторы, в какой-то степени повторяют принцип работы вакуумных ламп. Но вот биполярный транзистор, хотя и был изобретен первым, но это было скорее случайное изобретение, а не осознанный путь к цели.

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

Если Вы задавали себе вопросы наподобие таких:

почему через коллекторный p-n переход, включенный в обратном направлении, течет ток, да еще и самый, что не на есть главный рабочий ток?

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

Почему ток в базы через открытый эмиттерный p-n переход меньше тока через закрый коллекторный p-n переход?

Ну и совсем «подковыристый» вопрос. Почему при включении биполярного транзистора по схеме с общим эмиттером, когда транзистор полностью открыт (находится в режиме насыщения), напряжение на коллекторе становиться меньше напряжения базы? Ведь если смотреть на транзистор с точки зрения пирога n-p-n переходов (как рисуют в учебниках), то сумма падения напряжения на двух p-n переходах (открытом эмиттерном и закрытом коллекторном) должно быть больше напряжения на одном открытом эмиттерном переходе. А оно у нас меньше.

Ответы на эти вопросы под катом

Да как отлаживать этот ваш Tcl?

Level of difficultyMedium
Reading time13 min
Views4.8K

puts "ПЛИС-культ привет, FPGA / RTL / Verification ХАБ!"

Последние несколько месяцев я плотно сижу в Vivado и Tcl и вот решил с вами поделиться своими "открытиями" в области отладки Tcl скриптов, которые вероятно не многие из вас вообще пишут или используют в своей работе.

Несмотря на свою архаичность, Tool Command Language все же остается самым востребованным языком управления средой проектирования для ПЛИС и ASIC. ЕМНИП все эти инструменты управляются через Tcl, Vivado так уж точно, поэтому было бы не плохо научиться или хотя бы посмотреть какие инструменты отладки этих самых пресловутых Tcl-сценариев вообще существуют или существуют ли они вообще, кроме православного puts

В этой заметке, я постараюсь вам показать, что advanced tcl debugging - это не миф, а вполне реальная сущность, которая была создана еще на заре двухтысячных и не то что бы эта сущность как-то изменилась за эти 20 с небольшим лет.

Открывайте ваши консольки, погнали!

Game++. while (!game(over))

Level of difficultyEasy
Reading time35 min
Views8.7K

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

Эта серия статей родилась как заметки на полях к замечательной книге Game Engine Architecture, книга большая, объемная и охватывает все аспекты создания движка. Но там нет нюансов практической разработки. А чтобы видеть нюансы надо понимать не только теорию, все же GAE больше теория, но знать как работает код игры изнутри. Чтобы понимать как, и главное почему, используются выбранные механизмы внутри игры, чтобы видеть проблемы с производительностью и архитектурой, как их искать и как чинить, для этого придется понять как работают и как создавались игровые движки.

Если мне не изменяет память - Кармак сказал, что лучший способ [создания игр] — написать собственный движок ( "The right move is to build your own engine" ), на что многие возразят: это вовсе не так просто. Но папа Doom'a известен не только своим вкладом в разработку игровых движков, но и довольно часто высказывался критически о развитии игровых движков в целом, и о преимуществах создания собственных технологических решений вместо использования готовых.

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

Читать далее

Сборка на CMake для новичка

Level of difficultyEasy
Reading time6 min
Views7.6K

Сборка проектов на CMake вызывает множество вопросов у новичка. Так как это ударило непосредственно по мне, я решил показать и рассказать о том, как быстро создать универсальные скрипты для сборки на CMake.

Читать далее

Собираем и запускаем минимальное ядро Linux

Level of difficultyHard
Reading time9 min
Views14K

Однажды на работе техлид порекомендовал мне проштудировать книгу Understanding the Linux Kernel Бове и Чезати. В ней рассмотрена версия Linux 2.6, сильно не дотягивающая до более современной версии 6.0. Но в ней явно ещё много ценной информации. Книга толстая, поэтому на её изучение мне потребовалось немало времени. Занимаясь по ней, я решил настроить такую среду разработки, в которой я мог бы просматривать и изменять новейшую версию ядра Linux — чтобы было ещё интереснее.

Есть и другие статьи, в которых рассказано, как собрать ядро Linux. Но в этой статье я немного иначе организую и подаю информацию.

Читать далее

Firewall не спасёт

Level of difficultyHard
Reading time15 min
Views28K
Сгенерировано с помощью GIGA-CHAT

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

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

Кодирование UTF-8 без ветвления

Level of difficultyMedium
Reading time6 min
Views2.4K

Можно ли кодировать UTF-8 без ветвлений?

Да.

Вопрос


Натан Голдбаум задал в чате Recurse вопрос:

Я знаю, как декодировать UTF-8 с помощью битовой математики и таблиц поиска (см. https://github.com/skeeto/branchless-utf8), но если я хочу преобразовать кодовую точку UTF-8, то можно ли сделать это без ветвлений?

Для начала, можно ли как-то написать эту функцию на C, которая возвращает количество байтов, необходимых для хранения байтов UTF-8 кодовой точки, без использования ветвления? Или для этого потребуется огромная таблица поиска?
Читать дальше →

Концептуальный wish-you-happy-debug

Reading time3 min
Views1.4K

На эти грабли я чуть не наступил (но не наступил!) в рабочем коде, когда захотел прикрутить концепты. Просто задумался о последствиях, проверил на дистиллированном коде, - и да, оно стреляет. Поэтому предлагаю вам в качестве упражнения по ненормальному C++.

Итак. Пусть у нас есть полиморфная (шаблонная, перегруженная, - неважно) функция f(x).
И мы написали концепт, который говорит, что тип может быть аргументом этой функции.
Назовём его fable, то есть, "f-абельный", или, по-русски, "сказка". (Эта сказка будет страшной).

На C++20 это выглядит очень просто и элегантно. (Без requires в виде шаблонной метафункции это тоже делается, но заметно громоздче).

Читать далее

Самые быстрые мьютексы

Level of difficultyEasy
Reading time8 min
Views8K

Cosmopolitan Libc хорошо известна своим «полиглотным жирным бинарным» хаком, который позволяем исполняемым файлам запускаться на шести операционных системах для AMD64/ARM64. Вас может удивить, что при этом она может быть лучше С‑библиотекой для вашего продакшена. Чтобы продемонстрировать это, давайте сравним библиотеку мьютексов Cosmo с другими платформами.

Мы напишем простой тест, который создает 30 потоков, увеличивающих одно и то же число 100 000 раз. Это поможет проверить, насколько хорошо реализация мьютексов справляется с задачей при интенсивном использовании.

Читать далее

Эмулятор БК-0010 на FPGA — часть 2

Reading time6 min
Views8.7K

Первая часть

Если вы уже успели поработать с блочным дизайном в Vivado, то могли увидеть, что внешний вид многих стандартных IP изменяется в зависимости от настраиваемых параметров. Например, модуль AXI-GPIO может быть одноканальным или двухканальным в зависимости от параметра «Enable dual channel»:

Для проекта БК-0010 нам тоже будет удобно воспользоваться этой технологией и сегодня мы узнаем, как это сделать.

Также в этой части мы:

  • Рассмотрим общие сведения об архитектуре БК-0010
  • Поговорим об интерфейсах, о том, как их создавать и как с ними работать.
  • Создадим несколько вспомогательных IP, внешний вид и характеристики которых меняются в зависимости от параметров.
Читать дальше →

Эмулятор БК-0010 на FPGA

Reading time8 min
Views18K


Большинство любительских проектов FPGA, опубликованных на Хабре, сделаны на оборудовании фирмы Altera (теперь Intel). Давайте для разнообразия посмотрим, что можно сделать на продукции его основного конкурента – Xilinx. Мы возьмём и сделаем достаточно большой и сложный проект, в процессе реализации которого нам понадобится:

  • Выбрать Development board и необходимые PMOD к ней
  • Определиться с дизайном проекта, выбрать clock domains и правила перехода между ними
  • Освоить основные функции Xilinx Vivado – создание проекта, работу с блочными схемами, компиляцию, симуляцию, отладку
  • Сделать несколько IP с интерфейсом AXI4
  • Поработать с внешними устройствами
  • Сделать с нуля собственный процессор с контроллером шины и обработкой прерываний
  • Написать модуль для верификации
  • Наконец собрать всё вместе и получить реализацию на FPGA легендарного (как минимум для тех, кто тогда жил) компьютера середины 80-х – БК-0010

Планируется цикл статей, в которых всё это будет подробно описано, сегодня первая из них. Проект написан на System Verilog с небольшими вставками Verilog и VHDL в тех местах, где это необходимо. От читателя требуется понимание базовых принципов языков Verilog/VHDL на уровне книжки Харрис&Харрис.
Читать дальше →

Реализуем эффективный тупль с помощью C++26

Level of difficultyMedium
Reading time7 min
Views11K

Свет видел много любительских реализаций std::tuple, и реализация своих велосипедов — наверное, это действительно действенный способ обучения: вряд-ли можно сказать, что ты что-то по-настоящему понимаешь, если не можешь объяснить, как это что-то устроено.

Многие пытливые умы на протяжении десятилетий задавались вопросом: как же реализован std::tuple, как мне реализовать свой тупль (кортеж)? [1]

И немало было дано ответов на такие вопросы и написано статей ([2]). Однако я берусь утверждать, что все они имеют один фатальный недостаток! Конкретнее, они все рассматривают в основном лишь один (и при этом неэффективный) способ реализации: с помощью множественного наследования или рекурсивного инстанцирования, имеющий в свой очередь множество своих недостатков, главный из которых — неэффективное использование памяти.

В то время как современный C++ позволяет реализовать тупль гораздо проще (без обилия шаблоноты) и эффективнее.

Войти в мир эффективных реализаций туплей

C++20 в bare-metal программировании, работа с регистрами микроконтроллеров Cortex-M

Level of difficultyMedium
Reading time43 min
Views16K

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

Статья предполагает, что читатель имеет базовые знания программирования bare-metal систем и языка С++, в том числе и современных стандартов. Это означает, что совсем базовые пояснения выходят за рамки этой статьи.

Читать далее

Linux From Scratch на Zynq UltraScale+ MPSoC

Level of difficultyHard
Reading time17 min
Views7.2K

В данной статье я постараюсь описать процесс создания кастомного образа Linux на Zynq UltraScale+ MPSoCс. Каждый необходимый компонент будет собран отдельно с использованием соответствующих утилит. Статья разбита на разделы, которые шаг за шагом знакомят вас с процессом сборки и запуска системы на данной платформе.

Читать далее

Устройство GPIO-драйверов в Linux

Level of difficultyMedium
Reading time26 min
Views11K

Рассмотрим, как устроены GPIO-драйверы в Linux, и почему это сделано именно так. Поймем, почему для простого мигания светодиодом в этой операционной системе надо пройти через N слоев абстракции.

Читать далее

Ускорение проектирования РЧ-, СВЧ-устройств (1/5)

Reading time4 min
Views4.6K


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

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

Information

Rating
2,664-th
Location
Солнечногорск, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

Embedded Software Engineer
Lead