В одной из прошлых статей я писал про разработку, точнее, про расширение терминального интерфейса микроконтроллера AVR, добавив функционал обработки управляющих символов и последовательностей для поддержки истории и редактирования команд. В данной статье я решил написать про доработку терминального интерфейса функцией поддержки кириллицы. Как правило, терминальный интерфейс подразумевает ввод команд и вывод информации латиницей. Однако совсем несложно реализовать ввод команд или отображение текста на русском или другом языке с применением кириллицы, что может оказаться иногда удобной вещью на практике.
Embedded SW/Firmware Engineer
SDR приемник GPS на микроконтроллере
В этой статье я расскажу о том, как я делал самодельный SDR GPS приемник на микроконтроллере. SDR в данном случае означает, что приемник не содержит готовых GPS-модулей или специализированных микросхем для обработки GPS сигналов - вся обработка "сырых" данных выполняется в реальном времени на микроконтроллере (STM32 или ESP32).
Зачем я это сделал — просто Just for fun, плюс - получение опыта.
Как работает FPGA?
Введение
Давайте начнём с самого начала. Что такое FPGA? FPGA расшифровывается как Field Programmable Gate Array (программируемая пользователем вентильная матрица).
FPGA относятся к классу устройств программируемой логики, иногда называемых программируемым оборудованием. По сути, сама по себе FPGA ничего не делает, но может быть сконфигурирована так, чтобы превратиться практически в любую нужную цифровую цепь. Магия заключается в том, что физически при этом ничего не меняется. Достаточно просто загрузить конфигурацию в FPGA, и она начнёт вести себя так, как нужная вам цепь. Не нужны ни пайка, ни перемычки, ни возня с другими соединениями. FPGA можно переконфигурировать так, чтобы она вела себя, как другая цепь, и делать это множество раз. Конфигурация хранится в ОЗУ, то есть, по сути, устройство можно переконфигурировать бесконечно.
На плате Alchitry Cu выделена FPGA Lattice iCE40 HX | На плате Alchitry Au выделена FPGA Xilinx Artix 7 |
В каком-то смысле это похоже на программирование, ведь мы просто вводим текст. Однако фундаментальная реализация существенно отличается, так как мы создаём оборудование.
Если создание оборудования при помощи текста кажется вам магией, не волнуйтесь. Концепция его работы на самом деле довольно проста, и в этом туториале мы подробно о ней расскажем.
UB или не UB – вот в чём вопрос: как gcc и clang обрабатывают статически известное неопределённое поведение
Недавно у нас в команде зашла дискуссия о неопределённом поведении (UB) в C. Напомню для тех, кто не знает: если мы пишем такой код, эффект от выполнения которого (и события в процессе его выполнения) строго не определён в спецификации языка, то возникает неопределённое поведение. Таким образом, встретив такой код, компилятор может действовать по собственному усмотрению, и нет никаких гарантий, что выполнение этого кода пойдёт по предсказуемому пути. Следовательно, нужно избегать неопределённого поведения любой ценой, поскольку мало того, что оно может приводить к глюкам программы, но и часто становится источником уязвимостей и угрозой безопасности. Примеры кода, в котором проявляется неопределённое поведение: выход за границы массива при его индексировании, целочисленное переполнение, деление на ноль, разыменование указателя на null [1].
Компиляторы нередко пользуются неопределённой семантикой языка, чтобы делать те или иные допущения о программе. Например, если написать что-то вроде int x = y/z
, компилятор может предположить, что z не может быть равно нулю, так как деление на ноль приводит к неопределённому поведению, а программист явно не собирался писать такой код. На основе этой информации он может попытаться далее оптимизировать программу так:
Некоторые малоизвестные фичи, фокусы и причуды языка C
В этом посте разобраны некоторые фокусы, причуды и фичи языка C (некоторые из них – весьма фундаментальные!), которые, казалось бы, могут сбить с толку даже опытного разработчика. Поэтому я потрудился сделать за вас грязную работу и (в произвольном порядке) собрал некоторые из них в этом посте. Примеры сопровождаются ещё более вольными краткими пояснениями и/или листингами (некоторые из них цитируются).
Конечно же, здесь я не берусь перечислять абсолютно всё, так как факты из разряда «функция nan()
не может устанавливать errno
, поскольку в определённых ситуациях поведёт себя как strtod()
» не слишком интересны.
ВНИМАНИЕ: сам факт попадания тех или иных вещей в эту подборку не означает автоматически, что я рекомендую или, наоборот, не рекомендую ими пользоваться! Некоторые из приведённых примеров никогда не должны просачиваться за пределы списков наподобие этого, тогда как другие примеры невероятно полезны! Уверен, что могу положиться на ваш здравый смысл, дорогие читатели.
Авиационные газотурбинные двигатели
Авиационные ГТД можно можно разделить на:
- турбореактивные двигатели (ТРД)
- двухконтурные турбореактивные двигатели (ТРДД)
- Турбовинтовые двигатели (ТВД)
- Турбовальные двигатели (ТВаД)
Притом, ТРД и ТРДД могут содержать в себе форсажную камеру, в таком случае они будут ТРДФ и ТРДДФ соответственно. В этой статье мы их рассматривать не будем.
Начнём с турбореактивных двигателей.
Турбореактивные двигатели
Такой тип двигателей был создан в первой половине 20-го века и начал находить себе массовое применение к концу Второй мировой войны. Первым в мире серийным турбореактивным самолетом был немецкий Me.262. ТРД были популярны вплоть до 60-ых годов, после чего их стали вытеснять ТРДД.
Современная фотография Me-262, сделанная в 2016 году
Самый простой турбореактивный двигатель включает в себя следующие элементы:
- Входное устройство
- Компрессор
- Камеру сгорания
- Турбину
- Реактивное сопло (далее просто сопло)
Можно сказать, что это минимальный набор для нормальной работы двигателя.
А теперь рассмотрим что для чего нужно и зачем.
О динамическом программировании на пальцах
Как динамическое программирование может упростить нашу жизнь? Как можно оптимизировать решение задач?
Сегодня мы разберем динамическое программирование на пальцах с примерами на Python!
Усаживайтесь поудобнее, леди и джентльмены!
Импортозамещение работает: две российские FPGA платы, полностью импортозамещающие 35 американских и китайских плат
Вчера известный разработчик FPGA дизайнов и печатных плат Николай Ковач, основатель marsohod.org из Таганрога, добавил поддержку платы Марсоход3GW2 в репозиторий примеров для Школы Синтеза Цифровых Схем, в которую сейчас идет регистрация. Плата покрывает нужды Школы для упражнений с цифровой логикой, синтезом простого микропроцессорного ядра, распознавания и генерации звука и красивой графикой на HDMI дисплее с 24-битным цветом.
Почему это важно и как это связано с Мишустиным, США, Китаем и другими глобальными обстоятельствами? Да от решения микроархитектурных задачек на таких платах непостредственно зависит уровень проектировщиков российcких чипов через несколько лет:
Lua: маленький язык, который смог
Lua — это, пожалуй, мой любимый "маленький язык", с низкой когнитивной нагрузкой и простотой в изучении и использовании. Он встроен во многое ПО, такое как Redis, NGINX через OpenResty и Wireshark (прим. перевод.: и многое другое). Он также используется в качестве скриптового языка в таких играх, как World of Warcraft и Roblox через Luau (прим. перевод.: и многих других). Этот пост — краткое признание в любви языку с некоторыми примерами того, почему он мне так нравится.
Видеокарта VGA для микроконтроллера
Иногда, при разработке устройств на микроконтроллерах, возникает потребность в выводе на дисплей большого количества информации или же в выводе информации на крупный дисплей для возможности ее считывания с большого расстояния. К сожалению, готовых решений этой проблемы нет, а те что есть – весьма дороги. Например, графические ЖК-дисплеи с возможностью подключения к микроконтроллеру обычно имеют диагональ не более нескольких дюймов и достаточно существенную цену (причем, даже монохромные, о цветных вообще можно не говорить).
В то же время есть огромный парк старых ЖК мониторов. Модели с диагональю 15-19 дюймов можно приобрести в рабочем состоянии за 200 – 500 руб. Особенно это касается моделей с немодным сейчас соотношением сторон 4:3. Эти модели достаточно надежные. Лампы CCFL, используемые для подсветки, конечно, теряют яркость за годы эксплуатации и их спектр свечения уходит в неприятный красноватый оттенок, но благодаря большому количеству таких мониторов всегда есть возможность выбрать более-менее живой экземпляр. Кроме того, лампы CCFL относительно несложно заменить обычной светодиодной лентой, подключив ее напрямую к источнику питания 12 В монитора. Однако при этом обычно необходимо заблокировать цепи обратной связи от микросхемы управления подсветкой к контроллеру самого монитора, иначе монитор будет думать что подсветка неисправна и просто выключится. Также придется пожертвовать функцией регулировки яркости. Однако, этой функцией мало кто пользуется. Обычно яркость монитора настраивается один раз в жизни, сразу после его покупки и потом никогда не меняется.
Как создать аудиоплеер. Часть 1. Что под капотом
Всем привет! Меня зовут Дмитрий Булгаков, я Android-разработчик в HiFi-стриминге Звук, и я расскажу, как можно создать аудиоплеер в приложении. Поговорим об инструментах разработки и устройстве плеера — разберем его «анатомию», компоненты и их применение, а также способы улучшения звука с помощью эквалайзера.
Для вашего удобства гайд разделён на несколько основных частей. В первой расскажу об актуальных инструментах разработки плеера и о том, что у него «под капотом».
Поехали!
Когда в автомобиле нет системы GNSS…
Кто бы мог подумать, что в современном авто аж с 4 полноценными экранами (приборная панель, проекция, центральный экран, экран пассажира) и прям настоящим андроидом, производитель мог выпилить навигационный датчик? Удивительно, но факт - Geely Monjaro (купленный у официального дилера (далее ОД)). Как потом выяснилось, Geely Atlas - в той же ситуации... Возможно, есть и другие авто на российском рынке, которые по каким-то причинам обделены этой важной и необходимой функциональностью.
Непорядок, надо исправлять.
Правда ли, что в России самые «богатые» программисты? И как с этим в других странах
В России настоящий фетиш на программистов. Жены айтишников — отдельный жанр в запрещенных социальных сетях, на офисы крупных технологических компаний снимают обзоры, государство раздаёт разработчикам плюшки покруче, чем социально незащищённым категориям граждан. И тут закономерно возникает вопрос, а это только у нас так?
Фазовая автоподстройка частоты
Или по-английски — phase locked loop, PLL. В технической литературе нам часто встречаются эти словосочетания и аббревиатуры. Возможно, это название раньше вводило вас в заблуждение.
ФАПЧ может не только подстраивать и стабилизировать частоту, но и умножать её, что применяется в тактовых генераторах микропроцессоров. ФАПЧ позволяет синхронизировать и демодулировать сигналы, а также восстанавливать слабые сигналы в условиях сильных шумов, и потому применяется во всевозможных устройствах связи, включая радиопередатчики и радиоприёмники, жёстких дисках компьютеров, телевидении и цифровой обработке сигналов.
Сегодня мы соберем и испытаем микромощный ЧМ стерео радиопередатчик (модулятор) с ФАПЧ, а также изучим историю и основные принципы этого замечательного изобретения.
Как запустить собственную GSM-сеть за пять минут при помощи SDR
Давным-давно я уже рассказывал про то, как в домашних условиях поднять GSM-сеть при помощи комплектующих, доступных любому школьнику. И в той статье я мельком упомянул, что идеальным в плане производительности вариантом будет запускать сети при помощи SDR, а не телефонов.
Итак, в сегодняшней статье поговорим о том, как быть владельцам SDR, желающим запустить свою GSM-сеть. Узнаем, какой софт нужен, чтобы заставить её работать в прямом смысле слова за пять минут. Попутно запустим GPRS и ненадолго побываем в 2007 году. Традиционно будет много интересного.
Как собрать LTE-модем на базе SDR
Пожалуй, самой закрытой технологией в пользовательском сегменте является сотовая связь. Очень немногие знают о том, как на самом деле работают телефоны и модемы, отчего им часто приписывают всякие мифические свойства. Как насчёт попробовать запустить полностью открытую реализацию модема стандарта 4G? Именно этим я и предлагаю заняться.
Итак, в сегодняшней статье поговорим о том, как взаимодействовать с мобильной сетью при помощи SDR. Попутно узнаем, какой софт для этого существует, и соберём самый дорогой 4G-модем в истории.
Традиционно будет много интересного.
Импортозамещение ПО в авиации. Почему не взлетаем?
Продолжаем образовательные истории быдлокодера, который никак не может стать миллионером. Сейчас будет трогательная и крайне поучительная история, как мы начали импортозамещать MATLAB в авиации, когда нас об этом никто не просил, и еще до того, как это стало модно, и молодежно!
Прочитав этот текст, вы поймете как нужно правильно оценивать себя, свое ПО и потенциальных партнеров по опасному бизнесу. В тексте описыватеся только реальный личный опыт автора, поэтому все события выдуманы и совпадения случайны.
Как я уже рассказывал, американская коррупция превратила физика-ядерщика в былдокодера, но далеко от ядерных реакторов у меня оторваться сразу не получилось, несмотря на всю мою оторванность. Поэтому первые коммерчески успешные проекты у нашей копании были связанны технологиями «говна и пара», как на флоте называют ядерный реактор атомных подводных лодок. Не спрашивайте почему реактор ядерный, а подлодка атомная, это науке не известно. Но в итоге наше ПО начало применяться для проектирования систем управления АПЛ: сначала в качестве системы моделирования, потом для автоматической генерации управляющего ПО, дальше – больше, и уже наш код стоит непосредственно в системе управления.
Создание аппаратно-независимых библиотек для микроконтроллеров
В данной статье я хотел бы вам расказать, как можно создавать свои аппаратно-независимые библиотеки для микроконтроллеров для работы с цифровыи микросхемами.
Суть создания аппаратно-независимой библиотеки состоит в том, чтобы отвязаться от того уровня абстракции (библиотеки и фреймворки), который предоставляет производитель микроконтроллеров, внутри реализуемой библиотеки. Например, для STM32 - HAL, ESP32 - ESP-IDF или Arduino, для AVR зачастую используют Arduino. Это позволит использовать одну и ту же библиотеку на различных микроконтроллерах (и не только) без изменения кода библиотеки под каждый камень.
Прошиваем программу не только в начало FLASH памяти STM32
Знаете ли вы куда попадает ваша программа после того, как вы нажали кнопку RUN или DEBUG в IDE? Если да, то как изменить этот адрес или даже выйти за пределы постоянной памяти и прожигаться сразу в оперативную память? Небольшая статья, которую я сам в свое время не нашел и потратил много часов и нервов на сбор этой не хитрой информации.
Помоги компилятору помочь тебе
Предисловие
Современные компиляторы обладают огромным количеством диагностик. И удивительно, что очень малая их часть включена по умолчанию.
Огромное количество претензий, которые предъявляют к языку C++ в этих ваших интернетах, — про сложность, небезопасность, стрельбу по ногам и т.п., — относятся как раз к тем случаям, когда люди просто не знают о том, что можно решить эти проблемы лёгким движением пальцев по клавиатуре.
Давайте же исправим эту вопиющую несправедливость, и прольём свет истины на возможности компилятора по предотвращению ошибок.
Information
- Rating
- 94-th
- Location
- Москва, Москва и Московская обл., Россия
- Registered
- Activity