Как стать автором
Обновить
45
0
Лаврентий Иванов @Pugnator

Пользователь

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

STM32F405: прошить 400кб за 10 секунд или быстрый UART-загрузчик заточенный под USB-UART, размером менее 4 килобайт

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

C утилитой для ПК и платой — программатором,
с использованием SPL,
с полноценной системой команд и проверкой CRC32,
с гарантией доставки и переотправки сбойной или потерянной команды,
с проверками ошибок, отладочными сообщениями и урезанным printf'ом.
Оптимизирован под современные USB-UART преобразователи и потоковую передачу.



Читать дальше →
Всего голосов 45: ↑45 и ↓0 +45
Комментарии 63

Используем console на полную

Время на прочтение 6 мин
Количество просмотров 456K
Метод console.log() — отличный способ вывести отладочную информацию, не мешая пользователю. Но знаете ли Вы, что объект console имеет еще уйму других не менее полезных методов? Очень редко разработчики используют этот функционал, ограничиваясь неблокирующим alert'ом. Что-ж, давайте исправим это положение.

Вкусности console
Всего голосов 172: ↑168 и ↓4 +164
Комментарии 29

Arduino+Modbus+MasterScada

Время на прочтение 2 мин
Количество просмотров 30K
Решил создать союз между arduino и Master Scada.

Почему именно Master Scada? Отвечу: Master Scada работает через собственный OPC сервер имеющий множество настроек, что позволяет хорошо рассмотреть процесс опроса каналов, ну и он бесплатный на 32 канала).

Для теста воспользовался двумя ультразвуковыми дальномерами HC-04 и платой arduino uno.

Передачу осуществил по протоколу modbus.
Читать дальше →
Всего голосов 10: ↑9 и ↓1 +8
Комментарии 13

Простой расчет контрольной суммы

Время на прочтение 12 мин
Количество просмотров 214K
При передачи данных по линиям связи, используется контрольная сумма, рассчитанная по некоторому алгоритму. Алгоритм часто сложный, конечно, он обоснован математически, но очень уж неудобен при дефиците ресурсов, например при программировании микроконтроллеров.



Чтобы упростить алгоритм, без потери качества, нужно немного «битовой магии», что интересная тема сама по себе.
Читать дальше →
Всего голосов 28: ↑27 и ↓1 +26
Комментарии 26

LLVM: компилятор своими руками. Введение

Время на прочтение 14 мин
Количество просмотров 56K
Представим себе, что в один прекрасный день вам пришла в голову идея процессора собственной, ни на что не похожей архитектуры, и вам очень захотелось эту идею реализовать «в железе». К счастью, в этом нет ничего невозможного. Немного верилога, и вот ваша идея реализована. Вам уже снятся прекрасные сны про то, как Intel разорилась, Microsoft спешно переписывает Windows под вашу архитектуру, а Linux-сообщество уже написало под ваш микропроцессор свежую версию системы с весьма нескучными обоями.
Однако, для всего этого не хватает одной мелочи: компилятора!
Да, я знаю, что многие не считают наличие компилятора чем-то важным, считая, что все должны программировать строго на ассемблере. Если вы тоже так считаете, я не буду с вами спорить, просто не читайте дальше.
Если вы хотите, чтобы для вашей оригинальной архитектуры был доступен хотя бы язык С, прошу под кат.
В статье будет рассматриваться применение инфраструктуры компиляторов LLVM для построения собственных решений на её основе.
Область применения LLVM не ограничивается разработкой компиляторов для новых процессоров, инфраструктура компиляторов LLVM также может применяться для разработки компиляторов новых языков программирования, новых алгоритмов оптимизации и специфических инструментов статического анализа программного кода (поиск ошибок, сбор статистики и т.п.).
Например, вы можете использовать какой-то стандартный процессор (например, ARM) в сочетании с специализированным сопроцессором (например, матричный FPU), в этом случае вам может понадобиться модифицировать существующий компилятор для ARM так, чтобы он мог генерировать код для вашего FPU.
Также интересным применением LLVM может быть генерация исходных текстов на языке высокого уровня («перевод» с одного языка на другой). Например, можно написать генератор кода на Verilog по исходному коду на С.



КДПВ

Читать дальше →
Всего голосов 58: ↑55 и ↓3 +52
Комментарии 55

На что стоит променять Cortex-M3?

Время на прочтение 31 мин
Количество просмотров 53K
ARM Cortex-M3 — это, пожалуй, самое популярное на сегодняшний день 32-разрядное процессорное ядро для встраиваемых систем. Микроконтроллеры на его базе выпускают десятки производителей. Причина этому — универсальная, хорошо сбалансированная архитектура, а следствие — непрерывно растущая база готовых программных и аппаратных решений.

Ругать Cortex-M3, в общем-то, не за что, но сегодня я предлагаю подробно рассмотреть Cortex-M4F — расширенную версию всеми любимого процессорного ядра. Перенести проект с микроконтроллера на базе Cortex-M3 на кристалл на базе Cortex-M4F довольно просто, а для ряда задач такой переход стоит затраченных усилий.

Под катом краткий обзор современных Cortex'ов, обстоятельное описание блоков и команд, отличающих Cortex-M4F от Cortex-M3, а также сравнение процессорных ядер на реальной задаче — будем измерять частоту мерцания лампы на микроконтроллерах с разными ядрами.

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

Простыми словами о фильтре частиц

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


В этой статье я расскажу вам об одном из методов оптимальной фильтрации — Фильтре частиц — и покажу, что применить такой фильтр намного проще чем вы думаете.
Читать дальше →
Всего голосов 30: ↑30 и ↓0 +30
Комментарии 4

STM32: SPI: LCD — Вы всё делаете не так [восклицательный знак]

Время на прочтение 8 мин
Количество просмотров 84K
Надеюсь сообщество простит меня за такой заголовок, просто в последнее время все чаще и чаще сталкиваюсь с программами в которых к микроконтроллерам STM32 подключают различные дисплеи с интерфейсом SPI и очень часто передачу данных при этом делают не правильно.
Как следствие — либо код не работает совсем и тогда в него внедряют различные задержки, или пишут код таким образом что он гарантированно будет работать медленно (по сравнению с возможной скоростью). А кто то, не разобравшись просто копирует чужой «с костылями» код, и потом такие «произведения» ходят по интернету из примера в пример…
Блок SPI описанный в данной статье точно есть у контроллеров семейств: STM32F1, STM32F2, STM32F4. По другим смотрите Reference Manual.

Откуда растут такие проблемы и каким образом они решаются под катом.
Читать дальше →
Всего голосов 50: ↑45 и ↓5 +40
Комментарии 44

Нечеткий поиск в словаре с универсальным автоматом Левенштейна. Часть 2

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


В первой части статьи мы рассмотрели универсальный автомат Левенштейна — мощный инструмент для фильтрации слов, отстоящих от некоторого слова W на расстояние Левенштейна не более заданного. Теперь пришло время изучить способы применения этого инструмента для эффективного решения задачи нечеткого поиска в словаре.

Читать дальше →
Всего голосов 32: ↑32 и ↓0 +32
Комментарии 3

«Почему всем можно, а мне нельзя?» или реверсим API и получаем данные с eToken

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


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

Идея показалась неплохой, но как это реализовать? Тут я вспомнил, как однажды в бухгалтерии не работал банк-клиент, ругаясь на отсутствие библиотеки с говорящим именем etsdk.dll, меня охватило любопытство и я полез ее ковырять.

Вообще, компания-разработчик на своем сайте распространяет SDK, но для этого надо пройти регистрацию как компания-разработчик ПО, а это явно не я. На просторах интернета документацию найти не удалось, но любопытство одержало верх и я решил разобраться во всём сам. Библиотека – вот она, время есть, кто меня остановит?
Читать дальше →
Всего голосов 49: ↑48 и ↓1 +47
Комментарии 78

«Hello World!» на C массивом int main[]

Время на прочтение 5 мин
Количество просмотров 46K
Я хотел бы рассказать о том, как я писал реализацию «Hello, World!» на C. Для подогрева сразу покажу код. Кого интересует как до этого доходил я, добро пожаловать под кат.

#include <stdio.h>
const void *ptrprintf = printf;
#pragma section(".exre", execute, read)
__declspec(allocate(".exre")) int main[] =
{
    0x646C6890, 0x20680021, 0x68726F57,
    0x2C6F6C6C, 0x48000068, 0x24448D65,
    0x15FF5002, &ptrprintf, 0xC314C483
};

Реализация
Всего голосов 114: ↑108 и ↓6 +102
Комментарии 143

Почему я пишу игры на C (да, на C)

Время на прочтение 4 мин
Количество просмотров 90K
Я — тот ещё фрукт. Все мои личные игровые проекты, которыми я занимался в последнее время, были написаны на «vanilla» C. Больше никто так не делает, поэтому, полагаю, вам может быть интересно узнать, почему я сделал такой выбор.
Написанное дальше содержит мнение о языках программирования, которое вам может не понравиться. Я предупреждал.
Читать дальше →
Всего голосов 89: ↑67 и ↓22 +45
Комментарии 253

STM32F4: GNU AS: Программирование на ассемблере (Часть 1)

Время на прочтение 15 мин
Количество просмотров 69K
Обсуждение статьи после прочтения или задать вопросы можно в VK: vk.com/topic-200545792_46641834

Так же теперь (2021 год) я написал небольшой редактор для программ на ассемблере, начинать читать можно с Редактор ассемблера для ARM микроконтроллеров для компилятора gnu as. Старт там же можно будет и создавать проект в более удобном формате нежели описано в этой и нескольких последующих статьях. При этом рекомендую все таки ознакомится со всеми статьями по этой тематике в моих публикациях, так как не везде я повторяю прошлые материалы.

Это моя первая статья для сообщества Хабрахабр и написать ее я решил про то что сейчас волнует меня самого: написание программ для микроконтроллеров STM32 (семейство АRМ) на языке ассемблера. Я использую отладочную плату на основе микроконтроллера STM32F407 (STM32F4 Discovery, Open407I-C), но статья будет не менее полезна и для программирования других микроконтроллеров STM32.
Читать дальше →
Всего голосов 34: ↑32 и ↓2 +30
Комментарии 45

Скриншотим игры — the hard way

Время на прочтение 6 мин
Количество просмотров 39K
Ну что такого сложного может быть в создании скриншота? Казалось бы — позови функцию, любезно предоставленную операционкой и получи готовую картинку. Наверняка многие из вас делали это не один раз, и, тем не менее, нельзя просто так взять и заскриншотить полноэкранное directx или opengl приложение. А точнее — можно, но в результате вы получите не скриншот этого приложения, а залитый черным прямоугольник.
Читать дальше →
Всего голосов 46: ↑45 и ↓1 +44
Комментарии 22

Разработка цифровой аппаратуры на C++/SystemC глазами SystemVerilog программиста

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


SystemC это библиотека для C++ позволяющая моделировать всевозможные аппаратные системы на различном уровне абстракции. Поддерживается как традиционное дискретно-событийное моделирование, привычное программистам на Verilog и VHDL, так и аналоговое моделирование в духе SPICE/Verilog AMS. В комплект также входит библиотека и методология для виртуального прототипирования, библиотеки для написания тестовых окружений и верификации с использованием рандомизированных тестов.

В этой я расскажу о синтезируемом подмножестве SystemC, сравнивая его с синтезируемым SystemVerilog. Сам я пользуюсь SystemC уже где-то 3 года, а до этого несколько лет писал на Verilog/SystemVerilog. Попытаюсь охватить предмет с разных сторон: начиная с философских рассуждений о причинах возникновения SystemC, краткого обзора экосистемы и инструментария и заканчивая практическими примерами синтаксиса и семантики.

Подразумевается, что читатели знакомы с Verilog и C++.
Читать дальше →
Всего голосов 37: ↑37 и ↓0 +37
Комментарии 28

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

Время на прочтение 5 мин
Количество просмотров 9.9K
На просторах сети расположен блог "No Marketing Bullshit". Неизвестный автор блога по всей видимости является одни из наших поклонников, о чем свидетельствует пара заметок на тему анализатора кода PVS-Studio. Я решил перевести одну из этих заметок. На всякий случай отмечу, что мы никакого отношения к этому блогу не имеем. Это не наш стиль. Если мы собираемся написать рекламную статью, то мы не маскируемся, а так и пишем — это рекламная статья.
Читать перевод
Всего голосов 33: ↑24 и ↓9 +15
Комментарии 16

Как сжать плоского кота

Время на прочтение 9 мин
Количество просмотров 40K
Однажды в студеную зимнюю пору… ровно год назад, у нас появилась нетривиальная задача. Есть экран на электронных чернилах, есть процессор 16МГц (да-да, во встраиваемой электронике, особенно сверхнизкого энергопотребления, встречаются и такие) и совсем нет памяти. Ну, т.е. килобайтов 8 RAM и 256 Flash. Килобайтов, Карл. И в эти унылые килобайты необходимо запихнуть несколько изображений 800х600 в четырех оттенках серого. Быстро перемножив в уме 800 на 600 и на 2 бита на пиксель получаем 120 тысяч байтов. Несколько не влезает. Надо сжимать.

Так перед нами появилась задача: «как сжать плоского кота»? Почему кота? Да потому, что на котиках тестировали, на чем же еще черно-белые картинки проверять. Не на долларовых банкнотах же.
Читать дальше →
Всего голосов 85: ↑80 и ↓5 +75
Комментарии 65

Простой Blender. Часть 3

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

КДПВ 3. Неполная разборка

В предыдущей части я писал об объектах. Эта часть — о геометрии.

Я так скоро сам танк нарисую, сколько можно-то?
Всего голосов 36: ↑36 и ↓0 +36
Комментарии 27

Самомодифицирующийся код

Время на прочтение 12 мин
Количество просмотров 29K
В статье подробно рассказано о самомодифицирующимся коде (СМК), и о том, как его использовать в своих программах. Примеры написаны на C++ с использованием встроенного ассемблера. Ещё я расскажу о том, как выполнять код на стеке, что является существенным козырем при написании и выполнении СМК.



1. Вступление


Ну что ж, поехали. Статья обещает быть длинной, так как мне хочется написать её такой, чтобы у вас не возникло никаких вопросов. На тему СМК уже существует миллион статей, но здесь представлено моё видение проблемы – после сотен часов написания СМК… Я попытаюсь впихнуть все свои труды сюда. Всё, хватайте томатный сок (или что вы там предпочитаете пить), делайте музыку громче и готовьтесь узнать, как избавить своё приложение от начинающих кракеров! Попутно, я расскажу вам о памяти Windows и некоторых других вещах, о которых вы даже и не подозреваете.
Читать дальше →
Всего голосов 15: ↑10 и ↓5 +5
Комментарии 12

Пользовательская документация и GitHub

Время на прочтение 5 мин
Количество просмотров 38K
      Сталкивались ли вы когда нибудь с долгим поиском документации к используемой библиотеке или пакету? Я считаю странным, что исходный код не распространяется с пользовательской документацией. Ведь она такая же важная часть кода, как тесты или зависимости. Без хорошей пользовательской документации мы можем «убить» уйму времени на анализ кода и комментариев. Так почему бы не хранить пользовательскую документацию вместе с исходными кодами программы? Речь не о DocBlock и генерацию документации по API проекта, я говорю именно о пользовательской документации, которую мы так любим за последовательное повествование и множество примеров.

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

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

Мне нужна помощь КО
Всего голосов 26: ↑20 и ↓6 +14
Комментарии 42

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность