TinyML сам по себе означает внедрение ml в маломощные микроконтроллеры и встроенные системы. Это устройствам IoT выполнять задачи обработки данных и машинного обучения непосредственно на самом устройстве, минимизируя таким образом необходимость в постоянном подключении к интернету или внешним вычислительным ресурсам. Основная цель TinyML - сделать ии или простые модельки доступным для самых маленьких устройств
firmware программист
STM32. Процесс компиляции и сборки прошивки
Так родилась идея для этой статьи: не используя ничего, кроме текстового редактора и командной строки, собрать проект мигания светодиодом на отладочной плате STM32F0-Discovery. Поскольку я не до конца понимал, как происходит процесс компиляции и сборки проекта, мне пришлось восполнять пробелы в знаниях. Разобравшись с этим вопросом, я подумал — а почему бы не рассказать другим об этом?
Всем кому интересно — добро пожаловать под кат! 🙂
Кратко про протоколы взаимодействия в микроконтроллерах: SPI, IDC, UART, CAN
Привет, Хабр!
Утренний будильник, кофеварка, микроволновка, телевизор, кондиционер – все они оборудованы микроконтроллерами. Микроконтроллеры управляют функциями устройства, обеспечивая пользовательский интерфейс и взаимодействие с другими устройствами. Микрокотроллеры также используются в автомобилях, к примеру для контроля работы двигателя или системы ABS. А в медицине практически все оборудование работает на микроконтроллерах.
Протоколы в микроконтроллерах позволяют устройствам «понимать» друг друга и работать вместе, создавая общую систему. Протоколы определяют, как устройства подключаются, обмениваются данными, синхронизируют действия, управляют форматированием, временем и последовательностью сообщений между микроконтроллерами и другими компонентами в системах.
В этой статье рассмотрим такие протоколы взаимодействия как SPI, IDC, UART, CAN
Настройка связки VScode, OpenOCD, WCH-LinkE, Cortex-M
Wch-link является программатором для ARM, RISC-V микроконтроллеров. По возможностям это аналог St-link, JLink и прочих. По сравнению с st-link он поддерживает контроллеры не только фирмы STM. А по сравнению с JLink стоит намного дешевле и не имеет проблем с лицензиями, которые могут встречаться у дешевых клонов JLink. Также плюсом идет поддержка набирающих популярность контроллеров от китайской компании WCH.
Есть несколько вариантов этого отладчика, я буду говорить о версии Wch-linkE rev 1.3.
Разглядывая JTAG: самый быстрый программный JTAG на Arduino
В предыдущих статьях цикла был приведен пример реализации ведомого модуля JTAG на Verilog. Я предположил, что количество инженеров, знающих Verilog, меньше, чем количество инженеров, которым требуется понимание принципов работы JTAG. Поэтому, помимо реализации на Verilog, модуль JTAG был также реализован на Си.
Так как реализация на Си преследовала исключительно образовательную цель, то скорость её работы была принесена в жертву некоторой унифицированности подходов с реализацией на Verilog. Поэтому я был несколько удивлён, когда в личном сообщении @Sergei2405 спросил, нет ли способа ускорить работу примера для микроконтроллера, чтобы применить этот код в промышленном изделии.
Субъективно, практическое применение программного JTAG мне по‑прежнему видится не вполне оправданным.
Но, во‑первых, это хороший повод рассмотреть предельные возможности микроконтроллеров.
А во‑вторых, есть формальная причина сказать, что в данной статье предлагается Решение Прикладной Задачи :)
Итак, сегодня мы поговорим про прерывания, поллинг и прочее. А протокол JTAG станет фоном для повествования.
Расшифровка startup файла Arm Cortex-M
В статье предпринята попытка разобраться в содержимое startup файла микроконтроллера STM32F4, построенного на базе ядра Arm Cortex M4. Для запуска ядра используется ассемблерный код, который и предстоит изучить. Для лучшего понимания материала необходимо иметь представление об архитектуре ядра Cortex M4. Сразу отмечу, что замечания и уточнения приветствуются, т. к. они позволят дополнить представленную информацию.
Как Проинициализировать Микроконтроллер [часть 2]
Программа это реализация алгоритма. А алгоритм это упорядоченная последовательность действий. Поэтому очень большое значение имеет правильный порядок исполнения программы.
В этом тексте я написал как автоматически выявить правильную последовательность инициализации
SMBus аккумулятор на bq40z50 — боль, страдания, подводные камни
На разработку собственного супер-пупер аккумулятора с "куртизанками и преферансом" нас сподвигли статьи на Хабре:
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 было написано еще в одной из вдохновивших статей, указанных ранее, поэтому это не было сюрпризом. Тем более, что мы решил «сделать по большому», то есть с дополнительным контроллером заряда и балансировки, с отдельным термистором на силовые транзисторы ну и предохранителем – это была фатальная ошибка, но мы пока об этом не знали.
Аппаратный таймер в качестве датчика звука
В разработке электроники в состав которой входит источник звука бывает нужно делать тест на наличие звука.
В этом тексте я показал простой способ провернуть такой тест.
Ruby и встраиваемые системы
Казалось бы, какое отношение «хипстерские скрипты для веб» могут иметь к жестоким реалиям embedded‑разработки, со всей их низкоуровневой работой и ограниченными ресурсами? Но реальность в очередной раз оказалась куда интересней предубеждений, так появилась на свет эта статья.
Обзор Чипа Внешней I2C Памяти AT24Cхх
AT24C02M5/TR это EEPROM на 256 байт с доступом по двухпроводному синхронному последовательному интерфейсу I2C.
В разработке электронных плат часто надо подписывать электронные платы каким-то серийным номером. Это нужно для идентификации платы при серийном производстве.
Внешние чипы памяти особенно важны так как прошивку могут полностью стереть. В связи с этим хранить серийный номер на микроконтроллере внутри on-chip NOR-Flash самого микроконтроллера ненадежно.
Как я пишу на C по состоянию на конец 2023 года
Выпуск среды разработки Qt Creator 12
Вчера, 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.
Мягкое знакомство с дополнительным кодом
Недавно, общаясь по видеосвязи с другом, я рассказывал ему о своих идеях по реализации нового продукта. В разговоре я упомянул добавление больших знаковых чисел в ассемблере с использованием дополнительного кода, на что получил от собеседника вопрос: «Что такое дополнительный код?» Меня немного удивила его неосведомлённость. Он уже больше 30 лет программирует на Java. Java и Python программисты (а также другие, работающие с языками *с придыханием* вроде Commodore / MicroSoft BASIC) не сталкиваются с нативным типом беззнакового целого числа. В этих языках подобные тонкости реализуются за них.
Всё это круто, но компьютер, за которым вы сидите, внутренне обрабатывает такие числа довольно простым способом, и хорошо бы знать, как именно это происходит.
Плюс это всё же наука. Так что давайте разбираться.
Как оптимизировать код на С для x86-процессоров: подсистема кэша и памяти, инструкции AVX-512
Меня зовут Андрей Бакшаев, я ведущий инженер-программист в YADRO. Моя команда занимается разработкой и оптимизацией математических библиотек под архитектуру x86. До этого я 15 лет работал в Intel. Значительная часть моих задач заключалась в том, чтобы реализовывать некоторые алгоритмы обработки изображений и сигналов в довольно известной математической библиотеке IPP, максимально эффективно используя возможности процессоров. Я также исследовал производительность этих алгоритмов в процессорах на ранней стадии проектирования.
В статье я поделюсь своим опытом оптимизации низкоуровневого кода на языке C. Рассмотрим подсистему кэша и памяти процессоров и новые инструкции AVX-512. Разберем пример ускорения копирования байтового массива данных и посмотрим, как векторизованный код позволяет сократить время работы широко используемого алгоритма замены байтов по таблице с 619 до 34 мс, то есть примерно в 18 раз.
Сколько строк на C нужно, чтобы выполнить a + b в Python?
В своей предыдущей статье я исследовал структуру PyObject
и её роль в качестве заголовка для всех объектов среды исполнения CPython. Эта структура играет важнейшую роль в обеспечении наследования и полиморфизма в системе объектов CPython. Но это лишь вершина айсберга.
В этой статье мы опустимся на один уровень ниже и посмотрим, что же происходит внутри среды исполнения Python для выполнения простого действия a + b
. Иными словами, мы узнаем о подробностях реализации типов, операторов и динамической диспетчеризации в CPython.
Стоит заметить, что хотя мы будем изучать реализацию динамической диспетчеризации для конкретного оператора, те же принципы применимы ко всем операторам, поддерживаемым CPython. То есть, по сути, обладая этими знаниями, вы сами можете реализовать собственный оператор или собственный новый тип.
Реализация многофункционального терминального интерфейса для МК AVR
В данной статье речь пойдёт о разработке многофункционального терминального интерфейса для МК (на примере МК Atmega32 и терминала HyperTerminal. Многофункциональность в моём случае будет заключаться в обработке управляющих символов и управляющих последовательностей с целью реализации не только командного функционала, но и истории вводимых команд. Я постараюсь максимально приблизить свой интерфейс к интерфейсу командной строки Windows. Большая часть статьи - подробный комментарий программного кода, который может быть доступен даже начинающим в программировании. Никакого ООП нет - только элементы языка Си.
Зачем Программисту Микроконтроллеров Математическая Статистика? (или так ли хороши UWB трансиверы?)
Настал день, когда мне для работы программистом микроконтроллеров наконец пригодилась математическая статистика из ВУЗ(овского) курса по теории вероятностей.
Есть очень интересная технология для автоматического радиоизмерения расстояния. Технология основана на UWB трансиверах. Позволяет измерять время пролёта радиоволны.
В этом тексте написал как я исследовал измерения расстояния, при помощи ASICа UWB трансивера DWM1000.
CLI'нический парсинг
Каждый программист однажды получает по голове необходимостью парсить аргументы командной строки и вот это наконец случилось со мной - так почему бы не использовать это как возможность (написать какую-то дичь) (CLI парсер)? Скажу сразу - мы тут чтобы развлекаться, потому требования к парсеру будут... Интересные
Так сколько на самом деле строк на C нужно, чтобы выполнить a + b в Python?
Это ответ на статью «Сколько строк на C нужно, чтобы выполнить a + b в Python?» где количество строк так и не указано. Сразу оговорюсь покрывать все сценарии для python по количеству строк я не собираюсь — слишком много вариантов, слишком лень. Но вот вопрос, сколько питону нужно строк, что бы сложить 2 числа, например "4+5"? Будет ли разница, если сохранять эти числа в переменные или нет? Сегодня мы получим ответы на эти вопросы.
Информация
- В рейтинге
- Не участвует
- Дата рождения
- Зарегистрирован
- Активность