Модераторы: powerfox, ZeeLax

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> приложение реального времени, с чего начать 
:(
    Опции темы
boolean34
Дата 20.4.2012, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 1.11.2011

Репутация: нет
Всего: нет



спасибо всем большое! пойду разбираться и делать
PM MAIL   Вверх
rsm
Дата 20.4.2012, 19:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 999
Регистрация: 16.3.2005

Репутация: 3
Всего: 62



2boolean34: эх, давно ж не брал я в руки шашку! smile В своё время съел стадо собак именно на реальном времени в GNU/Linux. Помогу чем припомню smile

Итак, для начала краткое лирическое отступление. Следует сразу же сказать, что получить по-настоящему жёсткое реальное время с применением GNU/Linux на платформе х86 возможным не представляется. Поэтому если задача стоит именно такая, лучше сразу приступить к рассмотрению платных проприетарных решений. Мне, как соратнику Столлмана, больно и обидно говорить такое, но против фактов не попрёшь - из свободного и/или бесплатного ПО выбирать нечего. Продолжим.

Цитата(boolean34 @  17.4.2012,  10:15 Найти цитируемый пост)
работающий в режиме реального времени под управлением ОС Linux (расширение ядра)

Сразу же проведём черту относительно того, что разрабатывается - модуль ядра или прикладная программа? Ибо разница принципиальная!

Цитата(boolean34 @  17.4.2012,  14:59 Найти цитируемый пост)
беру ядро версии 3.0 скачиваю, что мне к нему прикрутить нужно, чтобы в итоге я имел пользовательский интерфейс

Опять же, смотря что разрабатывается. Для прикладной программы, работающей в режиме мягкого псевдо-реального времени, можно обойтись малой кровью, взяв стандартные RT-патчи и предельно "заточив" ядро под железо. Как именно - см. ниже. Если предполагается модуль ядра, то стоит присмотреться к RTAI - это набор из патчей ядра и библиотек прикладного уровня. Прелесть RTAI в том, что в неё входит набор драйверов реального времени для стандартных девайсов, например для RS-232 и некоторых сетевых карт. Драйвер пишется с использованием интерфейсов, предоставляемых RTAI. Ещё есть xenomai, но про него ничего толкового сказать не могу, ибо не юзал.

Цитата(boolean34 @  17.4.2012,  14:59 Найти цитируемый пост)
возможно ли применение готовых ОС

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

Цитата(boolean34 @  18.4.2012,  12:11 Найти цитируемый пост)
операционную систему с откликом на прерывание порядка десятка микросекунд

Исходя из практического опыта, получить такое время отклика при заданных условиях (GNU/Linux, x86) не реально. В силу причин как аппаратных, так и программных. К примеру, один только лишь RS-232 даёт время отклика порядка 5 мкс - и это из режима реального времени работы процессора и с запретом прерываний, т.е. когда программа выполняется полностью монопольно.

Цитата(boolean34 @  18.4.2012,  12:11 Найти цитируемый пост)
удобную IDE под С++ и библиотеки для создания прикладного приложения с развитым графическим интерфейсом

Можно выбирать что нравится, но разработка должна вестись, разумеется, на отдельной машине. На машине с ОС РВ не должно быть ничего лишнего (см. ниже).

Цитата(boolean34 @  18.4.2012,  12:11 Найти цитируемый пост)
отсутсвие проблем с коммутацией COM портов (стандарты RS 422/485)

С ними проблем не возникает, даже с самыми дешёвыми контроллерами.

Цитата(boolean34 @  19.4.2012,  10:51 Найти цитируемый пост)
хочется более-менее строго оценить вероятность, что если поток в программе, который отвечает за прием, получит команду принимать, то все "обычные" дела отходят в сторону и выполняется критичная задача. ??

Зависит от настроек - если всё сделать правильно, то программа берёт процессор в практически монопольное использование.

Цитата(boolean34 @  19.4.2012,  10:51 Найти цитируемый пост)
как лучше построить структуру программы: один процесс-много потоков, либо много процессов, каждый из которых соответствует определенному функциональному модулю ??

Очень сильно зависит от задачи. В любом случае не стоит забывать, что самыми тормозными местами становятся контроллеры ввода/вывода - сколько бы ни было ядер, потоков и процессов, единственная сетевая карта или контроллер RS-485 всё равно не смогут разделиться чтобы хватило на всех. Поэтому расклад примерно такой. Предположим, что у нас резервированная система, работающая по Ethernet, сиречь две сетевых карты в системе, по одной на канал. В таком случае можно либо запустить два экземпляра программы, отдав каждому по карте - если взаимодействия между каналами не предполагается. Если же требуется переключаться с канала на канал, лучше запустить один экземпляр программы и уже в нём - два потока, по одному на каждую сетевую карту.

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

Источник первый - аппаратное обеспечение. Архитектура х86 - худшая вещь, какую только можно придумать для РВ! Ибо в ней есть такие великолепнейшие грабли, как SMM, накорню зарубающий саму суть реального времени. Вкраце: что бы ни было запущено на машине, она в любой момент может на некоторое время "уснуть" по возбуждению SMI, и ни одна запущенная программа (включая ядро) этого даже не заметит. Выпилить SMM полностью или замаскировать SMI нельзя, можно только сильно заточить железо, отключив всё, потенциально генерирующее SMI. Список будет достаточно обширным:
- все системы управления питанием: ACPI, динамическое управление частотой процессора, управление кулерами и т.п.;
- все виды многоядерности (hyper-threading и пр);
- все неиспользуемые устройства;
- USB;
Далее, другой крайне неприятный баг - нестабильность системного таймера, т.е. нестабильность хода времени. Причём конкретное значение нелинейно и меняется от машины к машине. Чтобы обеспечить действительно надёжный ход времени, требуется:
- использовать железо, поддерживающее HPET (и, естественно, не забыть включить его поддержку в ядре);
- корректировать время по внешнему сигналу, подаваемому с генератора;
Например, подаём на один из сигнальных входов RS-232 прямоугольный сигнал частотой 10 Гц. В программе отлавливаем изменение состояния сигнала и соответственно подтягиваем ход времени внутри программы, которое считается RT-таймером. И не следует забывать, что внешние сигналы тоже могут пропадать. Следовательно, нужно грамотно проектировать алгоритм расчёта времени.

Источник второй - ПО. GNU/Linux изначально планировался как система для десктопов, для обычных людей, и достиг в этом немалых успехов. Однако для РВ он подходит слабо. Поэтому чтобы получить сколь-нибудь приемлемый результат, требуется:
- сразу же забыть о любой графике, даже о framebuffer: можно лепить гномокеды и кедогномы сколько угодно и куда угодно, но только не на машину РВ;
- убрать абсолютно все фоновые процессы кроме критически необходимых: именно поэтому я брал за основу Slackware, т.к. не в её привычках тащить с собой гору ненужного барахла и втихаря запускать чего вздумается в любых количествах, что обожают делать все т.н. user-friendly дистры;
- сразу же забыть о свопинге: в системах РВ свопинг не должен использоваться ни при каких условиях, никогда и нигде. свопинг следует выпилить из ядра и принудительно запретить из запускаемой программы;
- включить в ядре: вытесняющую многозадачность РВ (решается RT-патчами или RTAI), планировщик ввода/вывода поставить по-умолчанию на FIFO, установить системный таймер на максимальную частоту (1000 Гц или выше);
- выпилить из ядра абсолютно всё железо, которое отсутствует на данной конкретной машине или отключено в соответствии с приведёнными выше рекомендациями по настройке железа;
- выпилить из ядра абсолютно все не нужные и не используемые подсистемы - к примеру, SMP, гору файловых систем, фаервол и т.д. и т.п.;
- драйверы устройств в виде модулей ядра можно оставить только если важен порядок их инициализации - к примеру, сначала запускается контроллер RS-232, потом первая сетевая карта, потом вторая. для всех остальных нужных устройств драйверы лучше встроить внутрь ядра;

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

Получилось несколько сумбурно и, естественно, не в полном объёме. Однако, надеюсь, не без пользы smile

Это сообщение отредактировал(а) rsm - 21.4.2012, 03:41
PM MAIL   Вверх
boolean34
Дата 23.4.2012, 05:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 1.11.2011

Репутация: нет
Всего: нет



спасибо  большое за ценные советы! 
PM MAIL   Вверх
500mhz
Дата 23.4.2012, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 4
Всего: 14



А еше есть RTOS QNX )))


--------------------

PM MAIL ICQ   Вверх
rsm
Дата 23.4.2012, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 999
Регистрация: 16.3.2005

Репутация: 3
Всего: 62



Цитата(500mhz @  23.4.2012,  11:24 Найти цитируемый пост)
А еше есть RTOS QNX

Есть, и неплохо работает. Но у неё есть две очень злокозненные особенности:
а) QNX соответствует POSIX только частично: простой перенос исходников либо не компилится вообще, либо компилится прекрасно, но работает совсем иначе;
б) разработка под QNX это как жизнь в Австралии: практически все системные вызовы асинхронны, с точностью до наоборот относительно GNU/Linux;
Обе особенности вполне логичны, закономерны и объяснимы, если вспомнить, что QNX это ОС действительно РВ. Однако к ним требуется привыкнуть, всецело проникнуться ими и начать проектировать программы по иным принципам.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Linux/UNIX: Oбщие вопросы"
nickless
Imple
nerezus

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


  • Вопросы мобильной разработки тут
  • Вы должны соблюдать правила форума.
  • Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
  • Оскорблять запрещается.
  • Религиозные войны в Религиозных войнах.
  • Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.

За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).


В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.


Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.