Pull to refresh
-4
Эдуард Зиганшин @e-zigread⁠-⁠only

Разработка электроники

Send message

Так все же, насколько быстры каналы в Linux?

Reading time26 min
Views23K

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

Читать далее

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

Reading time11 min
Views10K

Занимательный факт. Исходный код программы бортового управляющего компьютера лунного модуля Аполлон 11 содержит 64830 строк. Исходные коды прошивок навигационного приемника, которые мы в МЭИ разрабатываем последние десять лет, содержат 217510 строчек на C++ и 181236 строчек на SystemVerilog. И я всё жду, когда это количество перейдет в качество.

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

Читать далее

Holy C++

Reading time5 min
Views33K

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

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

1 - union - сумм тип из 70х, в С идея хранения одного типа из нескольких в одном участке памяти выглядит неплохо и сейчас, ведь там все типы это набор байт с заданным размером.

В С++ же использование union это автоматическое undefined behavior, например:

Читать далее!

USB на регистрах: виртуальная FAT16

Reading time15 min
Views13K

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


Уже довольно давно я пытался разобраться, как же устроена классическая файловая система FAT и вот наконец критическая масса обрывочных сведений в моей голове привела к качественному скачку и закономерному воплю "а что, все действительно настолько просто?!". Нет, разумеется, в FAT полно причудливых костылей, наросших за время ее эволюции, но сама идея и правда проста. Настолько, чтобы реализовать ее эмуляцию на контроллерах вроде stm32f103, stm32l151 в достаточном для ряда задач объеме. То есть наше устройство будет прикидываться флешкой смешного объема, запись и чтение которой будут не приводить к перезаписи памяти, а обрабатываться исключительно кодом.

Читать дальше →

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

Reading time13 min
Views11K


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

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

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

USB на регистрах: STM32L1 / STM32F1

Reading time18 min
Views24K


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

С программным USB на примере AVR мы уже познакомились, пришла пора взяться за более тяжелые камни — STM32. Подопытными у нас будут классический STM32F103C8T6 а также представитель малопотребляющей серии STM32L151RCT6. Как и раньше, пользоваться покупными отладочными платами и HAL'ом не будем, отдав предпочтение велосипеду.
Читать дальше →

Понимание lvalue и rvalue в C и С++

Reading time9 min
Views204K
Привет, Хабр! Представляю вашему вниманию перевод статьи Eli Bendersky, Understanding of lvalues and rvalues in C and C++.

От переводчика: предлагаю Вашему вниманию перевод интересной статьи об lvalue и rvalue в языках C/C++. Тема не нова, но знать об этих понятиях никогда не поздно. Статья рассчитана на новичков, либо на программистов переходящих с C (или других языков) на C++. Поэтому будьте готовы к подробному разжёвыванию. Если вам интересно, добро пожаловать под кат
Читать дальше →

Продление жизни временных значений в С++: рецепты и подводные камни

Reading time19 min
Views21K

Прочитав эту статью вы узнаете:

1. Способы, которыми можно продлить время жизни временного объекта в С++.

2. Рекомендации и подводные камни этого механизма, с которыми может столкнуться С++ программист, и с которыми сталкивался на работе я.

Информация из статьи может быть полезна как новичкам, так и профессионалам.

Если заинтересовало, то самое время налить чая, и погнали разбираться где тут референсы висят.

Чай готов, начинаем погружение

Во что вам обойдется конкурентная обработка. Иерархия проблем

Reading time47 min
Views6.3K

Конкурентность сложно как следует наладить, как минимум, тем из нас, кому не повезло писать на языках, непосредственно открывающих нутро конкурентного аппаратного обеспечения: речь о потоках и разделяемой памяти. Не менее сложно организовать конкурентность так, чтобы она работала и правильно, и быстро. Все, что вы знаете об оптимизации однопоточного кода, зачастую вам не поможет. На микроуровне (отдельные инструкции) просто невозможно применить обычные правила, актуальные для μ-операций, цепочек зависимостей, пределов пропускной способности и т.д. При конкурентности правила другие.

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

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

Часто ловлю себя на мысли, что рассуждаю именно в таких категориях, когда мне нужна высокопроизводительная конкурентность: каков наилучший уровень, который я реально могу достичь при решении конкретной задачи? Держать в уме эти уровни полезно и на этапе первичного проектирования (иногда небольшое изменение требований или высокоуровневого дизайна позволяют вам выйти на более выгодный уровень), а также при оценке уже существующих систем (для еще более точного понимания имеющейся производительности и выстраивания пути наименьшего сопротивления, ведущего к улучшениям).

Читать далее

Константные ссылки — не всегда ваши друзья

Reading time8 min
Views16K

Когда мы преподаем современный C++, в самом начале мы учим, что все, что не подпадает под критерии малых данных (small data)1, по умолчанию должно передаваться через константные ссылки:

Читать далее

Просто о сложном — пишем тесты с Google C++ Testing Framework (GTest, GMock)

Reading time9 min
Views74K

Всем привет. Недавно по работе возникла потребность разобраться с созданием новых тестов на GTest/GMock. Конкретно мой вопрос был связан с его конструкциями типа EXPECT_CALL и моками - что это за магические штуки и как они работают. Однако, по мере изучения выяснились и другие интересные вещи, с которыми хотел бы поделиться.

Читать далее

RVO и NRVO в C++17

Reading time8 min
Views32K

Предположим, что в программе на C++ вы возвращаете из функции локальную переменную. Что происходит при вызове оператора return: копирование, перемещение или ни то, ни другое? От этого зависит длительность вызова функции и эффективность наших программ. Я постарался разобраться с этим вопросом и дам рекомендации по написанию функций так, чтобы повысить шансы на применение этой оптимизации компиляторами. Ну, а сокращения в названии статьи — это Return Value Optimization (RVO) и Named Return Value Optimization (NRVO).

Читать далее

Как буткиты внедряются в современные прошивки и чем UEFI отличается от Legacy BIOS

Reading time15 min
Views15K

Привет, Хабр! На связи Антон Белоусов и Алексей Вишняков, и мы продолжаем вместе с вами изучать буткиты — наиболее опасный класс вредоносного ПО. Гонка вооружений между разработчиками решений в области ИБ и вирусописателями не останавливается ни на секунду: первые активно внедряют новые механизмы противодействия киберугрозам, а вторые — инструменты их обхода. Как раз с точки зрения безопасности нас заинтересовал современный стандарт предзагрузки операционных систем UEFI. Поэтому в этом посте мы решили:

разобраться, чем загрузка в режиме UEFI отличается от загрузки в режиме Legacy BIOS;

рассказать о новых экземплярах буткитов, нацеленных на компрометацию UEFI;

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

рассмотреть используемые злоумышленниками техники и слабые места систем на платформе UEFI.

Подробнее

Правильная работа с потоками в Qt

Reading time13 min
Views88K
Qt — чрезвычайно мощный и удобный фреймворк для C++. Но у этого удобства есть и обратная сторона: довольно много вещей в Qt происходят скрыто от пользователя. В большинстве случаев соответствующая функциональность в Qt «магически» работает и это приучает пользователя просто принимать эту магию как данность. Однако когда магия все же ломается то распознать и решить неожиданно возникшую на ровном казалось бы месте проблему оказывается чрезвычайно сложно.

Эта статья — попытка систематизации того как в Qt «под капотом» реализована работа с потоками и о некотором количестве неочевидных подводных камней связанных с ограничениями этой модели.

Основы
Thread affinity, инициализация и их ограничения
Главный поток, QCoreApplication и GUI
Rendering thread
Заключение

А Вы правильно работаете с QThread и сигналами?

Синдром дефицита внимания и гиперактивности — откуда берутся самые невыносимые хулиганы и что с этим делать

Reading time12 min
Views34K


СДВГ стал официальным диагнозом у взрослых и детей, который признан крупными медицинскими, психологическими и образовательными организациями, в том числе Национальным институтом здравоохранения и Министерством образования США.

Но до сих пор сохраняется, и даже среди врачей, мнение, что это «модный выдуманный диагноз».

Поэтому нужно научиться отличать «что это на него нашло?» (то есть эпизодические сложности) от, собственно, дефицита внимания. Чтобы поставить СДВГ, мало проблем с учёбой или плохого поведения. Мало пропускать задания в учебнике, потому что что-то отвлекло. Мало «считать ворон» на уроке. Время от времени такое бывает у каждого, однако у некоторых людей проблемы настолько распространены и серьёзны, что мешают сразу нескольким аспектам их жизни: общению дома, успешности в учебе, реализации на работе.

Так что СДВГ — это либо неусидчивость, импульсивность в принятии любых решений, неспособность сдерживать эмоции и худо-бедно контролировать своё поведение, либо патологическая невнимательность, забывчивость, избегание занятий, требующих постоянных умственных усилий. А нередко — всё вместе. То есть это поведение, которое не укладывается в рамки возрастных норм.

Например, максимальная продолжительность активного внимания у детей в пять–семь лет — 15 минут. Когда ребёнок в три года непоседлив, криклив и не может сосредоточиться на каком-то одном деле дольше 10 минут — это нормально. Если то же самое происходит с ребёнком 9-10 лет, то это уже нарушение.
Читать дальше →

OSINT по спутниковым изображениям

Reading time3 min
Views50K
image

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

Зеленый Кот нашел разбившуюся советскую исследовательскую станцию «Марс-3» по снимкам со спутника, тысячи экологов следят за лесами Амазонки и состоянием береговой линии, школьники делают учебные проекты по слежке за популяцией моржей, репортеры проводят расследования, освобождают рабов, мониторят лагеря беженцев.

Предлагаю вам подборку бесплатных ресурсов и проектов со спутниковыми данными, программами обработки этих данных и полезные статьи.
Читать дальше →

Неклассические контейнеры в C++

Reading time17 min
Views51K

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

В стандартную библиотеку C++ входит несколько контейнеров. Кроме этого, в Open Source есть несколько контейнеров, которые покрывают больше юзкейсов. Я опишу устройство интересных контейнеров вне STL и их отличия от классических контейнеров.

Читать далее

Создание собственных команд в GIT

Reading time6 min
Views8K

Эта статья предназначена для тех, кто уже имеет начальный уровень работы с GIT и BitBucket. В статье рассматриваются примеры в Git Bash version 2.33.0, API BitBucket 2.0, https://bitbucket.org

Читать далее

С днем рождения, Кевин Келли: еще 103 непрошенных совета

Reading time12 min
Views14K
image

Кевин Келли, создатель журнала WIRED, уже третий год подряд на свой день рождения дарит всем непрошенные советы (вот прошлый перевод на Хабре: 68 непрошеных советов (c ↑+78))

28 апреля ему исполнилось 70 лет и он выкатил еще 103 непрошенных совета (они просто взорвали HackerNews)

Хочется побыстрее поделиться этими премудростями от прикольного дядьки и поэтому выкладываю перевод «в реальном времени» (если хотите помочь с переводом — контрибьютьте тут)

  1. Примерно в 99% случаев подходящее время — прямо сейчас.
  2. Никто так не впечатлен вашим имуществом, как вы сами.
  3. Никогда не работайте на того, кем не хотите стать.
  4. Развивайте отношения с 12 людьми, которые вас любят, потому что они стоят более 12 миллионов человек, которым вы нравитесь.
  5. Не повторяйте одни и те же ошибки; попробуй сделать новые ошибки.

Читать дальше →

Information

Rating
Does not participate
Location
Мытищи, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

System Software Engineer, Hardware Engineer
Senior
From 225,000 ₽
C++
Qt
Verilog HDL
VHDL
C
Git
Linux