All streams
Search
Write a publication
Pull to refresh
-4
Эдуард Зиганшин @e-zigread⁠-⁠only

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

Send message

Магия ssh

Reading time12 min
Views77K

Разве что ленивый не писал про ssh и несмотря на это, данный протокол и его возможности не перестают меня восхищать. Здесь я хочу поделиться исключительно своим опытом использования сего замечательного инструмента в своих задачах (При этом активно применяю его даже при разработке на Windows).

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

  • Удалённый доступ — логично, ведь для этого он и предназначался.
  • Монтирование папок по сети — очень удобно для работы с кодом на удалённой машине.
  • Удалённое выполнение команд — нечастая, но используемая мной операция. Удобно получать выхлоп команды в канал другой команды на текущей машине.
  • Запуск графических приложений на удалённой машине.
  • Проксирование трафика — способ перенаправления трафика. Этакий быстрый и простой аналог VPN.
  • Обратный ssh — использую для проброса портов к системам, находящимися за NAT, когда лень настраивать firewall.

Далее вкратце разберу каждый пункт, и особенно пути эффективного и простого использования под Windows.
Читать дальше →

Психологическое здоровье компании и её эффективность

Reading time6 min
Views3K

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

Читать далее

Борьба с фрагментацией памяти в ядре Linux

Reading time12 min
Views14K

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

Абстракции и наследование в Си — стреляем по ногам красиво

Reading time10 min
Views15K

Иногда нет-нет да и хочется что-нибудь абстрагировать и обобщить в коде на Си. К примеру, хочешь ты принтануть содержимое структуры несколько раз, пишешь везде, как дурак, printf("%s %d %f\n", foo->bar, foo->baz, foo->boom), и интуитивно кажется, что есть способ сделать foo->print(foo), и так вообще со всеми структурами, не только с foo.

Возьмем пример: есть некий чувак с именем и фамилией, и есть птица, у которой есть имя и владелец.

Читать далее

Делаем блок SPI to AVALON_MM для USB-устройства на базе FX3

Reading time18 min
Views2.8K
В предыдущей статье мы научились подавать Vendor команды в устройство USB3.0 на базе контроллера FX3 и реализовали программную шину SPI. Сегодня мы продолжим начатое и сделаем компонент SPI to Avalon_MM. Может возникнуть вопрос: мы же уже умеем работать с шиной Avalon_MM через JTAG средствами TCL-скриптов, зачем нам что-то ещё?

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

Вариант с TCL-сервером, к которому обращается плюсовая программа, рассмотренный в этой статье, требует сложной ручной подготовки при каждом запуске. Надо обязательно запустить среду исполнения (для Windows и Linux они разные), запустить серверный скрипт, а затем – в программе синхронизировать работу с данными по USB и с командами через TCP. Не люблю такие сложности. Оставим те варианты под случаи, когда они не создают трудностей. Здесь же у нас есть USB-устройство, мы всё равно с ним работаем, вот и будем обращаться к шине AVALON_MM через него. Приступаем.


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

Полезные советы по (не) изучению английского

Reading time6 min
Views21K

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

Самое главное, что мне стоило бы знать - для каждого уровня языка должна быть своя стратегия. То, что эффективно на одном уровне, абсолютно не подойдет на другом. Обычно уровни знания языка делят на basic (A1, A2), independent (B1, B2), proficient (C1, C2). Эти ступени, как несгораемая сумма: если один раз достичь определенного крепкого уровня, то вниз точно не спустишься, даже через продолжительное время. Их можно представить, как три горки, каждая из которых более крутая, при этом после каждой из них есть прямой участок. Желательно эти горки пройти с максимальным ускорением, потому что, если остановиться, обязательно скатишься обратно и придется разгоняться заново.

Читать далее

Простое руководство по атомарности в C++

Reading time9 min
Views20K

Часто возникает путаница с тем, что же понимается в компьютерных науках под «атомарностью». Как правило, атомарность – это свойство процесса, означающее, что он совершается за один шаг или операцию. Но в языке C++  атомарность определяется гораздо более специфичным образом. На самом деле, при использовании std::atomic  с классами и типами еще не гарантируется, что весь код будет подлинно атомарным. Хотя, атомарные типы и входят в состав языка C++, сами атомарные операции должны поддерживаться на уровне того аппаратного обеспечения, на котором работает программа. Эта статья – простое руководство, помогающее понять, что же представляет собой атомарность в C++.

Читать далее

Выученная беспомощность и стили объяснения успехов и неудач

Reading time6 min
Views9.3K

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

Многие пользователи в комментариях отметили, что я неверно изложила притчу о мышках, ведь на самом деле в ней фигурировали лягушки, а из молока нельзя взбить масло. Только из сливок. Да, это так. Для меня было не очень важно сохранять каждую деталь истории, ведь суть не в том, КТО пытался спастись из ведра с каким-то содержимым, а в том, ПОЧЕМУ кто-то сдается сразу, а кто-то продолжает отчаянные попытки за выживание или изменение условий.
(Да и “молитва о двух мышках” из фильма “Волк с Уолл-Стрит” мне все-таки ближе, чем о лягушках).

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

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

Читать далее

Легальный способ копировать импортные изделия. Пошаговая инструкция

Reading time11 min
Views47K

«А что, так можно было»?

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

Поэтому я прошу вас запомнить слово...

Какое слово надо запомнить?

STM32 Modular USB Composite device

Reading time27 min
Views20K

Проект является логическим продолжением другого проекта на Хабре - CDC+MSC USB Composite Device на STM32 HAL и рассказыват о том, как на STM32 создать проект с несколькими USB устройствами, с читаемой структурой и используя типовые модули. Конкретно в этом проекте рассмотрен пример комбинации HID + CDC UART + CDC, а также рассказано как этот проект возможно расширить другими интерфейсами.

Читать далее

Как изменить цвет текста в терминале Linux

Reading time10 min
Views65K
Небольшое руководство и простой bash скрипт, чтобы сделать вывод вашего кода немного более ярким и красочным

Обычно вывод текста в терминале пользователя выглядит слишком монохромно. Однако добавить больше красок — совсем несложно. В данном скрипте я предлагаю вспомогательные методы для вывода текста, использования заданных цветов и работы с окнами терминала в тёмном и светлом режимах.

⬇️ Скачать color.zip — 2.7 KB (прим. редактора — потребуется регистрация на сайте)
Читать дальше →

Как спроектировать фильтр электромагнитных помех для DC-DC преобразователя?

Reading time9 min
Views28K

Поставщики компонентов наперебой рассказывают, как просто при помощи их изделий создать готовое к промышленному выпуску решение. После посещения одного из таких мероприятий от Wurth Electronic по проектированию пассивных фильтров электромагнитных помех (ЭМП) у меня появились смутные сомнения по поводу методики подбора компонентов, и мы решил провести собственное исследование.

Сегодня мы постараемся рассеять маркетинговый туман и внести осознанность в проектирование фильтров ЭПМ для импульсных преобразователей (DC-DC).

Читать далее

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

Reading time26 min
Views23K

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

Читать далее

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

Reading time11 min
Views11K

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

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

Читать далее

Holy C++

Reading time5 min
Views34K

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

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

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
Views12K


Еще более низкий уровень (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
Views25K


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

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

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