Pull to refresh
120
29.8

Embedded SW/Firmware Engineer

Send message

Как собрать Си программу в OS Windows

Level of difficultyEasy
Reading time9 min
Views14K

Иногда возникает ситуация, когда надо что-то посчитать согласно сложному алгоритму прямо на LapTop PC. При этом сам алгоритм написан на Си.

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

Да всё, что угодно! То есть Вы хотите использовать язык Си как гибкий и быстрый калькулятор в Windows.

В этом тексте представлено минимальное окружение для сборки Си кода в Windows.

Читать далее
Total votes 21: ↑8 and ↓13-5
Comments60

Сортировка Конфигов для Make Сборок

Level of difficultyEasy
Reading time5 min
Views2.2K

Как известно любая большая программа на Си содержит много программных компонентов и, как следствие, много настроек: констант, макросов, конфигурационных структур и прочего. Всё это можно назвать одним словом: конфиги.

Все передают конфиги по-разному.

В этом тексте представлен способ передавать конфиги через скрипты сборки.

Читать далее
Total votes 9: ↑4 and ↓5+1
Comments10

Зачем программисту микроконтроллеров тригонометрия? (или Обзор Усилителя Звука из Apple AirTag)

Level of difficultyEasy
Reading time7 min
Views9.7K

На 12ом году опыта программирования микроконтроллеров мне наконец-то пригодилась школьная тригонометрия (6-класс).
Это настолько специфический случай, что я решил накропать про это заметку.

Когда Вам надо добавить в устройство звук, то можно воспользоваться микросхемой MAX98357A. Это по сути DAC у которого на входе I2S на выходе PWM.

В этой заметке я расскажу о своём опыте работы с усилителем MAX98357A и о том как его тестировать.

Читать далее
Total votes 23: ↑18 and ↓5+19
Comments37

Обзор Чипа Внешней I2C Памяти AT24Cхх

Level of difficultyEasy
Reading time7 min
Views10K

AT24C02M5/TR это EEPROM на 256 байт с доступом по двухпроводному синхронному последовательному интерфейсу I2C.

В разработке электронных плат часто надо подписывать электронные платы каким-то серийным номером. Это нужно для идентификации платы при серийном производстве.

Внешние чипы памяти особенно важны так как прошивку могут полностью стереть. В связи с этим хранить серийный номер на микроконтроллере внутри on-chip NOR-Flash самого микроконтроллера ненадежно.

Читать далее
Total votes 24: ↑13 and ↓11+8
Comments33

Диспетчер Задач для Микроконтроллера

Level of difficultyEasy
Reading time7 min
Views12K

В программировании микроконтроллеров часто нужно написать простые тестировочные прошивки. При этом надо некоторые функции вызывать чаще, а некоторые реже. Для этого, конечно, можно запустить FreeRTOS, однако тогда этот код не будет переносим на другие RTOS например Zephyr RTOS или TI-RTOS. Поэтому надо держать наготове какой-нибудь простенький NoRTOS планировщик.

В этот тексте я представил основные идеи алгоритма такого кооперативного планировщика.

Читать далее
Total votes 21: ↑19 and ↓2+22
Comments26

Полезные Заготовки Вызова Утилит Командной Строки

Level of difficultyEasy
Reading time7 min
Views15K

Не для кого не секрет, что некоторые типичные действия на компьютере проще быстрее и эффективнее выполнить из-под командной строки.

В этом тексте я хотел бы поделиться командами, которые мне очень часто помогают в работе.

Читать далее
Total votes 32: ↑7 and ↓25-18
Comments44

Синтаксический разбор CSV строчек

Level of difficultyEasy
Reading time9 min
Views4.6K

В программировании микроконтроллеров часто надо производить синтаксический разбор (парсинг) CSV строчек. CSV это просто последовательность символов, которые разделены запятой (или любым другим одиночным символом: ; | /). CSV строчки можно, например, повстречать в NMEA протоколе от навигационных GNSS приемников. Любой URL это в сущности та же самая CSV строчка.

В этом тексте я написал как производить синтаксический разбор CSV строчек.

Читать далее
Total votes 16: ↑5 and ↓11-4
Comments133

Генерация зависимостей внутри программы

Level of difficultyEasy
Reading time7 min
Views4.4K

В программировании программы часто строятся иерархично. Один программный компонент вызывает функции из другого программного компонента. Как бы представить эту взаимосвязь в законченной программе?

Эту задачу можно решить прибегнув к языку Graphviz и утилитам cpp, dot, make, chrome.

Читать далее
Total votes 14: ↑10 and ↓4+11
Comments48

Опрос для Программистов Микроконтроллеров (32 вопроса)

Level of difficultyEasy
Reading time1 min
Views8.7K

Это простой опрос на тему того как реагировать на типичные ситуации в повседневной практике командной разработки. Голосование для исследования наиболее вероятных исходов типичных ситуаций.

Цель данного опроса - это попытка выяснить как «правильно» поступать через усреднение.

Читать далее
Total votes 23: ↑8 and ↓15-2
Comments58

Зачем программисту микроконтроллеров комплексные числа (или обзор MEMS микрофона MP23DB01HPTR)

Level of difficultyEasy
Reading time6 min
Views6.4K


На 12ом году работы программистом-микроконтроллеров мне наконец-то пригодились комплексные числа из школьной математики. Где они тут нужны? Пояснение в тексте.

Есть много организаций, которые так или иначе разрабатывают и производят оборудование со звукоизлучателями. Очевидно, что между производством и продажей аудио оборудование надо тестировать.

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

Читать далее
Total votes 13: ↑10 and ↓3+10
Comments15

Задача про игральные кубики и треугольники

Level of difficultyEasy
Reading time7 min
Views4.3K

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

Бросают один кубик три раза. Какова вероятность, что выпавшие значения образуют треугольник?

Бросают три кубика одним броском. Какова вероятность, что выпавшие значения образуют треугольник?

Есть ли различия в решении? Попробуем разобраться.

Читать далее
Total votes 7: ↑2 and ↓50
Comments16

Cross-Detect для Проверки Качества Пайки в Электронных Цепях

Level of difficultyMedium
Reading time27 min
Views5.7K

Как известно электроника это наука о контактах. При этом в реальной разработке контакты часто отсутствуют или не там, где нужно.

Вот пришла электронная плата с производства. Как убедиться, что на этой конкретной плате всё корректно с контактами?

Для этого нужна какая-то технология. Назовем её Cross-Detect.

Читать далее
Total votes 17: ↑12 and ↓5+11
Comments152

Техникум: Конечный Aвтомат Обработки Сигнала с Кнопки

Level of difficultyEasy
Reading time13 min
Views6.6K

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

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

Очевидно, что firmware должно как‑то однозначно распознавать тип нажатия на кнопку; короткое долгое.

Можно очень красиво и элегантно решить эту задачу прибегнув к конечно автоматной методологии разработки программного обеспечения.

Читать далее
Total votes 13: ↑10 and ↓3+9
Comments83

Препарируем Bluetooth Колонку JBL Clip 3

Level of difficultyEasy
Reading time3 min
Views4.6K

Как известно чтобы стать хорошим архитектором надо изучать чертежи выдающихся архитектурных сооружений: плотина Гувера, Бруклинский мост, Эмпайр Стейт Билдинг.

Этот принцип применим в любой другой области. Например в электронике. Чтобы стать хорошим инженером-электроником надо изучать выдающиеся электронные платы. Вот например есть у меня Bluetooth колонка Clip 3. Всё в ней кажется здорово.

Надо понять как это устроено внутри.

Читать далее
Total votes 7: ↑2 and ↓50
Comments6

ISO 26262-6 разбор документа (или как писать безопасный софт)

Level of difficultyEasy
Reading time9 min
Views6.5K

ISO26262 это международный текст, который объясняет как создавать безопасный и высоконадежный встраиваемый софт для мотоциклов, автомобилей, грузовиков и автобусов.

В этом тексте я попробовал разобраться с тем как понять автомобильный стандарт функциональной безопасности ISO26262 в той части, которая относится к требованиям к программному обеспечению (часть 6).

-----

Читать далее
Total votes 4: ↑4 and ↓0+4
Comments20

Разбор I2S трафика в программе Logic 2

Level of difficultyEasy
Reading time1 min
Views3.3K

В этом тексте я написал инструкцию того как настроить логический анализатор Saleae производить автоматический синтаксический разбор трафика на шине I2S.

Читать далее
Total votes 5: ↑3 and ↓2+2
Comments23

Обзор Aппаратного Aудио кодека MAX9860 (2x ADC+DAC)

Level of difficultyEasy
Reading time12 min
Views3.7K

Обзор аудиокодека MAX9860.

MAX9860 это 24 пиновый ASIC американской компании Maxim Integrated у которого внутри один 16ти битный sigma delta ЦАП, и два AЦП с управлением по I2C. Данные загружаются и выгребаются по I2S.

В тексте я написал свои впечатления от работы с этим чипом. Перечислил достоинства и недостатки микросхемы MAX9860.

Читать далее
Total votes 8: ↑5 and ↓3+3
Comments12

Техникум: Распознавание Вещественного Числа из Строчки

Level of difficultyEasy
Reading time9 min
Views4.4K

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

Потом часто надо анализировать текстовые логи с SD-карты. Надо выхватывать вещественные числа из CSV файлов для дальнейших расчетов.

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

В этом тексте я представил решение этой задачи.

Читать далее
Total votes 21: ↑14 and ↓7+11
Comments87

Load-Detect для Проверки Качества Пайки

Level of difficultyEasy
Reading time12 min
Views4K

Как вы думаете зачем в микроконтроллерах есть функция pull-up/pull-down, если можно просто воспользоваться установкой логического уровня push-pull?

Вот типичная ситуация. Вам принесли электронную плату с производства. Крайне вероятно, что на PCB есть какие-то аппаратные баги. Обычно это короткие замыкания на GND/VCC или вовсе непропай.

Как выявить и найти эти бракованные пины?

Вот тут-то нам и помогут подтяжки к питанию/земле на пинах MCU.

Называется эта тема load-detect.

В этом тексте я подробно написал про то, как работает load-detect под капотом.

Читать далее
Total votes 9: ↑6 and ↓3+5
Comments36

Симулятор Графического Монохромного Дисплея на Graphviz

Level of difficultyEasy
Reading time4 min
Views3.6K

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

Проблема в том что у языка Си нет встроенной библиотеки для отрисовки битовых матриц в отдельном окне подобно тому как это есть в Python или C#. Поэтому отлаживают такой код обычно на конечных устройствах.

В этом тексте я написал как можно отлаживать графические дисплеи на DeskTop PC без самого физического дисплея.

Читать далее
Total votes 7: ↑5 and ↓2+7
Comments22

Information

Rating
249-th
Location
Москва, Москва и Московская обл., Россия
Registered
Activity

Specialization

Embedded Software Engineer, DevOps
Senior
Git
Bash
CI/CD
C
Embedded system
Programming microcontrollers
Software development
Algorithms and data structures
System Programming
Development of drivers