Search
Write a publication
Pull to refresh
49
0.2
Дмитрий @Int_13h

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

Send message

Почему не стоит разгонять таймер Windows или мегаватты, потраченные впустую

Reading time6 min
Views119K

Период таймера Windows по умолчанию составляет 15.6 мс – он тикает 64 раза в секунду. Когда программа увеличивает частоту таймера, растет потребление энергии, что сказывается на расходе батареи. При этом также расходуется вычислительная мощность компьютера, и даже больше, чем я думал – то есть компьютер начинает работать медленнее! Вот почему в течение многих лет Microsoft настоятельно не рекомендует разработчикам поднимать частоту таймера.
Почему же тогда почти каждый раз, когда я вижу разгон таймера, он вызван программой от Microsoft?
Читать дальше →

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

Reading time15 min
Views7.5K
Рассказ об уровне взаимодействия с хост-контроллерами растянулся на две статьи и всё равно оставил за кадром некоторые детали — которые, как я надеюсь, заинтересованный читатель может восполнить непосредственно из исходников. Уровень поддержки каналов куда проще и в основном занят тем, что преобразует вызовы API для вышележащих уровней в нужную последовательность действий, включая блокировки, с нужным хост-контроллером.

Открытие канала


Функция USBOpenPipe из API, названная usb_open_pipe в коде pipe.inc, открывает новый канал по указанным характеристикам канала и «родительскому» каналу, где записаны характеристики устройства. Для этого она:
  • выделяет пару структур *hci_pipe+usb_pipe, описывающих канал и выравненных на контроллеро-специфичную границу, вызовом контроллеро-специфичной функции usb_hardware_func.AllocPipe;
  • выделяет пару структур *hci_gtd+usb_gtd, описывающих пустой дескриптор передачи и выравненных на контроллеро-специфичную границу, вызовом контроллеро-специфичной функции usb_hardware_func.AllocTD;
  • заполняет указатели: в структуре канала копирует указатель на структуру контроллера и указатель на данные устройства, общие для всех каналов, из «родительского» канала; между структурой канала и структурой пустого дескриптора заполняет указатели туда-обратно; структуру пустого дескриптора делает единственным элементом двусвязного списка каналов;
  • инициализирует мьютекс, который будет охранять все операции с этим каналом. Хотя вся обработка событий от USB-контроллеров происходит в потоке USB, про обращения к API нельзя сказать того же: чтение приложением файла с USB-флешки инициирует постановку передачи — и даже не одной — в очередь в контексте потока приложения. Чтобы новая передача не мешала USB-потоку обрабатывать завершение старой передачи, и нужен этот мьютекс;
  • захватывает мьютекс набора каналов устройства и убеждается, что устройство ещё не отключено;
  • вызывает контроллеро-специфичную инициализацию usb_hardware_func.InitPipe, охраняемую мьютексом, глобальным для контроллера;
  • добавляет новый канал в набор каналов устройства и отпускает мьютекс набора каналов;
  • при ошибке на одном из этапов откатывает все предыдущие этапы. Поскольку откатить контроллеро-специфичную инициализацию сложнее всего, она сделана на последнем этапе, после которого ошибок быть не может.

Контроллеро-специфичная инициализация последним действием добавляет новый канал в соответствующий список. Для управляющих каналов, равно как и для каналов массивов данных, есть всего один список, а вот для каналов прерываний нужно ещё выбрать один из нескольких вариантов.

Здесь в игру вступает планировщик scheduler.inc. Он как раз и выбирает один из списков каналов прерываний, а также убеждается, что для нового канала «достаточно места». Я напомню, что в каждом фрейме FullSpeed-шины под периодические передачи нельзя использовать более 90% времени, а в каждом микрофрейме HighSpeed-шины — более 80% времени.

Здесь я должна отметить, что если вы зачем-то пишете реализацию USB, которая должна работать в ваших условиях, на планировщике можно серьёзно сэкономить. Вам придётся в том или ином виде реализовать всё остальное, что описано в этой серии статей, но при отсутствии большой нагрузки можно вместо полного дерева обойтись всего одним списком каналов прерываний, обрабатываемым каждый фрейм/микрофрейм. Чуть более экономная схема, не слишком усложняющая реализацию, — один список каналов для каждого интервала обработки 1, 2, 4, 8, 16, 32 фреймов. Пока не нужно одновременно обрабатывать более одного устройства с большим трафиком на один хост-контроллер, такой подход ничем не уступает полноценному планировщику. Простая схема «сломается» в некоторых специфичных конфигурациях с двумя или более изохронными каналами FullSpeed-устройств или тремя или более изохронными каналами HighSpeed-устройств, но, быть может, никто и не будет запускать вашу реализацию в столь специфичных условиях?

Если же вы пишете реализацию USB, которая должна работать везде и всегда, планировщик вам тоже придётся написать.
И чем же это грозит?

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, пролистать пару десятков строк программного кода и увидеть реальные цифры пропускной способности при использовании этой библиотеки, добро пожаловать под кат.
Читать дальше →

Часть 1. Как подключить смартфон к авто или история создания OBD Car Doctor

Reading time4 min
Views82K
История

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

Картина чуть поблекла, но считывать-то доступные параметры мы сможем, а если повезет, то может и центральный замок открыть/закрыть сможем (хотя такая перспектива сулит дыру в системе безопасности Винд… т.е. автомобиля :) ).
И так, пора приступать к практическому исследованию!
Читать дальше →

Антихукинг — теория

Reading time3 min
Views17K
Совсем недавно озадачился защитой приложений от перехвата системных api, решил поделиться и обсудить то, к чему пришел. Многие из вас знают, что перехват системных api сводится к перенаправлению оригинальной функции в нужное место, благодаря этому можно модифицировать параметры функции, возвращать результат отличный от оригинала, хранить оригинальный вызов с параметрами и многое другое. Так как это теоретическая часть, примеры в статье будут сопровождаться псевдокодом.
Читать дальше →

Поддержка 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 вместо прерывания в зависимости от настроек.

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

Сглаживание цифровых сигналов

Reading time12 min
Views95K

Введение


Данную статью меня заставил написать пост habrahabr.ru/post/183986, где не совсем правильно используется некоторый алгоритм сглаживания изображения.

Сразу перейдём к сути дела.

Математические модели цифровых сигналов — вектора и матрицы, элементами которых являются числа. Числа могут быть двоичными (бинарный сигнал), десятичными («обычный» сигнал) и так далее. Любой звук, любое изображение и видео могут быть преобразованы в цифровой сигнал1: звук — в вектор, изображение — в матрицу, а видео — в последовательный набор матриц. Поэтому цифровой сигнал — это, можно сказать, универсальный объект для представления информации.

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

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

Приведём пример «плохого» сглаживания


Казалось бы, обычное усреднение и сигнал на выходе должен быть «гладким». Но как определить, насколько он стал «глаже»? Не переборщили ли мы? А может быть некоторые коэффициенты выбрать не по 1/3? А может быть усреднить по пяти точкам? Как определить насколько ослабляются частотные составляющие в сигнале? Как найти свой (то есть для конкретной задачи) оптимум?
На эти и некоторые другие вопросы я постараюсь ответить так, чтобы «обычный» программист смог обосновать свой алгоритм, — надеюсь, не только алгоритм на тему «Сглаживание», так как идеи будут излагаться весьма общие, заставляющие думать самому
Читать дальше →

Анализируем числовые последовательности

Reading time3 min
Views62K


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

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

Уроки по электрическим цепям — линии передачи, часть 2

Reading time9 min
Views92K


Эта статья — перевод. Начало здесь.
Источник.

В программе:
1) Провода болтаются в воздухе, но источник тока/напряжения видит короткое замыкание.
2) На одном конце провода амплитуда равна 0 Вольт, а на другом — 1 Вольт. Как это возможно?
3) Согласование 75 Ом источника сигнала с 300 Ом нагрузкой при помощи правильно подобранного кабеля.

Стоячие волны и резонанс


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

На рисунке показано, как треугольная падающая волна зеркально отражается от открытого конца линии. Для простоты, линия передачи в этом примере показана как единая жирная линия, а не как пара проводов. Падающая волна идёт слева направо, а отражённая – справа налево.
Читать дальше →

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

Reading time9 min
Views11K

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

Прерывания и потоки


Хост-контроллеры оповещают софт о происходящих событиях, генерируя прерывания. Прерывание может прийти и оторвать процессор от текущей задачи в любой момент времени; это накладывает жёсткие требования на обработчик прерывания. Обработчик прерывания не может захватывать никакие блокировки — ведь вполне возможно, что прерванный код как раз завладел блокировкой и уже не сможет её освободить. Единственным исключением является вариант спинлока, запрещающий прерывания на время блокировки, но из-за глобальности эффекта спинлок стоит применять пореже и для очень коротких участков кода. На однопроцессорных конфигурациях такой вариант вырождается в пару cli/sti без собственно спинлока, на многопроцессорных внутри cli/sti остаётся обычный спинлок. Кроме того, контроллер прерываний во время обработки одного прерывания блокирует остальные с тем же или более низким приоритетом.

По этим двум причинам в KolibriOS обработчики прерываний от хост-контроллеров USB передают основную часть работы в выделенный под USB поток ядра, а сами ограничиваются сообщением хост-контроллеру «спасибо, сигнал принят». Сам USB-поток имеет наивысший приоритет, чтобы задумавшиеся пользовательские приложения не мешали обработке. Все функции вышележащих уровней, которые вызываются из уровня поддержки хост-контроллера, работают в контексте потока USB и, как следствие, вполне могут использовать примитивы синхронизации. Приятным побочным эффектом является автоматическая сериализация вызовов: ни обработчик завершения второй передачи из очереди канала, ни функция DeviceDisconnected не будут вызваны, пока не закончит работу обработчик завершения первой передачи из очереди канала, что есть логичное требование к API.

Поток USB также иногда просыпается для обработки событий, отложенных по времени. Пример, о котором я позже расскажу подробнее: после события подключения устройства нужно выждать 100 миллисекунд перед дальнейшей обработкой. В этом случае поток проснётся при обнаружении подключения устройства и запланирует следующее пробуждение через 100 миллисекунд, уже не связанное с пробуждением из-за прерывания.
Читать дальше →

Выполнение транзакций на шине PCI. Реализация на VHDL

Reading time13 min
Views34K
Не так давно я спрашивал о механизме опроса PCI-устройств. После я устроился на работу, доделал тестовое задание, а спрашивал я именно о нем, и благополучно забыл о нем. Но недавно выдали новый проект и пришлось все вспомнить, заодно и решил написать сюда.

Транзакций на шине PCI достаточно много, в данном топике будет описаны только следующие:
  • Конфигурационные транзакции
  • Транзакции ввода/вывода
  • Транзакции обращения к памяти

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

Подмена обработчика системного вызова

Reading time6 min
Views9.9K
Всем доброго времени суток! Я студентка-второкурсница технического ВУЗа. Пару месяцев назад пришла пора выбирать себе тему курсового проекта. Темы типа калькулятора меня не устраивали. Поэтому я поинтересовалась, есть ли что-нибудь более интересное, и получила утвердительный ответ. «Подмена обработчика системного вызова» — вот моя тема.

Введение

Обработчик прерываний (или процедура обслуживания прерываний) — специальная процедура, вызываемая по прерыванию для выполнения его обработки. Эти обработчики вызываются либо по аппаратному прерыванию, либо соответствующей инструкцией в программе, и обычно предназначены для взаимодействия с устройствами или для осуществления вызова функций операционной системы (wiki).

Зачем?

Главная цель, пожалуй, наглядно на рабочей системе посмотреть как оно работает, а не «грызть» сухую теорию. Ну, или как раньше программисты пытались «делать многозадачность» в DOS, переопределяя обработчик событий таймера.
Читать дальше →

Автоматический светильник для аквариума на МК PIC12

Reading time3 min
Views63K
В рамках изучения 12 серии PIC микроконтроллеров решил сделать небольшое, но очень полезное устройство.
У моей дочки живет аквариум. Подсветка сделана на люминесцентных лампах, которые каждое утро надо включать и вечером выключать. А так как мы семья заядлых туристов, то чтобы не устраивать рыбам пытку светом или темнотой на дней 5-7 решил сделать освещение LED лентой с автоматом включения/выключения от солнечного освещения.
Попутно попытаться выжать из микроконтроллера максимум, по функционалу.
Читать дальше →

Беспроводная передача данных, ISM-диапазон

Reading time16 min
Views41K

В последнее время на Хабре было описано множество примеров реализации погодных термометров, систем сбора информации, управлением в системах «умный дом» — как проводных, передающих информацию по Ethernet, так и беспроводных, по WiFi™. В каждом конкретном случае — есть своя специфика, есть свои плюсы и минусы. И в данном материале речь пойдет об еще одном способе передачи данных — передаче в ISM-диапазоне 868 МГц.
Читать дальше →

Создание USB-гаджета с нуля или еще одна лампа настроения

Reading time6 min
Views58K
Как-то на глаза попалась статья про лампу настроения. Будучи очень далеким от электротехники и абсолютно незнакомым с принципом работы микроконтроллеров, полученных из топика данных ну никак не хватало для понимания всех необходимых действий для создания лампы. Со временем на глаза попадались другие интересные проекты на микроконтроллерах, потому в один прекрасный момент появилось желание потратить часть свободного времени на покорение сей стихии.

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

Беглый взгляд на DesignSpark PCB

Reading time5 min
Views18K
Традиционно, при проектировке печатных плат для электроники разной степени DIY-ности большинством используется практически один и тот же набор софта: Proteus, EagleCAD, SprintLayout и т.д. До недавнего времени все мои потребности удовлетворяла связка Proteus + SprintLayout, однако, Proteus пришлось удались, а с прочими CAD-программами электронной направленности (из тех что «на слуху») хороших отношений у меня не сложилось, а схемки рисовать только на бумаге или на окне не хотелось.
Поиск альтернатив привел меня на сайт буржуйской программы DesignSpark PCB, а дальнейшее использование побудило написать этот небольшой обзор.

С моей, сугубо субъективной точки зрения, удобство использования подобных CAD-программ на 80% складывается из двух пунктов:
  • Удобство создания собственных электронных компонентов
  • Удобство трассировки плат

Об этих двух пунктах речь далее и пойдет.

Дисклеймер


Все чертежи, описанные в данной статье, созданы исключительно для данной статьи. Они не претендуют на оптимальность, проработанность, соответствие каким-либо нормам и стандартам. Они никогда не были и не будут созданы автором, так что даже работоспособность плат ничем не подтверждена. Любые оценки, сравнения, сопоставления и выводы являются на 100% субъективными.
Читать дальше →

Немного о процессе производства электронных приборов

Reading time6 min
Views19K
Добрый день, уважаемые хабрачитатели.

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

Под катом очень много фоток. Осторожно! трафик.
Читать дальше →

Пошаговая прошивка OpenWRT на роутер TP-LINK TL-WR741ND

Reading time3 min
Views356K
Роутеры лишаются своих родных прошивок по разным причинам. Желание добавить функционал, припаять USB порт или просто добавить стабильности в работу роутера.

В моём случае роутер на последней стабильной родной прошивке при 3 WiFi и 2 Ethernet потребителях подвисал 4 раза в неделю. Это не очень страшно, но и перезагружать его надоело. Хотелось стабильности. После поисков и чтения отзывов выбор пал на OpenWRT. В статье уже представлена пошаговая инструкция без ошибок, которые мне пришлось пройти.

Шаг 1, прошиваем на последнюю официальную прошивку

Первое, что стоит сделать, это обновиться и поставить последнюю родную прошивку.
Здесь вы можете найти последнюю прошивку для TL-WR741ND, для соответствующей версии оборудования.
  • Переверните роутер и уточните версию железок в нём ориентируясь по наклейке на корпусе.
  • Скачайте архив с последней прошивкой.
  • Прошейте роутер прошивкой из архива обычным способом. Системные инструменты -> Резервная копия & Восстановление (System Tools -> Firmware Upgrade).

Шаг 2, скачиваем и устанавливаем OPENWRT

Далее необходимо выбрать версию прошивки OpenWRT.

Следует использовать именно тот файл, который согласуется с версией железа вашей модели. Не пренебрегайте этим правилом! Возможны два варианта файловой системы для загрузки: JFFS2 и SquashFS.
Прежде чем продолжить описание сборки, остановлюсь немного на том, как устроена корневая файловая система OpenWRT. Она представляет собой файловую систему mini_fo, которая прозрачно объединяет две другие файловые системы: неизменяемую SquashFS, смонтированную в /rom, и изменяемую JFFS2, смонтированную в /overlay. Все файлы, которые создаются или изменяются после установки прошивки, находятся в /overlay. При удалении файлов, изначально бывших в прошивке, mini_fo просто помечает их как удаленные, сами же файлы остаются в /rom и продолжают занимать место. Как SquashFS, так и JFFS2 используют сжатие, но SquashFS дает лучшую степень сжатия, поэтому помещение всех необходимых пакетов сразу в /rom дает прошивку меньшего размера. Исключение ненужных пакетов из прошивки также позволяет сэкономить столь драгоценное место на флешке.
alt


Слово factory в названии файла значит, что такой файл вы должны заливать на ваше устройство поверх заводской (родной) прошивки. файл со словом sysupgrade применим только для обновления OpenWRT, т.е. заливается после factory прошивки.

У нас стоит родная прошивка, значит нам нужно устанавливать прошивку с тегом factory.

Ниже представлена одна прошивка с разной аппаратной версией устройства, выбираем ту к которой принадлежит ваш роутер, для того что бы определить версию смотри Шаг 1:


Качаем factory прошивку и шьём обычным способом. Системные инструменты -> Резервная копия & Восстановление (System Tools -> Firmware Upgrade).

Настройка OpenWRT прошивки

Просто добавьте мяса или эмбеддинг по моде

Reading time9 min
Views33K

самая суть

С появлением доступных ARM и MIPS решений, на которые можно установить Linux или WinCE, любительский эмбеддинг вышел на качественно новый уровень(вообще он там давно был, но не в таких широких масштабах как сегодня). Появление таких массовых программных продуктов как Android, очень сильно популяризировало процессоры с не х86 архитектурой, открыло широкой общественности новые возможности в виде снижения цены на быстродействующее железо и обеспечило доступ к той информации, которая раньше распространялась исключительно после подписания NDA.
И всем вроде бы хороши .nix железяки: роутеры, Raspberry Pi и разные девайсы а-ля МК802. У многих они рулят производственными и домашними процессами, роботами и кофеварками. Но, низкая скорость реакции на внешнее воздействие, несколько ограничивает применение таких систем в эмбеддинге. Такими функциями, которые напрочь отсутствуют в подобного рода устройствах(имеется в виду ширпотреб, а не специализированные решения раз, два), могут быть ШИМ с аварийным отключением, скоростной PID регулятор, обработка квадратурного энкодера и многие-многие другие. Все эти вещи требуют известной степени реалтайма.

Краткое описание некоторых способов добавления мускулатуры, немного теории, личных размышлений и конечно, решение от меня под катом.
Читать дальше →

Information

Rating
3,176-th
Location
Россия
Registered
Activity