Как стать автором
Обновить
-1
0

firmware программист

Отправить сообщение

Краткий обзор TinyML

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров6K

TinyML сам по себе означает внедрение ml в маломощные микроконтроллеры и встроенные системы. Это устройствам IoT выполнять задачи обработки данных и машинного обучения непосредственно на самом устройстве, минимизируя таким образом необходимость в постоянном подключении к интернету или внешним вычислительным ресурсам. Основная цель TinyML - сделать ии или простые модельки доступным для самых маленьких устройств

Читать далее
Всего голосов 13: ↑12 и ↓1+14
Комментарии2

STM32. Процесс компиляции и сборки прошивки

Уровень сложностиПростой
Время на прочтение30 мин
Количество просмотров28K
Многие из начинающих разработчиков софта для микроконтроллеров реализуют свои проекты исключительно в средствах разработки, которые предоставляются производителем. Многое скрыто от пользователя и очень хорошо скрыто, из-за чего некоторые воспринимают эти процессы сродни настоящей магии. Я, в свою очередь, как человек в пытливым умом и природной любознательностью, решил попробовать собрать проект без использования IDE и различного рода автоматизаций.

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

Всем кому интересно — добро пожаловать под кат! 🙂

Читать дальше →
Всего голосов 107: ↑106 и ↓1+122
Комментарии67

Кратко про протоколы взаимодействия в микроконтроллерах: SPI, IDC, UART, CAN

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров17K

Привет, Хабр!

Утренний будильник, кофеварка, микроволновка, телевизор, кондиционер – все они оборудованы микроконтроллерами. Микроконтроллеры управляют функциями устройства, обеспечивая пользовательский интерфейс и взаимодействие с другими устройствами. Микрокотроллеры также используются в автомобилях, к примеру для контроля работы двигателя или системы ABS. А в медицине практически все оборудование работает на микроконтроллерах.

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

В этой статье рассмотрим такие протоколы взаимодействия как SPI, IDC, UART, CAN

Читать далее
Всего голосов 30: ↑16 и ↓14+8
Комментарии82

Настройка связки VScode, OpenOCD, WCH-LinkE, Cortex-M

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров4.8K

Wch-link является программатором для ARM, RISC-V микроконтроллеров. По возможностям это аналог St-link, JLink и прочих. По сравнению с st-link он поддерживает контроллеры не только фирмы STM. А по сравнению с JLink стоит намного дешевле и не имеет проблем с лицензиями, которые могут встречаться у дешевых клонов JLink. Также плюсом идет поддержка набирающих популярность контроллеров от китайской компании WCH.

Есть несколько вариантов этого отладчика, я буду говорить о версии Wch-linkE rev 1.3.

Читать далее
Всего голосов 11: ↑11 и ↓0+13
Комментарии26

Разглядывая JTAG: самый быстрый программный JTAG на Arduino

Уровень сложностиСредний
Время на прочтение26 мин
Количество просмотров10K

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

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

Субъективно, практическое применение программного JTAG мне по‑прежнему видится не вполне оправданным.
Но, во‑первых, это хороший повод рассмотреть предельные возможности микроконтроллеров.
А во‑вторых, есть формальная причина сказать, что в данной статье предлагается Решение Прикладной Задачи :)

Итак, сегодня мы поговорим про прерывания, поллинг и прочее. А протокол JTAG станет фоном для повествования.

jmp start
Всего голосов 40: ↑40 и ↓0+55
Комментарии30

Расшифровка startup файла Arm Cortex-M

Уровень сложностиСложный
Время на прочтение7 мин
Количество просмотров3.8K

В статье предпринята попытка разобраться в содержимое startup файла микроконтроллера STM32F4, построенного на базе ядра Arm Cortex M4. Для запуска ядра используется ассемблерный код, который и предстоит изучить. Для лучшего понимания материала необходимо иметь представление об архитектуре ядра Cortex M4. Сразу отмечу, что замечания и уточнения приветствуются, т. к. они позволят дополнить представленную информацию.

Читать далее
Всего голосов 9: ↑6 и ↓3+6
Комментарии19

Как Проинициализировать Микроконтроллер [часть 2]

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров4.1K

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

В этом тексте я написал как автоматически выявить правильную последовательность инициализации

Читать далее
Всего голосов 11: ↑7 и ↓4+8
Комментарии27

SMBus аккумулятор на bq40z50 — боль, страдания, подводные камни

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров2.3K

На разработку собственного супер-пупер аккумулятора с "куртизанками и преферансом" нас сподвигли статьи на Хабре:

https://habr.com/ru/articles/350142/ - читаешь и кажется все таким простым

https://habr.com/ru/articles/386099/ - очень все подробно и интересно

https://habr.com/ru/articles/386899/ - вроде тоже ничего сложного и даже кое-какие подводные камни описаны.

Ну всё, будем делать на контроллере bq40z50 супер-пупер аккумулятор, а не это вот все, собранное на коленке, что из Китая возят.

Сначала спроектировали форм-фактор, определились с напряжением 10,8, схемой сборки – 3S3P была выбрана модель ячейки, оптимальная для нас по емкости и току, под нее и будем плясать (забегая сильно вперед, можно сразу сказать, что ключевое – это модель ячейки, основные настройки контроллеров для разных сборок, будут одинаковы, но вот ТОНКИЕ настройки, от которых зависит получится ли у вас в итоге или вы уйдете в запой или, что еще хуже, на форумы техподдержки Texas instruments, вот они все настраиваются индивидуально под каждую ячейку).

Мудрый кот, из мультфильма Том и Джерри в отношении написанного другими людьми учил наc «Don’t You believe it» и только сейчас пройдя этот ад, я понял, насколько он был мудр.

Схема будущей платы была взята из datasheet (SLUSCB3 – 56 страниц) для bq40z50r1 от 2015 года, казалось бы, ничего не предвещало беды.

Ну разве что ошибки в документации, про назначение порта FUSE было написано еще в одной из вдохновивших статей, указанных ранее, поэтому это не было сюрпризом. Тем более, что мы решил «сделать по большому», то есть с дополнительным контроллером заряда и балансировки, с отдельным термистором на силовые транзисторы ну и предохранителем – это была фатальная ошибка, но мы пока об этом не знали.

Читать далее
Всего голосов 14: ↑13 и ↓1+20
Комментарии6

Аппаратный таймер в качестве датчика звука

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров3K

В разработке электроники в состав которой входит источник звука бывает нужно делать тест на наличие звука.

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

Читать далее
Всего голосов 7: ↑4 и ↓3+5
Комментарии52

Ruby и встраиваемые системы

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров2.1K

Казалось бы, какое отношение «хипстерские скрипты для веб» могут иметь к жестоким реалиям embedded‑разработки, со всей их низкоуровневой работой и ограниченными ресурсами? Но реальность в очередной раз оказалась куда интересней предубеждений, так появилась на свет эта статья.

Читать далее
Всего голосов 10: ↑8 и ↓2+12
Комментарии11

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

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров9.9K

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

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

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

Читать далее
Всего голосов 24: ↑13 и ↓11+8
Комментарии33

Как я пишу на C по состоянию на конец 2023 года

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров28K
Этот год выдался переломным для моих навыков по программированию на C. Можно сказать, что я пережил слом парадигмы, что побудило меня пересмотреть привычки и весь стиль программирования. Это была крупнейшая метаморфоза моего личного профессионального стиля за долгие годы, так что я решил написать этот пост в качестве «мгновенного снимка» моих нынешних суждений и профессионального существования. Эти перемены во многом пошли на пользу моей продуктивности и организованности, поэтому, при всей субъективности того, что я скажу, в посте наверняка будут описаны и вполне объективные вещи. Я не утверждаю, что на С нужно писать именно так, как рассказано ниже, а я сам, выступая контрибьютором некоторого проекта, придерживаюсь того стиля, который там заведен. Но описанные ниже приёмы, как оказалось, очень пригодились мне при работе.
Читать дальше →
Всего голосов 38: ↑26 и ↓12+24
Комментарии91

Выпуск среды разработки Qt Creator 12

Время на прочтение3 мин
Количество просмотров9.9K

Вчера, 23 ноября 2023 года вышел релиз среды разработки Qt Creator 12.

Qt Creator (ранее известная под кодовым названием Greenhouse) — свободная IDE для разработки на С, C++, JavaScript и QML. Разработана Trolltech (Digia) для работы с фреймворком Qt. Включает в себя графический интерфейс отладчика и визуальные средства разработки интерфейса как с использованием QtWidgets, так и QML. Поддерживаемые компиляторы: GCC, Clang, MinGW, MSVC, Linux ICC, GCCE, RVCT, WINSCW.

Что нового в Qt Creator 12
Всего голосов 5: ↑4 и ↓1+3
Комментарии4

Мягкое знакомство с дополнительным кодом

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров19K

Недавно, общаясь по видеосвязи с другом, я рассказывал ему о своих идеях по реализации нового продукта. В разговоре я упомянул добавление больших знаковых чисел в ассемблере с использованием дополнительного кода, на что получил от собеседника вопрос: «Что такое дополнительный код?» Меня немного удивила его неосведомлённость. Он уже больше 30 лет программирует на Java. Java и Python программисты (а также другие, работающие с языками *с придыханием* вроде Commodore / MicroSoft BASIC) не сталкиваются с нативным типом беззнакового целого числа. В этих языках подобные тонкости реализуются за них.

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

Плюс это всё же наука. Так что давайте разбираться.
Читать дальше →
Всего голосов 42: ↑40 и ↓2+58
Комментарии18

Как оптимизировать код на С для x86-процессоров: подсистема кэша и памяти, инструкции AVX-512

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров11K

Меня зовут Андрей Бакшаев, я ведущий инженер-программист в YADRO. Моя команда занимается разработкой и оптимизацией математических библиотек под архитектуру x86. До этого я 15 лет работал в Intel. Значительная часть моих задач заключалась в том, чтобы реализовывать некоторые алгоритмы обработки изображений и сигналов в довольно известной математической библиотеке IPP, максимально эффективно используя возможности процессоров. Я также исследовал производительность этих алгоритмов в процессорах на ранней стадии проектирования. 

В статье я поделюсь своим опытом оптимизации низкоуровневого кода на языке C. Рассмотрим подсистему кэша и памяти процессоров и новые инструкции AVX-512. Разберем пример ускорения копирования байтового массива данных и посмотрим, как векторизованный код позволяет сократить время работы широко используемого алгоритма замены байтов по таблице с 619 до 34 мс, то есть примерно в 18 раз. 

Читать далее
Всего голосов 42: ↑39 и ↓3+48
Комментарии23

Сколько строк на C нужно, чтобы выполнить a + b в Python?

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров63K

В своей предыдущей статье я исследовал структуру PyObject и её роль в качестве заголовка для всех объектов среды исполнения CPython. Эта структура играет важнейшую роль в обеспечении наследования и полиморфизма в системе объектов CPython. Но это лишь вершина айсберга.

В этой статье мы опустимся на один уровень ниже и посмотрим, что же происходит внутри среды исполнения Python для выполнения простого действия a + b. Иными словами, мы узнаем о подробностях реализации типов, операторов и динамической диспетчеризации в CPython.

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

Читать далее
Всего голосов 39: ↑36 и ↓3+52
Комментарии64

Реализация многофункционального терминального интерфейса для МК AVR

Время на прочтение29 мин
Количество просмотров4.4K

В данной статье речь пойдёт о разработке многофункционального терминального интерфейса для МК (на примере МК Atmega32 и терминала HyperTerminal. Многофункциональность в моём случае будет заключаться в обработке управляющих символов и управляющих последовательностей с целью реализации не только командного функционала, но и истории вводимых команд. Я постараюсь максимально приблизить свой интерфейс к интерфейсу командной строки Windows. Большая часть статьи - подробный комментарий программного кода, который может быть доступен даже начинающим в программировании. Никакого ООП нет - только элементы языка Си.

Читать сначала
Всего голосов 9: ↑9 и ↓0+9
Комментарии5

Зачем Программисту Микроконтроллеров Математическая Статистика? (или так ли хороши UWB трансиверы?)

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров7.2K

Настал день, когда мне для работы программистом микроконтроллеров наконец пригодилась математическая статистика из ВУЗ(овского) курса по теории вероятностей.

Есть очень интересная технология для автоматического радиоизмерения расстояния. Технология основана на UWB трансиверах. Позволяет измерять время пролёта радиоволны.

В этом тексте написал как я исследовал измерения расстояния, при помощи ASICа UWB трансивера DWM1000.

Читать далее
Всего голосов 12: ↑12 и ↓0+12
Комментарии23

CLI'нический парсинг

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров4.3K

Каждый программист однажды получает по голове необходимостью парсить аргументы командной строки и вот это наконец случилось со мной - так почему бы не использовать это как возможность (написать какую-то дичь) (CLI парсер)? Скажу сразу - мы тут чтобы развлекаться, потому требования к парсеру будут... Интересные

Читать далее
Всего голосов 12: ↑12 и ↓0+12
Комментарии8

Так сколько на самом деле строк на C нужно, чтобы выполнить a + b в Python?

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров27K

Это ответ на статью «Сколько строк на C нужно, чтобы выполнить a + b в Python?» где количество строк так и не указано. Сразу оговорюсь покрывать все сценарии для python по количеству строк я не собираюсь — слишком много вариантов, слишком лень. Но вот вопрос, сколько питону нужно строк, что бы сложить 2 числа, например "4+5"? Будет ли разница, если сохранять эти числа в переменные или нет? Сегодня мы получим ответы на эти вопросы.

Добро пожаловать под кат.
Всего голосов 31: ↑31 и ↓0+31
Комментарии14
1
23 ...

Информация

В рейтинге
Не участвует
Дата рождения
Зарегистрирован
Активность