Pull to refresh
1
0
Дамир @X-Ray_3D

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

Send message

Миландр + GCC + VSCode. Пробуем мигать светодиодом на отечественном ARM32 микроконтроллере

Level of difficultyMedium
Reading time15 min
Views11K

Год назад я написал статью об отладке STM32 микроконтроллеров из под VSCode, с компиляцией в GCC и сборкой с помощью CMake. А в декабре мне в руки попали две тестовые единицы отечественных микроконтроллеров К1986ВЕ92FI (MDR1211FI1). Производитель имеет свою библиотеку SPL на C, а также неплохую базу примеров инициализации и применения различной периферии в Keil и IAR; однако я, average C++20+ enjoyer , решил попробовать перенести свой тулчейн на новое железо.

Читать далее
Total votes 23: ↑21 and ↓2+28
Comments51

Управляем вентилятором ноутбука через DSDT в Linux и не только

Reading time10 min
Views61K
Не знаю почему, но я всегда воспринимал системы охлаждения в ноутбуках как некий закрытый черный ящик. Тупость алгоритмов, по которым вентилятор начинал надрывно завывать при еще вполне холодном процессоре, изрядно раздражала во многих ноутбуках, но мне казалось, что все параметры там производители прибили гвоздями и поменять их можно разве что расковыряв BIOS или вообще только вставив какие-нибудь регулируемые резисторы в нужных местах. Ни тем, ни другим мне заниматься совершенно не хотелось, поэтому я об никогда всерьёз даже не задумывался.

Нет, конечно, я слышал про всякие программы, которые могут вмешиваться в управление охлаждением и вроде кто-то ими успешно пользуется, но лично мне с ними вечно не везло, точнее не везло с железом, на котором я пытался их завести. Например, какое-то время назад я пробовал настроить fancontrol на довольно старом ноутбуке HP nc8430 с Убунтой. В итоге, известный скрипт sensors-detect не смог найти ни одного вентилятора в системе, а без этого fancontrol не работает. На разных форумах периодически появляются люди с похожими проблемами, но никто им толком помочь не может.

Тогда я в очередной раз забросил эту тему и вернулся к ней только на днях, когда читал обзоры, подыскивая себе новый ноутбук, и уже вроде бы выбрал почти всем хороший Sony S15, как опять в одном из обзоров читаю про него, что вентилятор в нем вообще не останавливается никогда, даже когда точно можно. Постоянно шумящий ноутбук я больше не хочу, а выбирать как всегда особо не из чего, учитывая, что надо 15", что TN матрицу я тоже больше не хочу, и бюджет ограничен. Ну сами знаете, как оно бывает. Может быть на нем все-таки заведется fancontrol и все будет хорошо, но а если нет? Никаких отчетов по его установке на этот ноутбук найти не удалось. Это побудило меня еще раз копнуть тему программного управления вентиляторами и пройти довольно непростой, но очень увлекательный квест.
Читать дальше →
Total votes 54: ↑53 and ↓1+52
Comments34

C++20. Coroutines

Reading time33 min
Views63K

В этой статье мы подробно разберем понятие сопрограмм (coroutines), их классификацию, детально рассмотрим реализацию, допущения и компромиссы, предлагаемые новым стандартом C++20.


image

Читать дальше →
Total votes 32: ↑29 and ↓3+42
Comments27

Включение гибридной графики в Ubuntu на ноутбуках Nvidia + Intel (OpenGL, Vulkan)

Reading time3 min
Views53K

Это простая инструкция как включить гибридную графику intel-nvidia на ноутбуке. Чтобы определенные приложения запускались на дискретном чипе, а другие на встроенном. На свое удивление в интернете не нашел простую инструкцию того, как запускать определенные приложения, используя дискретную графику. Так что напишу так просто, на сколько считаю нужным

Читать далее
Total votes 10: ↑8 and ↓2+11
Comments18

Switch для строк в C++11

Reading time6 min
Views92K
К сожалению, стандарт C++ не допускает применения операторов switch-case к строковым константам. Хотя в других языках, вроде C#, такая возможность имеется прямо «из коробки». Поэтому, понятное дело, многие C++ программисты пытались написать свою версию «switch для строк» — и я не исключение.
Для C++03 решения не отличались красотой и лишь усложняли код, дополнительно нагружая приложение в рантайме. Однако с появлением C++11 наконец-то появилась возможность реализовать такой код:

   std::string month;
   std::string days;

   std::cout << "Enter month name: ";
   std::cin  >> month;

   SWITCH (month)
   {
   CASE("february"):
       days = "28 or 29";
       break;

   CASE("april"):
   CASE("june"):
   CASE("september"):
   CASE("november"):
       days = "30";
       break;

   CASE("january"):
   CASE("march"):
   CASE("may"):
   CASE("july"):
   CASE("august"):
   CASE("october"):
   CASE("december"):
       days = "31";
       break;

   DEFAULT:
       days = "?";
       break;
   }

   std::cout << month << " has " << days << " days." << std::endl;

Реализация этой конструкции весьма проста. Она основана на constexpr-функциях из C++11, благодаря чему почти все вычисления производятся ещё на этапе компиляции. Если кого-то интересуют её детали, добро пожаловать под кат — благо на Хабре о «switch для строк» почему-то ничего не сказано.
Если кому интересно
Total votes 62: ↑56 and ↓6+50
Comments52

Индикатор добротности. Тестер катушек индуктивности

Level of difficultyEasy
Reading time10 min
Views8K

Данный самодельный прибор может оказаться весьма полезным в радиолюбительской мастерской в некоторых случаях. Прибор позволяет оценить добротность (наличие потерь) конденсаторов и индуктивностей – дросселей и трансформаторов, и, в частности, выявлять наличие короткозамкнутых витков в них.

Читать далее
Total votes 37: ↑33 and ↓4+39
Comments19

Атрибут cleanup

Reading time6 min
Views6.5K
Цитата из документации GCC [1]:

Атрибут cleanup предназначен для запуска функции, когда переменная выходит из области видимости. Этот атрибут может быть применён только к auto-переменным, и не может быть использован с параметрами или с static-переменными. Функция должна принимать один параметр, указатель на тип, совместимый с переменной. Возвращаемое значение функции, если оно есть, игнорируется.

Если включена опция -fexceptions, то функция cleanup_function запускается при раскрутке стека, во время обработки исключения. Отметим, что атрибут cleanup не перехватывает исключения, он только выполняет действие. Если функция cleanup_function не выполняяет возврат нормальным образом, поведение не определено.




Атрибут cleanup поддерживается компиляторами gcc и clang.

В этой статье я приведу описание различных вариантов практического использования атрибута cleanup и рассмотрю внутреннее устройство библиотеки, которая использует cleanup для реализации аналогов std::unique_ptr и std::shared_ptr на языке C.
Читать дальше →
Total votes 19: ↑19 and ↓0+19
Comments5

Как разработать плату, пригодную для массового производства? Подход Design for Manufacturing

Level of difficultyHard
Reading time15 min
Views20K

Качество печатной платы зависит не только от оборудования, уровня технологов и процессов на фабрике. Не меньший вклад в него вносят конструкторские решения разработчика платы — тополога. От них зависит технологичность: то, насколько просто будет произвести и ремонтировать изделие. Наиболее технологичной плата получится, если тополог сразу учтёт технологические нормы и особенности производства, внеся их в параметры своего CAD‑проекта. Такой подход называется Design for Manufacturing (DFM) — дизайн, оптимизированный под производство. Давайте разбираться, что это такое.

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

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

Установка Shadowsocks с обходом блокировок на Keenetic

Reading time8 min
Views128K

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

Читать далее
Total votes 16: ↑14 and ↓2+20
Comments42

Пчела на работе, разработка игр на SFML C++

Reading time5 min
Views7.1K

Предыдущая тема

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

Читать далее
Total votes 4: ↑3 and ↓1+3
Comments4

USB монитор из Futaba GP1160A02A

Level of difficultyHard
Reading time11 min
Views26K

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

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

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

Про один из таких дисплеев, изготовленный по этой технологии и будет рассказано в этой статье, а именно про дисплейный модуль Futaba GP1160A02A.

Эта статья не будет про подключение этого дисплея к какой-нибудь “ардуине” стандартными способами. Это слишком просто и скучно. Речь пойдёт про обход ограничений, наложенных производителем, и попытки выжать из этого дисплея всё, что позволяет технология.

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

Инициализация в современном C++

Reading time26 min
Views162K


Общеизвестно, что семантика инициализации — одна из наиболее сложных частей C++. Существует множество видов инициализации, описываемых разным синтаксисом, и все они взаимодействуют сложным и вызывающим вопросы способом. C++11 принес концепцию «универсальной инициализации». К сожалению, она привнесла еще более сложные правила, и в свою очередь, их перекрыли в C++14, C++17 и снова поменяют в C++20.


Под катом — видео и перевод доклада Тимура Домлера (Timur Doumler) с конференции C++ Russia. Тимур вначале подводит исторические итоги эволюции инициализации в С++, дает системный обзор текущего варианта правила инициализации, типичных проблем и сюрпризов, объясняет, как использовать все эти правила эффективно, и, наконец, рассказывает о свежих предложениях в стандарт, которые могут сделать семантику инициализации C++20 немного более удобной. Далее повествование — от его лица.

Total votes 62: ↑61 and ↓1+60
Comments125

Спектрометр из смартфона, картона и осколка DVD-диска: смотрим на спектры лампочек, фонариков, солнца

Reading time14 min
Views27K

Всем привет! Продолжаем придумывать, как можно использовать устаревший смартфон в новом качестве. Эта статья подготовлена по материалам второго сезона видеокурса “Galaxy Upcycling - новая жизнь старого смартфона”. В  уроках первого сезона мы уже сделали 3D-голограмму, проектор (и написали об этом статью на Хабр), микроскоп, часы, гирлянду, а сегодня делаем еще один исследовательский прибор.

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

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

Охота на бройлеров. Как работают китайские телефонные хакеры

Reading time10 min
Views32K

Несколько лет назад, когда я ещё работал в антивирусной компании, я купил недорогой смартфон на Android для пожилой родственницы. Телефон позиционировался, как отечественный продукт, но по факту был, разумеется, китайским аппаратом, выпущенным под российским брендом. Удаляя идущие с завода ненужные приложения и добавляя отсутствующие, я решил заодно установить и антивирус — мало ли, на какую ссылку нажмёт малограмотная в айтишных делах пользовательница? Каково же было моё удивление, когда на совершенно новом аппарате с ходу обнаружился троян, способный загружать и устанавливать без ведома юзера любые приложения. Попытка вылечить телефон не увенчалась успехом, не помог и сброс до заводских настроек — троян сидел в прошивке, к которой антивирусное ПО не имеет доступа, если аппарат, конечно, не рутован. Изучение вопроса показало, что китайские смартфоны с «сюрпризами» присутствуют на отечественном рынке в широчайшем ассортименте. Более того, в Китае существует целая индустрия по производству, распространению и эксплуатации мобильных вредоносных программ, прошитых в firmware, и за минувшие годы в этой сфере почти ничего не изменилось. А причём тут охота на бройлеров, спросите вы? Сейчас расскажу.
Читать дальше →
Total votes 83: ↑82 and ↓1+111
Comments50

Апериодическая решётка Яндекс Станции 2: история, 3D-модели и акустические эксперименты

Reading time9 min
Views32K

«Не бывает неинтересных задач, бывают неинтересные исследователи».
— Александр Михайлович Гуськов, профессор МГТУ им. Н. Э. Баумана


Привет, меня зовут Григорий Анненков, я тот, кто предложил и внедрил апериодическую решётку для Яндекс Станции 2. Она установлена под тканью, вокруг динамиков и других компонентов.

Кто-то скажет, что работать над формой решётки — никому не нужный перфекционизм. Для меня как для инженера это была интереснейшая задача, результаты которой (и я это сейчас докажу) повлияли на качество звука колонки, пусть и не настолько же сильно, как, скажем, подбор моделей динамиков. Только улучшение это условно-бесплатное, поскольку мы используем тот же объём пластика, разве что формы чуть сложнее привычных.

Под катом — история прототипирования, очень много картинок, гифок и акустических экспериментов. Трёхмерные модели решётки мы выложили на Гитхаб, подробности — в конце поста.
Читать дальше →
Total votes 110: ↑110 and ↓0+110
Comments79

Быстрый переход на UNIGINE с Unreal Engine 4: первые шаги

Reading time12 min
Views7.8K

Если вы планируете переходить с иностранного софта на отечественный и ищете полноценный аналог Unreal Engine 4, то одним из вариантов может стать 3D движок UNIGINE.

Сравниваем основные термины, управление проектами, интерфейс редактора, работу со сценой, настройки проекта и многое другое под катом.

Читать далее
Total votes 8: ↑7 and ↓1+6
Comments43

Embox — открытая ОС на Эльбрусе

Reading time3 min
Views16K
Всем привет.

Конечно, многие знают о том, какие Эльбрусы закрытые. Это является, наверное, самой главной претензией, предъявляемой к данным процессорам. Эти претензии небезосновательны, в МЦСТ их признают. Но, как говорится, нельзя “просто так взять и открыть исходники для Эльбруса”, ведь большинство работ велось для определенного заказчика и их разглашение — нарушение договора. С другой стороны, МЦСТ понимают проблему закрытости и стараются изменить ситуацию. Мы в проекте Embox тоже пытаемся этому способствовать по мере сил. О наших успехах в данном направлении вы можете узнать из этой статьи.
Читать дальше →
Total votes 38: ↑36 and ↓2+46
Comments17

Стандарт C++20: обзор новых возможностей C++. Часть 6 «Другие фичи ядра и стандартной библиотеки. Заключение»

Reading time13 min
Views21K


25 февраля автор курса «Разработчик C++» в Яндекс.Практикуме Георгий Осипов рассказал о новом этапе языка C++ — Стандарте C++20. В лекции сделан обзор всех основных нововведений Стандарта, рассказывается, как их применять уже сейчас и чем они могут быть полезны.

При подготовке вебинара стояла цель сделать обзор всех ключевых возможностей C++20. Поэтому вебинар получился насыщенным. Он растянулся на почти 2,5 часа. Для вашего удобства текст мы разбили на шесть частей:

  1. Модули и краткая история C++.
  2. Операция «космический корабль».
  3. Концепты.
  4. Ranges.
  5. Корутины.
  6. Другие фичи ядра и стандартной библиотеки. Заключение.

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

Другие фичи ядра


Я рассказал о самых значительных нововведениях Стандарта, но это только капля в море C++20. Перейдём к менее глобальным, но не менее интересным вещам. Подробно останавливаться на каждой не буду, потому что цель обзора — рассказать пусть не всё, но обо всём.
Читать дальше →
Total votes 27: ↑26 and ↓1+39
Comments52

Си должен умереть

Reading time21 min
Views111K

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

Попробуем понять, что же такое этот противоречивый язык Си - благословение или проклятие?

Читать далее
Total votes 185: ↑147 and ↓38+156
Comments643

Управление светодиодными индикаторами с помощью регистров сдвига с токовым выходом

Reading time19 min
Views27K

Речь в этой статье пойдет о цифровых или цифробуквенных дисплеях для индикации различных показаний, которые часто так и называют индикаторами. Здесь мы остановимся только на одной их разновидности — светодиодных (LED) семисегментнтных индикаторах. На мой взгляд, одна из самых древних разновидностей дисплеев незаслуженно отставлена на периферию разработок, хотя по многим параметрам (контрасту, читаемости, минимальной неиспользуемой площади окна, надежности и долговечности, наконец) LED-семисегментники дают фору любым другим разновидностям, включая ближайших конкурентов в виде OLED.

Читать далее
Total votes 25: ↑24 and ↓1+34
Comments37

Information

Rating
Does not participate
Location
Зеленоград, Москва и Московская обл., Россия
Registered
Activity