Как стать автором
Обновить
14
0
Ярослав Садин @ysdn

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

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

Новый курс на платформе Stepic: «Углубленное программирование на С/С++»

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


Мы продолжаем запускать курсы на платформе Stepic. И сегодня делимся с вами очередной новостью: 23 августа был запущен курс по углубленному программированию на языках C/C++. Продолжительность курса чуть больше двух месяцев. Это прекрасная возможность расширить знания и получить новый опыт в условиях, когда на очные занятия просто нет времени.
Читать дальше →
Всего голосов 27: ↑27 и ↓0 +27
Комментарии 42

Embedded World 2016: куда катится embedded-мир?

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

Давненько мы ничего не писали. А тем временем...

В тридевятом царстве, в тридесятом государстве, в баварской вотчине, в средневековом городе Нюрнберге проходит выставка под названием Embedded World. Цель выставки — собрать в одном месте производителей, разработчиков, студентов и других заинтересованных граждан. Проходит она три дня — с 23 по 25 февраля.




Сайт выставки: http://www.embedded-world.de

Около 900 участников, примерно 25 тысяч посетителей. Двух дней еле-еле хватает, чтобы понять, что к чему. Поэтому выставка длится три дня :)

Судьба забрасывает меня на это мероприятие уже не в первый раз: мы с коллегами по НТЦ Метротек посещали выставку в 2013, 2014 и 2015 годах. Именно здесь мы впервые увидели Cyclone V SoC (System On Chip c ARM и FPGA на борту), который впоследствии лёг в основу новых девайсов производства НТЦ Метротек (это — Беркут-ЕТ, EthOnd, BlueSoM, ETL-N). Именно здесь мы нашли производителей корпусов EMKO и наладили с ними сотрудничество, теперь все стоечные приборы (свитч Metrotek X10-24, Беркут-МХ) выглядят единообразно. Здесь мы узнаём о новинках и трендах.

Под катом больше информации об участниках, новых продуктах и просто вещах, которые нам понравились и запомнились.
С фотографиями и ссылками.
Читать дальше →
Всего голосов 23: ↑23 и ↓0 +23
Комментарии 12

Портирование FreeModbus 1.5 под STM32 HAL rs485 без RTOS

Время на прочтение 15 мин
Количество просмотров 68K
С недавних пор я начал заниматься встраиваемыми системами и докатился до программирования микроконтроллеров, а именно STM32F373. Одной из задач было развернуть Modbus Slave RTU поверх интерфейса rs485.

Поскольку сроки поджимали было принято решение взять что-нибудь готовое, чем я и занялся. Недолгое гугление навело меня на библиотеку FreeModbus, а вот тут началась боль с которой, я надеюсь, вы не столкнетесь.
Читать дальше →
Всего голосов 13: ↑12 и ↓1 +11
Комментарии 19

Обзор примитивов синхронизации — Семафор и немного lockless-а

Время на прочтение 6 мин
Количество просмотров 27K
В прошлой заметке мы обсудили самую известную пару из лагеря инструментов синхронизации тредов — mutex и cond. Сегодня встретимся с sema — примитивом, который умеет заменять предыдущие два в одиночку.

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

Напомню фрагмент кода:

while(total_free_mem <= 0)
    {
    wait_cond(&got_free_mem, &allocator_mutex);
    }


Здесь цикл вокруг wait_cond гарантирует нам, что даже если мы вернёмся из ожидания события случайно или по ошибке, ничего страшного не случится — проверка в while обеспечит нам уверенность, что нужное состояние проверяемого объекта достигнуто. Если нет — поспим ещё в ожидании.

Отметим ещё раз, что проверяем мы состояние объекта (total_free_mem <= 0) при запертом мьютексе, то есть никто не может его менять в то же самое время.
Читать дальше →
Всего голосов 28: ↑27 и ↓1 +26
Комментарии 18

Обзор примитивов синхронизации — mutex и cond

Время на прочтение 6 мин
Количество просмотров 51K
Синхронизация нужна в любой малтитредной программе. (Если, конечно, она не состоит из локлесс алгоритмов на 100%, что вряд ли). Будь то приложение или компонента ядра современной операционной системы.

Меня всё нижесказанное, конечно, больше волнует с точки зрения разработки ядра ОС. Но почти всё применимо и к пользовательскому коду.

Кстати, ядра старых ОС в примитивах синхронизации не нуждались, поскольку преемптивной мультизадачности внутри ядра в старые добрые времена не было. (Уж за Юникс 7-й версии я отвечаю. Не было.) Точнее, единственным методом синхронизации был запрет прерываний. Но об этом позже.

Сначала перечислим героев. Мне известны следующие примитивы синхронизации:

User/kernel mode: mutex+cond, sema, enter/leave critical section.
Kernel only: spinlock, управление прерываниями.

Зачем всё это нужно, читатель, наверное, знает, но всё же уточним.

Если некоторая структура данных может быть доступна двум параллельно работающим нитям (или нити и прерыванию), и являет собой сущность, к которой нельзя обеспечить атомарный доступ, то работу с такой структурой нужно производить так, чтобы только одна нить одновременно выполняла сложные манипуляции с состоянием структуры.
Читать дальше →
Всего голосов 33: ↑27 и ↓6 +21
Комментарии 15

Основные параметры и сертификация оптических SFP модулей

Время на прочтение 21 мин
Количество просмотров 222K
Знание некоторых принципов легко возмещает незнание некоторых фактов.
Гельвеций

Оптические трансиверы


В настоящее время применение оптических технологий при построении телекоммуникационных сетей стало практически повсеместным. Каждый, кто имел дело с оптическим коммутационным или передающим оборудованием, сталкивался с работой оптических приемо-передающих устройств – трансиверов (англ. transceiver = transmitter + receiver).
Читать дальше →
Всего голосов 24: ↑24 и ↓0 +24
Комментарии 9

Методы мониторинга в системах DWDM (Часть 2)

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

Вариантов организации мониторинга состояния пассивных элементов, систем уплотнения WDM не так уж и много, в связи с естественными ограничениями связанными с особенностями оборудования.
Читать дальше →
Всего голосов 6: ↑6 и ↓0 +6
Комментарии 19

Методы мониторинга в системах DWDM (Часть 1)

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


Основным принципом технологии WDM (Wavelength-division multiplexing, частотное разделение каналов) является возможность передавать в одном оптическом волокне множество сигналов на различных несущих длинах волн. В российском телекоме системы передачи, созданные с помощью технологии WDM, называют «системы уплотнения».
Читать дальше →
Всего голосов 11: ↑11 и ↓0 +11
Комментарии 16

Простая DWDM-система. Запуск на стенде

Время на прочтение 7 мин
Количество просмотров 38K
На несколько дней к нам в офис приехала компактная DWDM-система Modultech MT-EW-2U и я успел её немножко погонять на стенде.
Эта платформа выполнена по принципу «всё в одном»: в одном корпусе высотой 2U может быть полностью смонтирован DWDM-узел на 16 каналов до 10Гбит/с каждый. Возможна комплектация активными транспондерами с коррекцией ошибок или использование «цветных» сигналов от DWDM-трансиверов.
В нашей конфигурации использовалась упрощенная комплектация без транспондеров и с внешними компенсаторами дисперсии волоконного типа, хотя платформа позволяет использовать встроенные компактные компенсаторы на основе решеток Брэгга.
Читать дальше →
Всего голосов 11: ↑11 и ↓0 +11
Комментарии 2

Взгляд на 10G Ethernet со стороны FPGA разработчика

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

Многие специалисты знают, что топовое сетевое оборудование использует специальные чипы для обработки трафика. Я принимаю участие в разработке таких молотилок и хочу поделиться своим опытом в создании таких высокопроизводительных девайсов (со интерфейсами 10/40/100G Ethernet).

Для создания нового канала сетевики чаще всего берут оптику, пару SFP+ модулей, втыкают их в девайсы: лампочки радостно загораются, пакеты начинают приходить: чип начинает их передавать получателям. Но как чип получает пакеты из среды передачи? Если интересно, то добро пожаловать под кат.
Читать дальше →
Всего голосов 149: ↑148 и ↓1 +147
Комментарии 47

На что стоит променять Cortex-M3?

Время на прочтение 31 мин
Количество просмотров 53K
ARM Cortex-M3 — это, пожалуй, самое популярное на сегодняшний день 32-разрядное процессорное ядро для встраиваемых систем. Микроконтроллеры на его базе выпускают десятки производителей. Причина этому — универсальная, хорошо сбалансированная архитектура, а следствие — непрерывно растущая база готовых программных и аппаратных решений.

Ругать Cortex-M3, в общем-то, не за что, но сегодня я предлагаю подробно рассмотреть Cortex-M4F — расширенную версию всеми любимого процессорного ядра. Перенести проект с микроконтроллера на базе Cortex-M3 на кристалл на базе Cortex-M4F довольно просто, а для ряда задач такой переход стоит затраченных усилий.

Под катом краткий обзор современных Cortex'ов, обстоятельное описание блоков и команд, отличающих Cortex-M4F от Cortex-M3, а также сравнение процессорных ядер на реальной задаче — будем измерять частоту мерцания лампы на микроконтроллерах с разными ядрами.

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

Разработка цифровой аппаратуры на C++/SystemC глазами SystemVerilog программиста

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


SystemC это библиотека для C++ позволяющая моделировать всевозможные аппаратные системы на различном уровне абстракции. Поддерживается как традиционное дискретно-событийное моделирование, привычное программистам на Verilog и VHDL, так и аналоговое моделирование в духе SPICE/Verilog AMS. В комплект также входит библиотека и методология для виртуального прототипирования, библиотеки для написания тестовых окружений и верификации с использованием рандомизированных тестов.

В этой я расскажу о синтезируемом подмножестве SystemC, сравнивая его с синтезируемым SystemVerilog. Сам я пользуюсь SystemC уже где-то 3 года, а до этого несколько лет писал на Verilog/SystemVerilog. Попытаюсь охватить предмет с разных сторон: начиная с философских рассуждений о причинах возникновения SystemC, краткого обзора экосистемы и инструментария и заканчивая практическими примерами синтаксиса и семантики.

Подразумевается, что читатели знакомы с Verilog и C++.
Читать дальше →
Всего голосов 37: ↑37 и ↓0 +37
Комментарии 28

OpenCL в повседневных задачах

Время на прочтение 6 мин
Количество просмотров 26K
Недавно мы рассказывали про HSA и в ходе обсуждения преимуществ нового подхода к построению ПК затронули такую интересную тему, как GPGPU — вычисления общего назначения на графическом ускорителе. Сегодня видеоускорители AMD предоставляют доступ к своим ресурсам с помощью OpenCL — фреймворка, обеспечивающего сравнительно простое и понятное программированое высокопараллельной системы.


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

Подробнее о том, где сегодня можно встретить OpenCL в повседневной жизни, как он ускоряет обычный офисный софт и какие возможности открывает разработчикам сегодня и поговорим.
Читать дальше →
Всего голосов 16: ↑13 и ↓3 +10
Комментарии 5

Зомби-код. Код, живущий своей жизнью

Время на прочтение 5 мин
Количество просмотров 41K
Предлагаю читателям «Хабрахабра» перевод статьи «Zombie Code When Maintainability Goes Out Window».

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

Да, скажешь ты? Почему?

Ты не задумывался, что твой код устареет через год? Разве тебя не волнует, что какой-то будущий разработчик испортит нетронутую красоту твоего тщательно обработанного решения? Разве ты не восхищался случайно встреченным, незаменимым, но совершенно устаревшим комком грязи? Хотел бы ты скорее написать зомби-код, который никто кроме тебя не сможет понять, код, который будут расценивать со страхом и трепетом, код, который будет вечно жить в компании, потому что никто не осмелится его изменить?


Читать дальше →
Всего голосов 60: ↑38 и ↓22 +16
Комментарии 42

Статический временной анализ demystified

Время на прочтение 7 мин
Количество просмотров 14K
Многие начинающие разработчики ПЛИС (и ASIC) не до конца понимают влияние временных ограничений (constraints – далее констрейнты) на результаты синтеза; то, каким образом констрейнты используются в статическом временном анализе. Большая часть литературы по этой тематике сводится к рассмотрению всевозможных видов констрейнтов, но ничего не говорит о внутренней “кухне” и используемых алгоритмах. Рассмотрению констрейнтов посвящен и недавний пост по данной тематике на ГТ (geektimes.ru/post/254932/ [1]). Между тем, констрейнты — лишь вершина айсберга. Их использование должно опираться на фундаментальные знания о статическом временном анализе, которые дают, к примеру, в американских университетах, но ничего не рассказывают у нас. Поэтому, собственно, поговорим о фундаменте.
Читать дальше →
Всего голосов 12: ↑12 и ↓0 +12
Комментарии 5

Как писать тестируемый код

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


Если вы программист (или чего хуже архитектор), то можете ли вы ответить на такой простой вопрос: как писать НЕ тестируемый код? Призадумались? Если с трудом можете назвать хотя бы 3 способа добиться не тестируемого кода, то статья для вас.

Многие скажут: а зачем мне знать, как писать не тестируемый код, плохому хочешь меня научить? Отвечаю: если знать типичные паттерны не тестируемого кода, то, если они есть, можно легко увидеть их в своем проекте. А, как известно, признание проблемы — уже половина пути к лечению. Также в статье дается ответ, как собственно осуществляется такое лечение. Прошу под кат.
Читать дальше →
Всего голосов 72: ↑63 и ↓9 +54
Комментарии 77

Ethernet + PCIe + FPGA = LOVE

Время на прочтение 12 мин
Количество просмотров 68K
image

Доступ по Ethernet невозможен без сетевых карточек (NIC). На небольших скоростях (до 1G) NIC встраивают в материнки, а на больших (10G/40G) NIC размещается на отдельной PCIe плате. Основным ядром такой платы является интегральный чип (ASIC), который занимается приемом/отправкой пакетов на самом низком уровне. Для большинства задач возможностей этого чипа хватит с лихвой.

Что делать, если возможностей сетевой карточки не хватает? Либо задача требует максимально близкого доступа к низкому уровню? Тогда на сцену выходят платы с перепрограммируемой логикой — ПЛИС (FPGA).

Какие задачи на них решают, что размещают, а так же самых интересных представителей вы увидите под катом!

Осторожно, будут картинки!
Читать дальше →
Всего голосов 31: ↑31 и ↓0 +31
Комментарии 56

TKGate — open-source симулятор цифровых схем: проект снова жив

Время на прочтение 4 мин
Количество просмотров 24K
TKGate ( tkgate.org ) — это симулятор цифровых схем на базе Verilog с открытым исходным кодом. Он работает в ОС Linux. Симулятор написан на связке C и Tk/Tcl. Автором проекта является Jeffery P. Hansen (неактивен). Сейчас разработкой занимается наш соотечественник Андрей Скворцов. На прошлой неделе после шестилетнего (!) перерыва в разработке вышла новая версия симулятора TKGate-2.0. Вот так выглядит TKGate:





Под катом более подробный разбор TKGate.
Читать дальше →
Всего голосов 27: ↑26 и ↓1 +25
Комментарии 3

Altium Designer: самое большое приложение (about 15 000 000 codelines), сделанное в Delphi

Время на прочтение 10 мин
Количество просмотров 38K
Компания Embarcadero всегда с радостью упоминает продукт Altium Designer, когда речь заходит об успешных коммерческих приложениях, созданных в Delphi. Не может не поражать масштаб проекта – он насчитывает около 15 000 000 (пятнадцати миллионов) строк исходного кода. Altium Designer представляет собой CAD-систему для проектирования печатных плат электронных систем, включая 3D моделирование. Сегодня мы поговорим о технической составляющей системы именно с позиции инженерии ПО.

Читать дальше →
Всего голосов 46: ↑32 и ↓14 +18
Комментарии 57

Как malloc память ест

Время на прочтение 3 мин
Количество просмотров 71K
Нет, здесь не будет ничего из серии «Аааа, я сделал malloc (new), и забыл сделать free (delete)!»
Здесь будет нечто изощренное: мы будем отрезать кусочки памяти по чуть-чуть, прятать их в укромное место… А когда операционная система заплатит выкуп скажет «Хватит!», мы попробуем вернуть все обратно. Казалось бы, простейшая операция выделения и освобождения памяти — ничего не предвещает беды.
Тем кому интересно как уничтожить забить память — прошу под хабракат
Взять в руки компилятор
Всего голосов 83: ↑57 и ↓26 +31
Комментарии 48
1

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность