Pull to refresh
2
0
Михаил @Mixaill

User

Send message

PCIExpress 1.0 2.5GT/s analyzer на базе ПЛИС своими руками

Reading time12 min
Views8.3K

На работе я занимаюсь созданием PCIExpress устройств на ПЛИС. Некоторые из ПЛИС имеют встроенное PCIExpress ядро, позволяющее работать с этим интерфейсом на уровне пользовательского приложения. ПЛИС серии ECP5UM фирмы Lattice использует Soft-IP Core для реализации протокола, написанный на языке HDL, а в микросхему лишь встроен блок, отвечающий за работу физического уровня. Мне пришла в голову идея попробовать сделать PCIExpress анализатор на базе этой микросхемы.

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

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

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

Полосковые СВЧ делители/направленные ответвители

Reading time5 min
Views25K

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

В статье вас ждут фотографии, схемы и немного формул.

далее
Total votes 36: ↑35 and ↓1+34
Comments35

Безопасно рисуем иконки в ПЗУ и ловим UB в C++ коде на IAR компиляторе

Reading time10 min
Views4.3K

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

Сегодня будем выводить иконку на черной белый графический LCD — но это слишком простая задача. Потому что перед тем как её вывести, необходимо её нарисовать. Рисовать можно в Paint, потом использовать генератор, который переведет растровое изображение в код и использовать его для вывода на экран.

Но мы не ищем простых путей, поэтому иконку будем рисовать сами на С++ для CortexM4 микроконтроллера и сразу в ПЗУ, чтобы не зависеть от всех этих внешних программ, заодно и посмотрим как можно отловить ошибки в уже существующем коде (студентов), которые никто не заметил (даже PVS-Studio).

А еще некоторые компиляторы запрещают делать UB для кода исполняющегося во времени компиляции, поэтому можно отлавливать и UB. Например, мой IAR прекрасно ловит переполнения int. Но обо всем поподробнее.

Чтобы было просто — рисовать будем круг.

Читать далее
Total votes 18: ↑17 and ↓1+16
Comments37

С++ обертка для «всех» Операционных Систем Реального Времени для CortexM4

Reading time27 min
Views20K
image

Я уже рассказывал о том как можно использовать FreeRtos для проектов, написанных на С++ в статье STM32, C++ и FreeRTOS. Разработка с нуля. Часть 1. С тех пор прошло целых 3 года, я серьезно постарел, потерял кучу нейронных связей, поэтому решил встряхнуть стариной для того, чтобы эти связи восстановить и замахнуться на обертку для «любой» популярной ОСРВ. Это конечно шутка, я намеренно взял «всех» в кавычки, но в каждой шутке есть доля правды.
Читать дальше →
Total votes 35: ↑34 and ↓1+33
Comments35

Оптимизированный доступ к GPIO. Или GPIO как constexpr класс. С++

Reading time4 min
Views6.6K

Добрый день, жители Хабра. Данный пост будет посвящен программированию на C++, и использованию constexpr объектов с целью повышения уровня удобства и одновременно оптимизации кода с точки зрения размера и производительности.

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

Читать далее
Total votes 11: ↑9 and ↓2+7
Comments44

Аналоговое и цифровое питание. Мифы и реальность

Reading time8 min
Views34K

Иногда разводишь ты такой плату микроконтроллера или изучаешь документацию к чипу и натыкаешься на такую картину: два питания — аналоговое и цифровое. Две земли тоже не редкость. Я встречал людей, которые даже после пары лет работы в индустрии не всегда знали точно, зачем и когда нужно разделять питание и землю и как это корректно делать. Мы попробуем сегодня пробраться вниз по кроличьей норе. В том числе станут понятны практики подключения аудио оборудования проводами, которые покупаются за золотые слитки.

Узнать как разделять питание и властвовать
Total votes 47: ↑43 and ↓4+39
Comments49

Загрузка конфигурации в ПЛИС через USB или разбираем FTDI MPSSE

Reading time21 min
Views20K


В жизни каждого плисовода наступает момент, когда требуется написать собственный загрузчик файла конфигурации в ПЛИС. Пришлось мне участвовать в разработке учебного стенда для кафедры одного технического вуза. Стенд предназначен для изучения цифровой обработки сигналов, хотя в рамках этой статьи это не имеет особого значения. А значение имеет то, что в основе стенда стоит ПЛИС (Altera Cyclone IV), на которой по задумке автора стенда студенты собирают всякие схемы ЦОС. Стенд подключается к компьютеру через USB. Требуется выполнить загрузку ПЛИС с компьютера через USB.

Принято решение для подключения к ПК использовать FTDI в ее двухканальной ипостаси — FT2232H. Один канал будет использован для конфигурации ПЛИС, другой может быть использован для высокоскоростного обмена в режиме FIFO.

Читать дальше →
Total votes 28: ↑28 and ↓0+28
Comments2

Релиз первой беты кросс-платформенного XAML UI-тулкита Avalonia

Reading time6 min
Views22K

Состоялся релиз первой бета-версии Авалонии.


Avalonia — кроссплатформенный .NET UI-тулкит, вдохновлённый технологиями WPF и распространяемый под лицензией MIT. Он полностью поддерживает .NET Core 2.0, XAML, дата-биндинги, lookless-контролы и многое другое. Avalonia позволяет писать на C# приложения под Windows, Linux и Mac OS X. Возможность запуска на iOS и Android находится в экспериментальном состоянии.



Данная версия стабильна и имеет полное право называться бетой: тулкит не разваливается в руках и имеет приличный базовый набор контролов (см. видео). На нём создано два достаточно больших приложения с открытым исходным кодом: AvalonStudio — кроссплатформенная IDE для разработки на C# и C++ и Core2D — редактор 2D-схем и диаграмм.

Total votes 100: ↑97 and ↓3+94
Comments77

Деловая переписка на английском языке: фразы и советы

Reading time18 min
Views599K
Елена Соловьева, менеджер проектов в компании Лаборатория Касперского, специально для блога Нетологии поделилась советами о том, как вести деловую переписку с иностранными коллегами и партнерами на английском языке. Статья участвует в конкурсе.

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

Задача становится сложнее, если вы общаетесь на неродном английском языке с представителями других культур. В статье я поделюсь, на что в этом случае обратить внимание, как избежать ошибок и достичь взаимопонимания с иностранными коллегами и партнерами.
Читать дальше →
Total votes 104: ↑100 and ↓4+96
Comments80

Возвращаем драйверам AMD поддержку DirectX12 старыми процессорами

Reading time2 min
Views24K
Обновившись в конце апреля на новые драйвера AMD 16.4.2, я обнаружил, что все DirectX12-приложения перестали работать. Ничуть не удивившись, я решил подождать устранения проблемы и отложил DirectX12 в сторону. Но месяцы шли, а с новыми драйверами ситуация не менялась.
Читать дальше →
Total votes 62: ↑61 and ↓1+60
Comments35

Программируем «Мегапроцессор»

Reading time8 min
Views17K
На Geektimes летом была статья про Megaprocessor — процессор из дискретных транзисторов и светодиодов, который весит полтонны и занимает всю гостиную в обычном таунхаусе под Кембриджем. Я решил воспользоваться своей географической близостью к этому мегапроекту, и запрограммировать для него что-нибудь презентабельное — например, спортировать для Megaprocessor мою предыдущую хабрапрограммку «Digital Rain».

Система команд Megaprocessor описана на сайте разработчика.

Большинство команд состоят из одного байта, за которым может следовать непосредственный операнд (один или два байта). Регистров общего назначения всего четыре (R0-R3), при этом они не равноправны: например, для команд доступа к памяти адрес должен быть либо в R2, либо в R3; а операнд — в одном из двух оставшихся регистров.

Программистам, привыкшим к системе команд x86 или ARM, набор команд Megaprocessor покажется крайне бедным: нет ни косвенной адресации «база+смещение», ни непосредственных операндов у арифметических команд (за исключением addq ±1, addq ±2). Зато есть пара неожиданных возможностей: отдельная команда sqrt, и режим .wt для команд сдвига, который заменяет результат суммой выдвинутых битов. Таким образом можно, например, парой команд ld.b r1, #15; lsr.wt r0, r1 вычислить количество единичных битов в r0 (вопрос, столь любимый собеседователями на работу!). Мнемоника ld для команды, загружающей в регистр непосредственное значение (вместо привычной по x86 или ARM мнемоники mov) указывает на способ её выполнения: фактически, с точки зрения процессора, выполняется ld.b r1, (pc++).

Итак, приступим.
Total votes 78: ↑76 and ↓2+74
Comments5

Быстрее быстрого или глубокая оптимизация Медианной фильтрации для GPU Nvidia

Reading time7 min
Views11K

Введение


В предыдущем посте я постарался описать, как легко можно воспользоваться преимуществом GPU для обработки изображений. Судьба сложилась так, что мне подвернулась возможность попробовать улучшить медианную фильтрацию для GPU. В данном посте я постараюсь рассказать каким образом можно получить еще больше производительности от GPU в обработке изображений, в частности, на примере медианной фильтрации. Сравнивать будем GPU GTX 780 ti с оптимизированным кодом, запущенном на современном процессоре Intel Core i7 Skylake 4.0 GHz с набором векторных регистров AVX2. Достигнутая скорость фильтрации квадратом 3х3 в 51 GPixels/sec для GPU GTX 780Ti и удельная скорость фильтрации квадратом 3х3 в 10.2 GPixels/sec на 1 TFlops для одинарной точности на данное время являются самыми высокими из всех известных в мире.

Интересуешься оптимизациями для GPU Nvidia? - читать далее
Total votes 33: ↑33 and ↓0+33
Comments2

Перехват функций .NET/CLR

Reading time16 min
Views20K
Иногда при разработке программного обеспечения требуется встроить дополнительную функциональность в уже существующие приложения без модификации исходного текста приложений. Более того, зачастую сами приложения существуют только в скомпилированном бинарном виде без наличия исходного текста. Широко известным способом решения указанной задачи является т.н. “сплайсинг” – метод перехвата функций путем изменения кода целевой функции. Обычно при сплайсинге первые байты целевой функции перемещаются по другим адресам, а на их исходное место записывается команда безусловного перехода (jmp) на замещающую функцию. Поскольку сплайсинг требует низкоуровневых операций с памятью, то он осуществляется с использованием языка ассемблера и С/C++, что также накладывает определенные ограничения на реализацию замещающих функций – они обычно также реализованы на С/C++ (реже на ассемблере).

Метод сплайсинга для перехвата API-функций в Windows широко описан в Интернете и в различных литературных источниках. Простота указанного перехвата определяется следующими факторами:
  1. целевая функция является статической – она сразу присутствует в памяти загруженного модуля;
  2. адрес целевой функции легко определить (через таблицу экспорта модуля или функцию GetProcAddress).

Реализация замещающих функций на C/C++ при перехвате API-функций является оптимальным вариантом, поскольку Windows API реализовано, как известно, на языке C, и замещающие функции могут оперировать теми же понятиями, что и заменяемые.
Читать дальше →
Total votes 48: ↑48 and ↓0+48
Comments26

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

Reading time8 min
Views62K
image

Совсем недавно у нас приключилась интересная история, которой мы хотим поделиться на Geektimes, раз уж у нас тут есть официальный блог. Это может быть показательным кейсом для руководителей небольших компаний, которые работают в интернете и, соответственно, сталкиваются с традиционными для онлайн-бизнеса проблемами. Стоит ли идти на поводу у мошенников, даже если они угрожают, что “испортят вашу репутацию” и что у вас “больше не будет клиентов”? Нужно ли вам вообще задумываться о том, какие товары пересылают клиенты с вашей помощью (если вы мейлфорвардер) и как вам платят ваши клиенты?

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

Сразу стоит оговориться, что мы считаем безопасность платежей очень важным аспектом нашей работы. Предотвращение деятельности мошенников на сайте мы рассматриваем как зону нашей ответственности. Отдел, который занимается в Бандерольке этими вопросами, работает уже несколько лет и даже ведет отдельный проект Anticarder.com (которым пользуются многие крупные российские мейлфорвардеры). Но разговор сейчас не о нем.

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

Видимо, предполагая, что правоохранительным органам нет до него дела, он не особенно скрывался, что и позволило нам собрать существенную доказательную базу, на основе которой мы пришли к выводу, что имеем дело с мошенником и что за никами на форумах скрывается именно он. Обращаем внимание, что все сторонние данные, опубликованные в нашем мини-расследовании, взяты из открытых источников.
Читать дальше →
Total votes 176: ↑120 and ↓56+64
Comments450

История одного диплома или как сделать шаробота

Reading time10 min
Views37K

История этого проекта начинается в 2014 году, когда я учился на 4-м курсе в ведущем техническом вузе России на кафедре «Робототехнические системы». В это время я уже начал задумываться над темой диплома и искал проект, который был бы интересен мне, и при этом в нем присутствовала некоторая новизна. И вот однажды, увидев видео шаробота Rezero, я с друзьями захотел попробовать повторить успех. Кому интересно, что из этого получилось — прошу под кат.


Читать дальше →
Total votes 131: ↑129 and ↓2+127
Comments52

Интервью с владельцем бионических протезов BeBionic и MyoFacil: их достоинства и недостатки в повседневной жизни

Reading time8 min
Views32K
Выбрать протез руки намного сложнее, чем какой-нибудь гаджет или бытовой прибор: нельзя просто зайти на «Яндекс.Маркет» и увидеть оценки бионической руки BeBionic, прочитать отзывы к MyoFacil от Otto Bock, сравнить их технические характеристики. Уж слишком специфический и редкий товар. Помочь могут разве что обзоры этих устройств, вроде того, что я недавно публиковал здесь. Но и они составлены на основе общедоступной информации.

Лучше всего прочитать о достоинствах и недостатках бионических протезов от человека, который знаком с ними не понаслышке. Константин Дебликов пользуется протезами с декабря 2014 года. Специально для Geektimes он рассказал, как протезы помогают, какие хваты не нужны в принципе и какие сложности связаны с использованием бионических кистей. Это интервью можно считать обзором, честным и с массой критики в отношении устройств и их позиционирования.

С Константином мы познакомились после того, как он написал комментарий к моей статье на тему бионических протезов. Он зарегистрирован на Гиктаймс – Deblikov – и готов отвечать на ваши вопросы в комментариях.


Читать дальше →
Total votes 37: ↑37 and ↓0+37
Comments28

Microsoft опубликовала информацию о реализации VFS в подсистеме Linux на Windows 10

Reading time6 min
Views17K
В предыдущих постах мы освещали некоторые элементы реализации подсистемы Linux в Windows 10 (WSL). При этом речь шла о механизмах имплементации системных сервисов Linux на основе системных модулей Windows 10. Мы указывали, что такие драйверы как LXss.sys и LXCore.sys отвечают за реализацию семантики системных вызовов Linux с использованием ядра Windows. В случае совпадения семантики системного сервиса Linux и Windows, вышеупомянутые драйверы просто перенаправляют системный вызов Linux в соответствующий эквивалент Windows.



В этом посте речь пойдет о реализации виртуальной файловой системы VFS в WSL, которая используется как уровень абстракции в Linux при доступе как к дисковым файлам, так и другим объектам ОС, включая, устройства, порты, процессы, микропроцессор и т. д. Так как ядро Windows 10 имеет структуру подсистем и изначально рассчитано на реализацию различных типов окружения, включая POSIX, отвечающий за семантику VFS драйвер LXCore.sys обращается к этим подсистемам ядра, реализуя соответствующую семантику и директории типа /dev, /proc, /sys.

Читать дальше →
Total votes 17: ↑17 and ↓0+17
Comments9

Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте

Reading time4 min
Views81K
..., даже если проект не планируется развивать и вы не собираетесь делиться исходными кодами, потому что через 20 лет какой-нибудь маньяк будет изучать и дорабатывать машинный код вашего продукта, и он может захотеть вас найти.

Разработка Need For Speed III Modern Patch

Вообще я достаточно редко играю в компьютерные игры. Бывало, не играл по несколько лет подряд. Но иногда во мне просыпается маленький реверс-инженер, который мотивирует меня забраться в машинный код какой-нибудь любимой игрушки из прошлого. В последний год я занимался доработкой Need For Speed III: Hot Pursuit (1998 года). Это моя любимая игра в жанре, но теперь я, к своему сожалению, знаю о том, насколько отвратительно она написана. Большое количество маленьких багов в самых неожиданных местах — прямое следствие низкого качества кода.
Читать дальше →
Total votes 159: ↑156 and ↓3+153
Comments87

Исследование защищенности карты Тройка

Reading time18 min
Views202K
Карта тройка

Карта Тройка представляет из себя универсальный пополняемый электронный кошелек, широко используемый в системах оплаты общественного транспорта Москвы с 2013 года.

Цель данного исследования — выяснить защищенность системы электронного кошелька от подделки баланса, оценить безопасность инфраструктуры, работающей с картой. Вся работа была выполнена без использования специальных технических средств. Использовался дешевый смартфон на платформе Android и персональный компьютер. Общее время, затраченное на исследование, составило 15 дней.

В ходе работы был успешно проведен реверс­-инжиниринг мобильного приложения «Мой проездной», что позволило получить доступ к памяти карты и изучить структуру хранения данных. Были найдены уязвимости, позволяющие выполнить подделку баланса, записанного на электронном кошельке карты Тройка. В результате чего стало возможным использование систем, поддерживающих карту, без оплаты.

Итогом исследования стала разработка приложения TroikaDumper, позволяющего эксплуатировать уязвимости системы электронного кошелька.

Внимание! Данные материалы представлены исключительно в ознакомительных целях. Подделка проездных билетов является уголовным преступлением и преследуется по закону.

Читать дальше →
Total votes 380: ↑374 and ↓6+368
Comments348

Information

Rating
Does not participate
Location
Минск, Минская обл., Беларусь
Registered
Activity

Specialization

Embedded Software Engineer
C++
C
C#
Python