Как стать автором
Обновить
54
0
Алексей @DSarovsky

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

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

Bootloader. Part 1. Нюансы Cortex-M, устройство памяти stm32 и преднастройка

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

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

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

Автономный программатор SWD

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

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

Вопрос в том, что прошивка устройства внешним программатором – это отдельная технологическая операция, требующая времени и оплаты. Столкнувшись с такой постановкой задачи, пришлось некоторое время повозиться, чтобы реализовать автономный SWD программатор в составе технологической оснастки. Все операции по проверке собранных печатных плат, включая программирование, объединяются в тестовую последовательность, а полное время проверок сводится к возможному минимуму. Надеюсь, что представленная информация облегчит дело тем самураям, которые решат пройти по схожему пути.

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

100 промптов для ChatGPT

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

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

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

Прошивка и отладка STM32 в VSCode под Windows

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

На хабре уже есть немало информации об отладке МК в VSCode на Linux, также было написано как настроить тулчейн для работы под Windows в QT Creator, Eclipse, etc.

Пришло и моё время написать похожую, но для VS Code и под Widnows.

Инициализация проекта будет проводиться с помощью STM32CubeMX. Сборкой будет управлять CMake с тулчейном stm32-cmake. В качестве компилятора используется ARM GNU Toolchain. Тестовым стендом является NUCLEO-F446ZE.

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

Фантомный double в прошивках для ядер Cortex-M*

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

В последнее время появилось много микроконтроллеров на ядрах ARM Cortex-M*, которые поддерживают аппаратную реализацию математики плавающей запятой (FPU). В основном FPU работают с одиночной точностью (float) и её вполне достаточно для работы с сигналами, полученными с АЦП. FPU позволяет забыть о проблемах дискретизации и проблемах переполнения целочисленных вычислений. FPU быстр - все математические операции с одиночными float, кроме деления и взятия корня, занимают на Cortex-M4F один такт. Поэтому после перехода на Cortex-M4F мы вздохнули свободно и стали писать математику на float. Как же мы удивились, найдя в скомпилированном коде математические операции над double с программной, очень медленной эмуляцией.

В статье рассказывается, как обнаружить и исправить присутствие double в прошивках, где ядро аппаратно поддерживает тип float, но не поддерживает double.

Работа ведётся в среде IAR Embedded Workbench на примере реального кода на языке Си.

Читать далее
Всего голосов 86: ↑84 и ↓2 +82
Комментарии 25

Типобезопасная работа с регистрами без оверхеда на С++17: value-based метапрограммирование

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

С++, благодаря своей строгой типизации, может помочь программисту на этапе компиляции. На хабре уже довольно много статьей, описывающих как, используя типы, добиться этого, и это прекрасно. Но во всех, что я читал, есть один изъян. Сравним с++ подход и си подход с использованием CMSIS, привычный в мире программирования микроконтроллеров:


some_stream.set (Direction::to_periph)    SOME_STREAM->CR |= DMA_SxCR_DIR_0
   .inc_memory()                                          |  DMA_SxCR_MINC_Msk
   .size_memory (DataSize::word16)                        |  DMA_SxCR_MSIZE_0
   .size_periph (DataSize::word16)                        |  DMA_SxCR_PSIZE_0
   .enable_transfer_complete_interrupt();                 |  DMA_SxCR_TCIE_Msk;

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

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

Оптимизированный доступ к GPIO и не только, часть вторая

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

Уважаемые жители Habr‑а, В данной статье, речь пойдет о доступе к GPIO, и другим регистрам, используя C++.

Несколько лет назад, я подготовил статью, о том, как можно используя constexpr‑клаcсы, серьезно оптимизировать доступ к GPIO‑порту, таким образом, чтобы команда «PA0.set()» — превращалась в одну‑три ассемблерных инструкции, в зависимости от обстоятельств. Этот класс лишь выглядел обычным, который оптимизировался компилятором. Фактически, это была высокоуровневая оптимизация низкоуровневого кода. Теоретически возможно было перегрузить оператор равенства и писать просто PA0=1 или PA0=0, фактически это вызывало inline инструкцию, позволяющую добавить еще и барьерную инструкцию.

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

Итак. Задача состояла в том, чтобы максимально описать любой регистр, и получить доступ к нему, удобным способом. Я несколько раз пытался различными способами формализовать описание, и мои попытки привели меня к следующему коду.

Читать далее
Всего голосов 17: ↑15 и ↓2 +13
Комментарии 47

Приручение черного дракона. Этичный хакинг с Kali Linux. Часть 8. Методы и средства внешней разведки

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

Приветствую тебя, дорогой читатель, в восьмой части серии статей «Приручение черного дракона. Этичный хакинг с Kali Linux».

В одной из прошлых частей мы затронули первую фазу любой атаки, именуемую футпринтингом (footprinting) и разобрали несколько простых примеров сбора информации об объекте расположенном в локальной сети. Однако, мы так и не рассмотрели подробно методы и средства для проведения внешней разведки, и сбора информации. Самое время это исправлять! Поэтому данная статья будет полностью посвящена именно этой теме.

Думаю, что тебе часто попадалась на глаза аббревиатура OSINT (open-source intelligence), являющая собой миру отдельное направление, посвященное сбору информации из открытых источников. В рамках данной статьи я попытаюсь наглядно продемонстрировать каким образом злоумышленник проводит первичный сбор информации из открытых источников о цели и какие инструменты в составе Kali нам в этом помогут. В качестве примера я буду проводить сбор информации о коммерческом Банке с которым у меня заключен договор.

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

C++23 — финал, C++26 — начало

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

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

Комитет занимался полировкой C++23:
  • static operator[];
  • static constexpr в constexpr-функциях;
  • безопасный range-based for;
  • взаимодействие std::print с другими консольными выводами;
  • монадический интерфейс для std::expected;
  • static_assert(false) и прочее.

И прорабатывал новые фичи C++26:
  • std::get и std::tuple_size для агрегатов;
  • #embed;
  • получение std::stacktrace из исключений;
  • stackful-корутины.

Подробности
Всего голосов 54: ↑53 и ↓1 +52
Комментарии 34

Расследуем инциденты в дампе оперативной памяти Windows (GrrCon2016)

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

В этой статье нам вновь предстоит провести расследование двух инцидентов в файлах виртуальных машин. Расследовать будем фишинговую атаку и заражение трояном, доберёмся до чужих переписок в дампах памяти, почитаем письма, изучим фишинговые вложения и другие артефакты в памяти.
Работать будем с известной многим утилитой volatility и её плагинами, а также с утилитами: readpst, mactime из TheSleuthKit и olevba из oletools.

К расследованию
Всего голосов 14: ↑14 и ↓0 +14
Комментарии 1

Простой пример написания Dockerfile. Использование многоэтапной сборки

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

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

Для понимания данной статьи необходимы минимальные знания Docker, а также для использования примеров - установленный Docker Desktop локально на компьютере.

Вначале немного теории.

Dockerfile - это файл, который содержит инструкции для сборки образа. На основании образа создается и запускается контейнер.

Обратимся к официальной документации https://docs.docker.com/get-started/overview/

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

USB на регистрах: bulk endpoint на примере Mass Storage

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


Еще более низкий уровень (avr-vusb)
USB на регистрах: STM32L1 / STM32F1
USB на регистрах: interrupt endpoint на примере HID
USB на регистрах: isochronous endpoint на примере Audio device

В прошлый раз мы познакомились с общими принципами организации USB и собрали простое устройство, иллюстрирующее работу конечной точки типа Control. Пришло время изучать следующий тип — Bulk. Конечные точки такого типа предназначены для обмена большими объемами информации, причем чувствительной к надежности, но не скорости обмена.

Классические примеры — запоминающие устройства и переходники вроде USB-COM. Но переходники требуют еще наличия конечной точки типа Interrupt, которую мы пока «не проходили», так что остановимся на эмуляции флешки. Точнее, двух флешек одновременно.
Читать дальше →
Всего голосов 19: ↑19 и ↓0 +19
Комментарии 37

Как работать с атомарными типами данных в C++

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

Насколько популярна сегодня тема атомарных данных, настолько же она обширна для одной статьи. Можно подробно останавливаться на разных аспектах атомарности: например, анализировать memory ordering, рассуждать о lock-free алгоритмах с использованием атомиков или исследовать производительность атомиков на разных платформах.

Под катом мы рассмотрим некоторые базовые принципы работы с атомарными типами данных в языке C++. А именно: осветим работу с атомарными данными, основные операции с ними в стандартной библиотеке C++, а также некоторые аспекты использования атомиков с пользовательскими типами данных.

Читать далее
Всего голосов 61: ↑60 и ↓1 +59
Комментарии 13

Кончай бухать, айда читать: нейробиолог даёт советы по борьбе с деградацией мозга

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

Ричард Рестак у себя дома в Вашингтоне О.К.

Зашли в комнату, и не можете вспомнить, зачем пришли? Встретились с коллегой на работе, и забыли, как его зовут? У большинства людей бывают подобные эпизоды. Но в зрелом возрасте они могут нагонять беспокойство. Выглядим ли мы после таких эпизодов менее профессионально? Не признак ли это надвигающейся деменции? Хорошие новости: память не просто восстанавливается при помощи упражнений, в некоторых случаях можно даже избежать болезни Альцгеймера.

Нейробиолог, доктор Ричард Рестак, бывший президент Американской нейропсихиатрической ассоциации, выступал с лекциями о работе мозга и поведении человека всюду, от Пентагона до НАСА, и написал более 20 книг о мозге. Последняя его книжка, The Complete Guide to Memory: The Science of Strengthening Your Mind [Полное руководство по памяти: Наука укрепления вашего разума], посвящается таящемуся внутри нас страху того, что каждый раз, когда вы забываете, где оставили очки для чтения, является признаком надвигающегося краха. «В сегодняшней Америке, — пишет автор, — любой человек в возрасте от 50 лет живёт в страхе перед ужасным А». Небольшие провалы в памяти – главное, на что жалуются люди старше 55 лет своим врачам, хотя по большей части эти случаи оказываются не заслуживающими тревог.
Читать дальше →
Всего голосов 73: ↑70 и ↓3 +67
Комментарии 234

8 практических советов как сделать тренировки частью привычной жизни и перестать ненавидеть физкультуру. Часть вторая

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

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

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

Ре-бя-таааа!!! Берегите себя, заботьтесь о себе, ваше тело может выполнять ту физическую нагрузку, к которой вы подготовили ваше тело. Поймите, ваша физическая активность должна быть безопасна в первую очередь, адекватна вашей физической подготовке во вторую и должна приносить вам удовольствие в третью, но не в последнюю очередь!

Разберем еще несколько, достаточно важных, рекомендаций, которые вы сможете применить немедленно. И в конце, по традиции вас ждет чек-лист для самоконтроля. И велкам комментировать!

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

Руководство по CMake для разработчиков C++ библиотек

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

Данное руководство позволит читателю составить полную картину того, как организовать сборку C++ библиотек с использованием современных возможностей CMake. Предполагается, что читатель имеет представление о базовых понятиях из мира CMake и динамических/статических C++ библиотек, так как в руководстве они могут не объясняться.

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

Атака на Intel TXT через перехват выполнения кода SINIT

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

Атака, представленная в этой статье, как обычно, предполагает, что злоумышленник может выполнить код до запуска TXT, т.е. до инструкции SENTER. Цель злоумышленника состоит в том, чтобы либо 1) иметь возможность скомпрометировать только что загруженный гипервизор, даже если он был только что «безопасно» загружен TXT, либо 2) иметь возможность загрузить произвольный гипервизор, но сделать так, чтобы он выглядел как доверенный, сделав все хэши PCR правильными. Так работает представленная сегодня атака. Для базового ознакомления с Intel®Trusted Execution Technology (TXT).
Наша новая атака использует ошибку в модуле SINIT. Прежде чем описывать ошибку, давайте кратко рассмотрим роль SINIT в Intel TXT.

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

51 Атрибут Хорошего С-кода (Хартия Си программистов)

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

Это не академические атрибуты из учебников. Это скорее правила буравчика оформления сорцов из реального prod(а). Некоторые приемы совпали с MISRA, некоторые с CERT-C. А кое-что является результатом множества итераций инспекций программ и перестроек после реальных инцидентов. В общем тут представлен обогащенный концентрат полезных практик программирования на С(ях).

Читать далее
Всего голосов 62: ↑57 и ↓5 +52
Комментарии 164

Как удалённо отлаживать через WinDbg не включая отладочный режим Windows

Время на прочтение 4 мин
Количество просмотров 12K
Иногда при анализе какой-нибудь платной программы малвари случается так, что она не хочет нормально работать, если в памяти есть отладчик или включён отладочный режим Windows.
В таких ситуациях помогает использование виртуальной машины с подключённым к ней отладчиком (например, GDB или IDA). Это если программа не пытается «сломаться» и в виртуальной машине тоже.
Читать дальше →
Всего голосов 25: ↑25 и ↓0 +25
Комментарии 1

Manticore — альтернатива Эластику на C++ с 21-летней историей

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

5 лет назад мы форкнули Manticore из open source версии некогда популярного open source поискового движка Sphinx 2.3.2. У нас было два пакетика травы, семьдесят пять ампул мескалина, три C++ разработчика, один саппорт-инженер, опытный пользователь, менеджер, мать пятерых детей, помогающая нам на полставки и гора багов, крэшей и технических долгов. И вот, по прошествии 5 лет и сотен новых пользователей мы готовы сказать, что Manticore можно использовать как альтернативу Elasticsearch и для полнотекстового поиска и для аналитики данных.

В этой статье хочется: вспомнить как всё начиналось и что было до SOLR и Elasticsearch, максимально объективно обрисовать текущую ситуацию, попытаться понять куда нам двигаться дальше.

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

Информация

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