Search
Write a publication
Pull to refresh
-1
0
Юрий Лунев @bitterman

Embedded Linux

Send message

STM32F4Discovery – подключаем камеру по интерфейсу DCMI

Reading time7 min
Views123K

STM32F4Discovery – подключаем камеру по интерфейсу DCMI



Когда-то, подключая камеру от мобильного телефона к микроконтроллеру STM32F407VGT6 (который имеет место быть на плате STM32F4Discovery), я даже не думал о том, что данный контроллер имеет специальный аппаратный интерфейс для данного дела. Может быть, невнимательно читал даташит, но я всегда считал, что интерфейс DCMI имеется только у чипов в корпусах UFBGA176 и LQFP от 144 ног. Однако, не так давно, открыл для себя озвученную деталь: 100-ногий STM32F407 также имеет DCMI на борту.
Являясь большим любителем изучения и совместного запуска различного мобильного железа (в частности, LCD и камер) с МК, мимо такого открытия я просто так пройти не смог, и решил восполнить данный пробел в изучении периферии STM32. Собственно, данный материал и посвящен описанию осуществления возникшей затеи.
Читать дальше →

OpenMCAPI: одновременный запуск Linux и RTOS на многоядерных процессорах

Reading time10 min
Views15K


В повседневной практике разработчика встраиваемых систем приходится сталкиваться с необходимостью запуска двух и более разноплановых ОС на n-ядерных системах на кристалле. Это, как правило, Linux и специализированная RTOS. На плечи Linux ложится работа с тяжеловесными стеками протоколов, а RTOS же занимается задачами реального времени.
 
Одна из основных задач, которая встает при такой организации системы — обеспечение механизма взаимодействия, то есть межъядерный обмен данными. Если вам интересно узнать один из вариантов решения на базе открытой библиотеки OpenMCAPI, пролистать пару десятков строк программного кода и увидеть реальные цифры пропускной способности при использовании этой библиотеки, добро пожаловать под кат.
Читать дальше →

Не бойтесь велосипедов. Или еще один Grand Central Dispatch (GCD) на C++11

Reading time8 min
Views22K

ИМХО (Имею Мнение Хрен Оспоришь)


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

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

Как хвост виляет собакой. Азбука пропаганды

Reading time4 min
Views210K
Чем доступнее информация, тем больше её вокруг. Чем быстрее она распространяется, тем меньше остаётся времени на то, чтобы её проверить. Постепенно информационная среда превращается в некое подобие «белого шума». Всё труднее строить внутри себя новые информационные фильтры, чтобы отсеять лишнее: убрать в сторону лозунги, агитацию, пропаганду, а оставить только то, что на самом деле кроется за ними. А манипулировать нашими мыслями пытаются постоянно, и я говорю не о 25-ом кадре (он не работает), а о более земных вещах — приёмах пропаганды, которые так умело (а зачастую — очень топорно) используют политики, рекламщики и вообще, все, кому не лень. Об этих приёмах и пойдёт речь в статье.

Хвост виляет собакой. ("Wag the dog") — чтобы избежать большого скандала или «замять», оставить незамеченным какое-нибудь важное, но неприятное событие, часто используется простой, но хитрый и ловкий приём, который англоязычные политтехнологи называют «Wag the dog», а русскоязычные — «Хвост виляет собакой». Он заключается в том, чтобы вовремя поднять волну обсуждения вокруг вопроса второстепенной важности, на фоне которой другое, более важное событие или действие пройдёт незаметно.
Примеры таких вопросов: Отмена перехода на зимнее время, российское гражданство Депардье, поездка Путина или Саши Грей на Ладе Калине по России, полёты со стерхами и т.д.
Своё название этот приём получил в честь английского выражения tail wagging the dog, который, в свою очередь, появился из следующего народного пассажа:
— Почему собака виляет хвостом?
— Потому, что собака умнее, чем хвост. Если бы хвост был умнее, он вилял бы собакой.

Ещё 7 приёмов - под катом

Использование ncurses в PHP

Reading time9 min
Views21K
Как программист и веб-разработчик, вы наверное время от времени пишете программы на php для администрирования сайта из консоли. Средствами языка можно сделать только выводящую/читающую из консоли программу, но с помощью библиотеки ncurses можно создать консольную утилиту с довольно сложным внешним видом, которая будет одинаково выглядеть в разных видах терминалов.

PHP очень гибок и расширяем, с его помощью можно создавать скрипты, которыми можно заменить аналогичные на других языках (Perl/bash-скрипты и прочее). Функциональность ncurses поразительна и действительно выводит возможности работы с терминальным php-приложением на новый уровень.

Предназначение статьи — дать вам «толчок» в сфере написания консольных утилит на php, которые будут использовать возможность этой библиотеки. Я собираюсь показать только самое важное, относящееся к самой библиотеке, и надеюсь дать вам базу для использования ncurses в вашем приложении.

Для кого предназначена статья

Материал предназначен для опытных php-программистов, заинтересованных в создании консольных php-приложений с пользовательским интерфейсом. (прим. переводчика: материал пригодится разработчику любого уровня, здесь нет ничего сложного).
Читать дальше →

Интеграция дизайна мобильных приложений. Часть 2: iOS, Windows Phone

Reading time3 min
Views42K


Это вторая часть доклада, который я прочитал на Dribbble Meetup 2013 в Москве. В первой части я подробно описал свой процесс интеграции дизайна под платформу Android. Эта часть — про интеграцию дизайна под iOS и Windows Phone, а также я вскользь упомяну про Samsung Bada 2.0. Дальше — много картинок.

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

Простейшая реализации кросс-платформенного мультиплеера на примере эволюции одной .NET игры

Reading time4 min
Views7.9K
Всем привет!
Сразу попрошу извинения за стилистику моей писанины и незнание русского языка – к сожалению я ни разу не блогописатель, но желание оставлять комменты на хабре — сильный мотиватор. Кроме того, что я не писатель, я еще и не программист, а инженер-строитель, который иногда балуется написанием пары строк кода – такое вот хобби среди прочих. Но про строительство я вдоволь написался во времена подготовки и защиты диссера, и больше к этому возвращаться желания нет.
А в этой статье я хочу описать личный опыт создания одной игрушки с реализацией многопользовательской игры, позволяющей поддерживать различные платформы (пишу я на .NET, поэтому в первую очередь мой опыт касается Windows/WP, но этот же метод прекрасно подойдет для других платформ, у меня есть рабочие прототипы описываемой игры для Android/iOS, но пока нет желания платить по 1к юсд за коммерческие пакеты Xamarin). И да — в этой вводной статье (которая изначально планировалась исключительно в песочницу) я не буду раскрывать технических деталей, так как в этом случае я рискую еще долго ее не закончить. Кто знает, возможно у меня еще появится время и возможность написать более подробное продолжение.
Читать дальше →

Разбор задач финала чемпионата мира про программированию ACM ICPC 2013

Reading time25 min
Views123K
На прошедшем неделю назад чемпионате мира по командному программированию ACM ICPC 2013 было 11 задач, одну из которых за отведённое время не смогла решить правильно ни одна из команд.

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

В этом году на ACM ICPC был 21 аналитик из Швеции, Нидерландов, США, Словакии, Беларуси и России. И 10 из них были из Яндекса. Все они в разные годы были призёрами ICPC. Специально для Хабра они разобрали все задания чемпионата.

Разбор задачи «Матрёшка» во время трансляции ACM ICPC 2013
Читать дальше →

Кросс-компиляция в OS X под Linux используя crosstool-ng

Reading time4 min
Views14K


В данной заметке речь пойдёт о замечательном средстве автоматизации сборки кросс-тулчейнов crosstool-ng, практически незаменимого инструмента для любого уважающего себя embedded-разработчика. Если вам приходилось по-серьёзному собирать софт из x86-linux под arm-linux, то вы наверняка слышали о нём.

В данном руководстве рассматривается не столько кросс-компиляция по архитектуре, сколько кросс-компиляция по системе — сборка под Linux в Darwin.
Читать дальше →

Об особенностях видеосъёмки лекций

Reading time4 min
Views53K


За последний год я имел отношения к записи более 1000 лекций разного уровня сложности и хотел бы поделиться своим опытом в этой части. Это обещанное продолжение статьи Тренды в образовательной среде (памятка для вуза).

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

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

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

Итак, можно выделить следующие типы видеосъёмки лекций:
Читать дальше →

NES, реализация на FPGA

Reading time15 min
Views189K
Добрый день!

Я хочу рассказать о проекте игровой консоли Nintendo Entertainment System (NES) в реализации на FPGA. На постсоветском пространстве она известна как Dendy.

NES на ПЛИС
Желающих посмотреть видео и поностальгировать прошу под кат.
Ностальгировать

Свободный ноутбук Novena

Reading time2 min
Views169K

hi-res

Известный хакер, автор книги “Hacking Xbox” Эндрю Хуанг (Andrew “bunnie” Huang) в июне 2012 года вместе с коллегами начал разработку свободного ноутбука Novena на процессоре Freescale iMX6. Идея в том, чтобы у сообщества была открытая платформа, с открытой документацией и руководством по программированию, так что каждый может собрать из комплектующих себе ноутбук/маршрутизатор/etc. на свой вкус, с любой клавиатурой, корпусом и размером экрана.
Читать дальше →

Создаем личное облако на 3 Тб

Reading time12 min
Views202K
Я бы хотел поделиться одним способом создания личного облака на базе трехтеррабайтного WD MyBook Live. Нет, я не буду даже упоминать про wd2go и их «полуоблака», которые по сути являются только доступами к самому NAS через сервисы WD при помощи довольно корявых Java-апплетов. В этой статье речь пойдет о «честном» облаке, работающем на MBL при помощи ownCloud.
Это решение подойдет тем, кто мечтает о личном аналоге Dropbox, файлы в котором хранятся не «где-то там», а на конкретном физическом носителе, и ограничены только его объемом, без необходимости платить ежемесячно за этот объем (пренебрегая абонентской платой за интернет и стоимостью электроэнергии).
Большинство решений подобной задачи требуют достаточно много покопаться в интернете и опираются на хорошее знание Linux-систем. В данном посте я попытаюсь дать наиболее полный и адекватный HOW-TO на русском, чего сам в интернете не нашел. Так что многое пришлось делать методом проб и ошибок на свой страх и риск. Реализация данного решения не требует каких-либо фундаментальных знаний Linux, и я постараюсь расписать все наиболее доступно, по шагам.

Если интересно что из этого вышло — добро пожаловать под кат.
Читать дальше →

Тройка полезных монад

Reading time4 min
Views48K
Внимание: перед тем как читать текст ниже, вы уже должны иметь представление о том, что такое монады. Если это не так, то прежде прочитайте вот этот пост!

Перед нами функция half:


И мы можем применить её несколько раз:
half . half $ 8
=> 2


Всё работает как и ожидалось. Но вот вы решили, что хорошо бы иметь лог того, что происходит с этой функцией:


half x = (x `div` 2, "Я только что располовинил  " ++ (show x) ++ "!")


Что ж, отлично. Но что будет если вы теперь захотите применить half несколько раз?
half . half $ 8


Вот то, что мы хотели бы, чтобы происходило:


Спойлер: автоматически так не сделается. Придётся всё расписывать ручками:
finalValue = (val2, log1 ++ log2)
    where (val1, log1) = half 8
          (val2, log2) = half val1


Фу! Это ни капли не похоже на лаконичное
half . half $ 8


А что, если у вас есть ещё функции, имеющие лог? Напрашивается такая схема: для каждой функции, возвращающей вместе со значением лог, мы бы хотели объединять эти логи. Это побочный эффект, а никто не силён в побочных эффектах так, как монады!
Читать дальше →

Функторы, аппликативные функторы и монады в картинках

Reading time5 min
Views195K
Вот некое простое значение:


И мы знаем, как к нему можно применить функцию:


Элементарно. Так что теперь усложним задание — пусть наше значение имеет контекст. Пока что вы можете думать о контексте просто как о ящике, куда можно положить значение:


Теперь, когда вы примените функцию к этому значению, результаты вы будете получать разные — в зависимости от контекста. Это основная идея, на которой базируются функторы, аппликативные функторы, монады, стрелки и т.п. Тип данных Maybe определяет два связанных контекста:


data Maybe a = Nothing | Just a

Позже мы увидим разницу в поведении функции для Just a против Nothing. Но сначала поговорим о функторах!
Читать дальше →

Совершенный код и реальные проекты

Reading time12 min
Views82K
У меня есть проблема — я перфекционист. Я люблю совершенный код. Ведь это не только правильный подход к написанию программ, но и настоящее искусство. От чтения хорошего листинга я получаю не меньше удовольствия, чем от чтения хорошей книги. Проектировать архитектуру большого проекта ничуть не легче, чем проектировать архитектуру большого здания, а в случае хорошей работы — результат не менее прекрасен. Порой меня завораживает то, как изящно переплелись паттерны проектирования в создании совершенной программной системы. Меня восхищает внимание к деталям, когда абсолютно каждый метод настолько прост и понятен, что претендует на место классического примера совершенного кода.

Но, увы, всё это великолепие разбивается о суровую действительность и реальные проекты. Если мы говорим о продакшн-проекте, то пользователей не волнует, насколько красив ваш код и насколько хороша архитектура, их волнует, чтобы проект хорошо работал. Но я всё равно считаю, что в любом случае нужно стремиться писать правильно, просто при этом фанатизма быть не должно. После чтения различных холиваров на тему правильных подходов к написанию кода мне в глаза бросилась одна тенденция: каждый пытается применить означенные подходы не в целом к программированию, а только к своему опыту разработки, к своим проектам. Многие не осознают, что хорошие практики — это не абсолютные правила, которые должны строго соблюдаться в 100% сценариев, это лишь советы о том, как следовало бы поступать в большинстве ситуаций. На каждую хорошую практику всегда можно придумать несколько дюжин примеров, в которых она работать не будет. Но это вовсе не означает, что хорошая практика не такая уж и хорошая, просто её применили не к месту.

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

Общественное обсуждение проекта ГОСТ по компрессии оцифрованных аудиоданных

Reading time22 min
Views6.7K
Уважаемые Хабрапользователи!

Продолжая начатую недавно традицию публикации проектов стандартов, разрабатываемых нашей компанией в рамках деятельности технического комитета по стандартизации ТК-234 «Системы тревожной сигнализации и противокриминальной защиты», представляем вашему вниманию стандарт «Системы охранные телевизионные. Компрессия оцифрованных аудиоданных. Общие технические требования и методы оценки алгоритмов».

Будем крайне признательны за конструктивную критику проекта, а все ценные замечания и пожелания будут внесены в очередную редакцию стандарта. Текст стандарта под катом.
Читать дальше →

Общественное обсуждение проекта ГОСТ по защите оцифрованных видеоданных от случайного и преднамеренного искажения

Reading time9 min
Views9.1K
Уважаемые Хабрапользователи!

Наша компания уже несколько лет входит в состав технического комитета по стандартизации ТК-234 «Системы тревожной сигнализации и противокриминальной защиты» и является активным участником процессов стандартизации в области охранных систем. Так уж получилось, что принятие стандартов в нашей стране происходит, так сказать, «за кулисами» на основании решения достаточно скромной группы профильных экспертов. Такое положение дел нам кажется неправильным и сейчас, в ходе разработки очередного стандарта, мы решили по собственной инициативе организовать общественное обсуждение проекта ГОСТ «Системы охранные телевизионные. Защита оцифрованных видеоданных от случайного и преднамеренного искажения».

Мы будем крайне признательны за конструктивную критику проекта, а все ценные замечания и пожелания будут внесены в очередную редакцию стандарта. Если такой опыт окажется удачным, то будем представлять на суд уважаемой Хабрааудитории все проекты всех стандартов, проходящих через ТК-234. Текст стандарта под катом.
Читать дальше →

Поддержка USB в KolibriOS: что внутри? Часть 3: код поддержки хост-контроллеров

Reading time13 min
Views11K
Уровень поддержки хост-контроллеров, как я писала в общем обзоре, должен вызывать вышележащие уровни при наступлении некоторых событий и предоставлять функции, необходимые вышележащим уровням для работы.
Для удобства восприятия я буду рассказывать о различных элементах кода поддержки в том порядке, в котором они получают управление.

Запуск подсистемы USB


Подготовка: USB-контроллеры в списке PCI-устройств


Подсистема USB запускается вызовом usb_init из init.inc в ходе загрузки системы.

К моменту запуска USB уже подготовлен список найденных PCI-устройств pcidev_list. USB-контроллеры опознаются среди всех PCI-устройств по коду класса, подкласса и интерфейса:
Тип Класс Подкласс Интерфейс
UHCI 0Ch 03h 00h
OHCI 0Ch 03h 10h
EHCI 0Ch 03h 20h
XHCI 0Ch 03h 30h
usb_init проходит по списку PCI-устройств несколько раз, каждый раз выделяя USB-контроллеры.

Отключение контроля BIOS


Некоторые BIOS умеют обрабатывать USB-мыши, USB-клавиатуры и USB-флешки, предоставляя данные для операционных систем, не знающих про USB. Данные от мышей и клавиатур преобразуются в формат PS/2 и тем или иным способом доводятся до операционной системы так же, как если бы в системе существовала настоящая PS/2-мышь и/или клавиатура. USB-флешка представляется жёстким диском с точки зрения int 13h — такая поддержка встречается куда чаще поддержки мышей, ибо необходима для загрузки с флешек.
Операционная система может использовать любой режим процессора и самостоятельно обрабатывать любые прерывания. Чтобы BIOS в таких условиях всё же могла получать управление с предсказуемым окружением, ещё в районе 486-х (начиная со специальной версии i386SL, если точно) Intel придумала специальный режим процессора System Management Mode (SMM), в котором и работает BIOS, прерывая операционную систему. В SMM невозможно попасть средствами самого процессора; процессор попадает в этот режим, когда железо материнской платы подаёт специальный сигнал System Management Interrupt (SMI). USB-контроллеры, встроенные в чипсет, как правило, могут генерировать SMI вместо прерывания в зависимости от настроек.

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

Information

Rating
Does not participate
Location
Таганрог, Ростовская обл., Россия
Registered
Activity