|
Вопрос ламера по Linux IPC, Inter Process Comminications |
|
|
|
Jan 13 2006, 20:33
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892

|
Есть два процесса под Linux. Им надо обмениваться пакетами данных. Пакет представляет из себя: * заголовок - поле фиксированной длины * данные - поле переменой длины (<= MAX_LEN), заполненное бинарными случайными данными. Как лучше всего сделать такой обмен? Я удумал следующее. 1. Канал. Пишем, читаем. Но поскольку он имеет байтный интерфейс, при последовательном чтении непонятно, где начинается заголовок. Значит, придется вводить какие-то механизмы для его нахождения (Escape последовательности и пр.). Это не сложно, но совершенно лишнее действие в контексте решаемой задачи (нужно ее решить максимально быстро по программированию, расход памяти и процессорного времени не важен (в разумных пределах)). 2. Разделяемая память. Наделать там кучу семафоров, и обмениться указателями на структуры. 3. Гибрид  Делаем разделяемую память, а там - кольцевой массив структур. Каждая структура - это сообщение, данные пакета аппроксимированы массивом максимальной длины (пустые места в памяти не волнуют). 2 потока для каждого направления обмена. Передающий процесс пишет в поток send_msg char значение номера элемента в массиве, куда он положил пакет. Принимающий процесс пишет в поток msg_ask char значение номера элемента в массиве, который он прочитал (освободил). IMHO, так еще будет быстрее всего (нет лишнего копирования) и экономнее (по памяти) всего (нет памяти для лишних копий). Вероятно, я изобретаю велосипед. А что скажут Гуру по данному поводу?
|
|
|
|
|
 |
Ответов
(1 - 56)
|
Jan 14 2006, 11:43
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390

|
Если один процесс родительский, а второй его потомок - лучше использовать pipe. Если два независимых - то каналы FIFO. Кстати - каналы FIFO обеспечивают атомарные запись/чтение. Т.е. пакеты(кадры) не перемешиваются, в отличие например от передачи через TCP. Видимо это то что нужно. Для разделяемой памяти существует ограничение на количество блоков разделяемой памяти для процесса (что-то около 20, но это зависит от системы и ее настроек). Еще можно обмениваться через файлы, отображаемые в память. Лучшая книга - Уильям Стивенс Unix. Взаимодействие процессов Уильям Стивенс. Unix. Взаимодействие процессов
|
|
|
|
|
Jan 14 2006, 13:03
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(psL @ Jan 14 2006, 13:43)  Если один процесс родительский, а второй его потомок - лучше использовать pipe. Если два независимых - то FIFO. Кстати - FIFO обеспечивает атомарные запись/чтение. Т.е. пакеты(кадры) не перемешиваются, в отличие например от передачи через TCP. Видимо это то что нужно. ..... Еще можно обмениваться через файлы, отображаемые в память. 1. Pipe и FIFO суть одно и то-же и работают одинаково. И оба исключительно НЕ пакетные - не сохраняют границ сообщений (вспоминаем о чем речь шла). FIFO принадлежность System-V базирующихся систем и в линейке BSD не используются по причине нахренненужности. 2. Ну не надо сюда TCP приплетать и пугать "перемешиванием" путая его с повтором. 3. FIFO как раз и есть файл "отображаемый на память", как и сокет при адресации AF_UNIX.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 14 2006, 14:53
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(psL @ Jan 14 2006, 15:56)  > 1. Pipe и FIFO суть одно и то-же и работают одинаково. Не одно и то же, хотя бы с точки зрения того, что я говорил выше. Выше вы говорили, что: Цитата Кстати - каналы FIFO обеспечивают атомарные запись/чтение. Т.е. пакеты(кадры) не перемешиваются Продолжаю утверждать, что с этой точки зрения отличий Pipe и FIFO НЕТ НИКАКИХ. Цитата > И оба исключительно НЕ пакетные - не сохраняют границ сообщений (вспоминаем о чем речь шла). pipe возможно, насчет FIFO не уверен. Поскольку с FIFO могут работать и несколько процессов. ????? Цитата Разговор вроде был о Linux, а не о фрях. Речь идет о многочисленных последователей вышеупомянутых. BSD Socket предоставляет продуманный унифицированый интерфейс. По этой причине присутствует повсеместно, в отличие от FIFO. Цитата я имел ввиду, что TCP - не гарантирует сохранения границ пакетов. И это утверждение тоже ложное. TCP/IP/UDP пакетные по определению. По условиям канала передачи могут биться на более мелкие, но доставляются пользователю исключительно монолитными. Цитата С точки зрения реализации - наверное да, но все-таки это разные механизмы IPC. Что значит разные? Тогда уточите, что Вы понимаете под "можно обмениваться через файлы, отображаемые в память" и реализации сего действия.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 14 2006, 16:01
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390

|
Цитата(zltigo @ Jan 14 2006, 17:53)  ????? Имелось ввиду что: Для канала дочерний процесс может получть дескриптор только от процесса родителя. Каналы не могут использоваться в качестве IPC между независимыми процессами. Очередь FIFO - отдельный тип файла в файловой системе, со всеми вытекающими. Не используются в BSD. Вообще, много чего разного, при похожести в первом приближении. Запись числа байтов, меньше емкости FIFO или канала гарантированно атомарна. Это означает, что в случае, когда несколько процессов одновременно записывают в канал, порции данных от этих процессов не перемешиваются. Если размер пакета больше емкости канала или FIFO - атомарность не гарантируется. Не верите - спросите у Робачевского и Ко.  Цитата Цитата я имел ввиду, что TCP - не гарантирует сохранения границ пакетов.
И это утверждение тоже ложное. TCP/IP/UDP пакетные по определению. По условиям канала передачи могут биться на более мелкие, но доставляются пользователю исключительно монолитными. В смысле прикладных пакетов, которые пользователь посылает. Подразумевалась вроде работа на прикоадном уровне? Прикладной уровень не всегда может забрать свой пакет полностью. Небольшим пакетам (по-моему до 8 КБ) это кстати не грозит - я же сказал пример неудачный. Цитата Цитата С точки зрения реализации - наверное да, но все-таки это разные механизмы IPC.
Что значит разные? Тогда уточите, что Вы понимаете под "можно обмениваться через файлы, отображаемые в память" и реализации сего действия. В nix вообще идеологически все построено на файлах. С этой точки зрения и каналы FIFO, и локальные сокеты, и совместно используемые "файлы, отображаемые в память" (ну не помню я как этот тип IPC правильно называется  ) суть одно и то же. Но есть тонкости, которые определяющие - Поэтому один механизм IPC называется так, а другой эдак. Кстати реализация BSD сокетов в каких либо облегченных версиях Linux тоже не совсем обязательно присутствует. Если я в чем-то и ошибаюсь - всему виной моя недостаточная осведомленность. Всех благ!
Сообщение отредактировал psL - Jan 15 2006, 09:45
|
|
|
|
|
Jan 14 2006, 20:54
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Harbour @ Jan 14 2006, 21:04)  Я так и не понял - процессы на одной машине ? В смысле нафига IPC заворачивать ? 1. За тем, что процессы изолированы во многих OC. 2. IPC для этого в OC и создаются, причем с учетом минимизации побочных эффектов. 3. Ну а в предложенной (к делу не относящейся реализации) рассчитывать на то, что DEADBEEF не встретится, и синхронизироваться ценой потери нескольких фреймов, конечно можно....., но радиолюбительство. Простейший надежный вариант формирования фрейма в байтовом потоке, например, в SLIP протоколе.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 15 2006, 06:23
|
Частый гость
 
Группа: Свой
Сообщений: 102
Регистрация: 11-10-04
Пользователь №: 849

|
Цитата я имел ввиду, что TCP - не гарантирует сохранения границ пакетов. И это утверждение тоже ложное. TCP/IP/UDP пакетные по определению. По условиям канала передачи могут биться на более мелкие, но доставляются пользователю исключительно монолитными. [quote] Я уже кучу денег заработал исправляя программы которые пользуются TCP/IP как пакетным протоколом. (Особенно wireless) Вот выдержка из RFC которая прямо об этом и предупреждает. ------------------------------------------ As for your second issue, please remember the admonition in RFC 1123: " 4.1.2.10 Telnet End-of-line Code: RFC-959, Page 34 " Implementors MUST NOT assume any correspondence between READ boundaries on the control connection and the Telnet EOL sequences (CR LF). " DISCUSSION: " Thus, a server-FTP (or User-FTP) must continue reading characters from the control connection until a complete Telnet EOL sequence is encountered, before processing the command (or response, respectively). Conversely, a single READ from the control connection may include more than one FTP command."
|
|
|
|
|
Jan 15 2006, 11:34
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(alexr22b @ Jan 15 2006, 08:23)  И это утверждение тоже ложное. TCP/IP/UDP пакетные по определению. По условиям канала передачи могут биться на более мелкие, но доставляются пользователю исключительно монолитными. Цитата Вот выдержка из RFC которая прямо об этом и предупреждает. 4.1.2.10 Telnet End-of-line Code: RFC-959, Page 34
Сначала к проблеме передачи пакета прицепили ни к селу ни к городу TCP/IP уровень, потом на него навернули Telnet протокол и его паковку байтов в пакеты.... Для кучи приплели радиоканал.... Перестаньте пожалуйста морочить голову.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 15 2006, 20:01
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892

|
Цитата(nazim @ Jan 15 2006, 22:18)  ...Я для этой цели использовал простой "самодельный" протокол: ----- 02 байта тип пакета 02 байта длина данных хх Данные ----- Пакеты садятся в буффер, первый пакет "выдёргивается", всё остальное сдвигается к началу + проверки. На первый взгляд, довольно нудно парсить, но как показала практика способ удобный. Позволяет легко разделять "слипшиеся" пакеты (TCP NODELAY не везде работает). Проверяется всего один сокет (всего один вызов select())... Думал я об этом. Вроде препятствий нет - TCP должен по идее гарантировать: * доставку байтов * сохранениех их порядка * отсутствие дупов Парсер, кстати, простой и удобный получается (по памяти у меня ограничений особых нет). Есть кольцевой буфер - указатели за ячеку массива. Есть массив структур - это наши сообщения. Приняли как описано - засунули в структуру (данные апроксимируем массивом максимальной длины). "Провернули" буфер указателей. Обработчики пакетов с другой стороны "проворачивают буфер" и разбираются с содержимым структуры. Один трабл - синхронность запуска и остановки процессов. В варианте разных машин это може быть не так примитивно. Вероятно, надо сделать гибрид. Ввести все таки контрольный сокет, по нему буквально однобатный обмен: типа приняли 0x55 - вычитали сокет до конца, выкинули эти данные, обресетили state machine и начали все сначала. В ответ по контрольному сокету можно 0xАА кинуть - типа обресетился, готов.  За идею!
|
|
|
|
|
Jan 15 2006, 22:08
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390

|
Вообще-то для обеспечения прозрачности передаваемых данных существует такое дело как байтстаффинг: договариваются о некотором управляющем символе, присутствие которого означает, что следующий за ним символ - команда. Если следующий символ - также управляющий символ, значит эти два символа интерпретируются как один символ данных равный управляющему символу. Немного сумбурно написал, но смысл такой: 0x10 0x12 - управляющий символ 0x10, команда 0x12(смысл которой например начало или конец пакета) 0x10 0x10 - данные 0x10 В качестве управляющего символа естественно лучше всего брать наименее вероятный в потоке данных. Собственно нечто подобное в SLIP и реализовано. Ну так вот при перемещении фрагмента кадра в кольцевой буфер этот байтстаффинг и делается. При этом кольцевой буфер является именно [b]кольцевым буфером символов[b], а не кольцевым буфером кадров/пакетов. Для обработки пакетов при копировании из буфера сокетов в буфер символов создается управляющая структура типа Код typdef struct frame { ...всякие полезности...
size_t head_len; // длина поля заголовка(при необходимости) char* phead; // указатель на заголовок size_t data_len; // длина поля данных(при необходимости) char* pdata; // указатель на данные ...другие всякие полезности...
} frame; которая ставится в очередь и после обрабатывается в фоновом потоке. Удачи!
|
|
|
|
|
Jan 15 2006, 23:05
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Evgeny_CD @ Jan 15 2006, 23:51)  Цитата(zltigo @ Jan 16 2006, 00:36)  Обалдеть. А можно узнать, от чего? Если я какое ламерство написал - поянилите, плиз! Все-таки, сокеты сохраняют границы пакетов или нет? Я в литературе пока информации о сохранении границ не нашел. 1. Да я много написал. Потом оставил одно слово. В общем Вам пора практикой заняться. И чем быстрее, тем лучше. А чужие книги, статьи, идеи - относитесь к ним более критично. Написание книг это бизнес. И другой, нежели проектирование, бизнес. 2. По конкретному вопросу о сохранении (если естественно не SOCK_STREAM )- сохраняют, для этого и делалось. Отвечать за отсутствие ГРУБЕЙШИХ ошибок в многочисленных реализациях я естественно не могу, но СОХРАНЯЮТ. 3. Использование TCP уровня взамодействия в пределах одной машины перебор. TCP имеет смысл при работе именно черт знает через что (этому определению безхозный интернет полностью соответствует ). Плата за "гарантированую доставку" _полная_ потеря реального времени и потеря произвольного (но порядка десятков килобайт) количества пакетов до получения хоть какого-то намека на развал соединения. В принципе вышеописанное не является "родовым пятном", просто реализации в 'больших системах' (линукс, вынь) давно плюют на обработку ошибок транспортного уровня и ограничиваются (в лучшем случае) только фиксацией факта для статистики. Производители железок тоже пошли по этому (пусть с проблемами протоколы высокого уровня разбираются) пути. Правда такая ситуация породила и рынок альтернативных стеков и самодельных надстроек над UDP или RAW. Лично я пользуюсь для встроенных систем самообжитым IP стеком с обработкой аппаратных ошибок, что при работе в _локальной_ сети с _правильным_ железом хабов/свичей позволяет без потерь доставлять UDP датаграммы. При необходимости более жесткого реального времени, большей простоты (со строны контроллера) и меньшей непредсказуемости конкретной реализации IP стека и драйверов на "больших" машинах - пользуюсь самодельным протоколом на фрейме IEEE 802.3 по мотивам IEEE 802.2. Со стороны "больших" реализуется как надстройка над RAW Socket.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 15 2006, 23:32
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892

|
Цитата(zltigo @ Jan 16 2006, 02:05)  ...В общем Вам пора практикой заняться. И чем быстрее, тем лучше. А чужие книги, статьи, идеи - относитесь к ним более критично. Написание книг это бизнес. И другой, нежели проектирование, бизнес... Верно! Но за два вечера, проведенных в этом топике, я узнал столько, сколько, вероятно, не узнал бы и за неделю кодинга. Так что "стартовый пинок" я получил, за что всем большой Но я несколько опечалился.  Неужели разные "BSD-Like" стеки так сильно отличаются друг от друга? Все-таки сохранять или не сохранять границы юзеровских пакетов - это фундаментальное отличие. Я думал в этой области все давно вылизано, и царит полнейшая гармония. Весь кайф испортился.
|
|
|
|
|
Jan 15 2006, 23:55
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Evgeny_CD @ Jan 16 2006, 01:32)  Все-таки сохранять или не сохранять границы юзеровских пакетов - это фундаментальное отличие. Я думал в этой области все давно вылизано, и царит полнейшая гармония. Весь кайф испортился.  Я НЕ ВСТРЕЧАЛ и ДУМАЮ НЕ ВСТРЕЧУ такого безобразия - это ФУНДАМЕНТ. Все мои замечания по этому поводу относятся только к тому что где-то кто-то что-то видел/слышал и по этой причине решил добавить в механизм еще свою спичечку привязав ее веревочкой... Для _высокоуровневых_ протоколов в массовых серьезных операционках - можете считать, что царит гармония. За поведение многочисленых "микроконтроллерных" стеков сделанных кем-то для использования в каких-то определеных условиях при использовании изделия в других РАЗНООБРАЗНЫХ условиях отвечать просто НЕВОЗМОЖНО. Ну и еще замечание - если собираетесь базироваться на на *NIX ообразной открытой операционке для чего либо не являющегося настольной машиной с иксами - обратите свой взор в сторону FreeBSD. Ее по крайней мере делает поименованый управляемый коллектив. Цитата Верно! Но за два вечера, проведенных в этом топике, я узнал столько, сколько, вероятно, не узнал бы и за неделю кодинга. Это не Ваши знания :-( они разрознены и противоречивы местами. Дальше что? Монетку кидать? На здравый смысл уповать? На книжку ссылаться? Только практика критерий истины. И еще Ваш подход (это я базируясь на надбюдениях за другими темами) к делу поражает немалым размахом. Такая организация дела несомненно работает и по своему эффективна, но в БОЛЬШИХ коллективах (ну начиная с полусотни разработчиков и прочего персонала на проект) с изрядным финансированием, для содержания оных. Это Ваш случай? Если нет, то все Ваши усилия на поддержание "установленного порядка" сожрут все ресурсы разработчиков.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 16 2006, 00:49
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892

|
Цитата(zltigo @ Jan 16 2006, 02:55)  Ну и еще замечание - если собираетесь базироваться на на *NIX ообразной открытой операционке для чего либо не являющегося настольной машиной с иксами - обратите свой взор в сторону FreeBSD. Ее по крайней мере делает поименованый управляемый коллектив. Эта мысли меня уже посещала. Но стремно: * спецов по BSD очень мало * книжек тоже, хотя несколько книжек я уже утащил * книжек по NetBSD вообще нет (я не нашел). По иее это самый что ни на есть embedded BSD * хочется иметь ту же самую платфому на писюке и embedded девайсе. Хотя бы пока я учусь. Потом, очень даже возможно, будут перепрыгивать на BSD. Цитата(zltigo @ Jan 16 2006, 02:55)  Это не Ваши знания :-( они разрознены и противоречивы местами. Дальше что? Монетку кидать? На здравый смысл уповать? На книжку ссылаться? Только практика критерий истины. И еще Ваш подход (это я базируясь на надбюдениях за другими темами) к делу поражает немалым размахом. Такая организация дела несомненно работает и по своему эффективна, но в БОЛЬШИХ коллективах (ну начиная с полусотни разработчиков и прочего персонала на проект) с изрядным финансированием, для содержания оных. Это Ваш случай? Если нет, то все Ваши усилия на поддержание "установленного порядка" сожрут все ресурсы разработчиков. 1. На умении выуживать знания из противоречивых данных и мнений я всю свою сознательную жизнь живу. Надеюсь, эта функция моего BIOS меня не подведет и сейчас.  Главное, чтобы подсознание отработало. Я не будут завтра кодить сокеты. Но через пару недель, когда я этим займусь, у меня уже будет некая система реперных точек, которя сработает в нужный момент. Опытный факт, что мне это сэкономит массу времени и сил. 2. Замах большой, это так. И колектива 50 девелоперов (вместе с бюджетом) тоже нет. Но с годами я дозрел до практики downgrade. Т.е. когда задача осмысливается целиком, начиная с верхнего уровня. Потом я рисую схему сущностей проекта (листов 30 А4), и делаю безжалостную кастрацию всей красоты, оставив ГЛАВНОЕ, и "крючки" для навешивания всего остального. Потом выдаю lite версию девелоперам, и постепенно это становится философией команды. И когда новички приходят - их есть чем учить. В ходе длительных размышлений за последние полгода мне удалось нашупать контуры новой среды разработки. Там не так важен сокетный протокол, и даже embedded ось не так важна (а вот синтетически порт под Linux важен принципиально!), и важна именно идеология декомпозиции задачи и обеспечения связи между компонентами. 3. Дьявол таится в деталях. Я не сомневаюсь в этом! И проблем будет масса! Лично для меня важно понимать, что именно надо делать (иметь некое объектно-ориентированное мышление применительно к целевой задаче, когда важны методы , а вот конкретный "экземпляр класса" выстраивается по ситуации), а с самим деланием потихоньку разберемся. Мир не без добрых людей. Спасибо Вам за Ваши ценнейшие замечания!
|
|
|
|
|
Jan 16 2006, 01:16
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Evgeny_CD @ Jan 16 2006, 02:49)  Эта мысли меня уже посещала. Но стремно: * спецов по BSD очень мало * книжек тоже, хотя несколько книжек я уже утащил * книжек по NetBSD вообще нет (я не нашел). По иее это самый что ни на есть embedded BSD * хочется иметь ту же самую платфому на писюке и embedded девайсе. Хотя бы пока я учусь. 1. Ну по большому счету их под Линукс мало, если не считать спецов уровня "инсталляторов Windows". Массовые программисты разницы ПРОСТО НЕ ПОЧУВСТВУЮТ. Ну разбираться в железках/драйверочках (впрочем помнится с железом проблем к Вас не предвидится) в BSD заметно приятнее. 2. Ну книжки... С простыми вопросами и без них разберетесь, а готового рецепта выхода из сложной ситуации Вы в них не найдете - НЕ ДЛЯ ЭТОГО ИХ ПИШУТ. А исходники BSD много читабельнее, нежели то болото в которое превратились многочиленные Линуксы. 3. А может просто возьмете "кувалду побольше" (помнится я уже намекал на SOM-144, например) и получите без проблем с портированием (и сопровождением оного) почти одинаковые системы. Причем, если Вы полагаете, что если на десктопе и на какой-нибудь железке с ARM9 будет одна операционка по причине того, что там и там она спекулирует раскрученным словечком Линукс, то это совсем не так :-( Сколько там контроллеров с 'линуксом' в год предполагается выбрасывать на рынок?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 16 2006, 01:31
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892

|
Цитата(zltigo @ Jan 16 2006, 04:16)  1. Ну по большому счету их под Линукс мало, если не считать спецов уровня "инсталляторов Windows". Массовые программисты разницы ПРОСТО НЕ ПОЧУВСТВУЮТ. Ну разбираться в железках/драйверочках (впрочем помнится с железом проблем к Вас не предвидится) в BSD заметно приятнее. 2. Ну книжки... С простыми вопросами и без них разберетесь, а готового рецепта выхода из сложной ситуации Вы в них не найдете - НЕ ДЛЯ ЭТОГО ИХ ПИШУТ. А исходники BSD много читабельнее, нежели то болото в которое превратились многочиленные Линуксы. 3. А может просто возьмете "кувалду побольше" (помнится я уже намекал на SOM-144, например) и получите без проблем с портированием (и сопровождением оного) почти одинаковые системы. Причем, если Вы полагаете, что если на десктопе и на какой-нибудь железке с ARM9 будет одна операционка по причине того, что там и там она спекулирует раскрученным словечком Линукс, то это совсем не так :-( Сколько там контроллеров с 'линуксом' в год предполагается выбрасывать на рынок? Конечно, оси на дектопе и контроллере будет разные. Но, если у них одинаковые версии ядра, то базовые интерфейсы, по идее, должны совпадать. Я собственно, на это и надеюсь. SOM-144 - привлекательная вещь, я про них очень хорошо помню, и цены не очень безумные. Но я пока на нашел их Industrial, и, боюсь, цены там как раз будут неразумные. Для прототипов, где мне будут нужны x86, буду использовать это http://www.icop.com.tw/products_category.asp?CategoryID=2По моим оценками Intel PXA270 600 Мгц мне должно хватить на ближайщие проекты на несколько лет вперед. Но хочется иметь позможность "спуска вниз", посему попробую все-таки целевой осью сделать eCos. Собственно, будет использован аналог SOM-144 от http://www.toradex.com/e/Products_Colibri_..._Pentium_M.htmlКонтроллеров будет от 100 до 1к в год - как дело пойдет. Ядро по исходникам изучать пока не готов
|
|
|
|
|
Jan 16 2006, 09:35
|

Местами Гуру
    
Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323

|
Цитата(zltigo @ Jan 14 2006, 22:54)  Цитата(Harbour @ Jan 14 2006, 21:04)  Я так и не понял - процессы на одной машине ? В смысле нафига IPC заворачивать ?
1. За тем, что процессы изолированы во многих OC. 2. IPC для этого в OC и создаются, причем с учетом минимизации побочных эффектов. 3. Ну а в предложенной (к делу не относящейся реализации) рассчитывать на то, что DEADBEEF не встретится, и синхронизироваться ценой потери нескольких фреймов, конечно можно....., но радиолюбительство. Простейший надежный вариант формирования фрейма в байтовом потоке, например, в SLIP протоколе. 1-2 Тут есть много вариантов. 3. Синхронизация происходит ценой потери _одного_ неполного, на момент подключения к каналу, фрейма.
Сообщение отредактировал Harbour - Jan 16 2006, 09:39
|
|
|
|
|
Jan 16 2006, 10:51
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Harbour @ Jan 16 2006, 11:35)  3. Синхронизация происходит ценой потери _одного_ неполного, на момент подключения к каналу, фрейма. Это если Вы всегда, постоянно ищите помянутое 4x байтовое магическое значение и тем самым начисто исключаете его наличие в потоке для других целей. Но мне помнится там у Вас еще и размер поминался? Из чего я сделал вывод, что внутри фрейма указанного размера магическое значение НЕ ищется.. А иначе зачем размер еше гонять? Считаем: 1. Потеряли байтик - потеряли первый фрейм 2. Не нашли в ожидаемом месте магическое значение - начинаем искать - теряем второй фрейм 3. Встретилось нештатное магическое значение - продолжаем терять... Естественно, ценой хранения предыдущего фрейма можно выкрутиться с п.2, но цена выкрутиться будет еще и всплеск затрат времени в ранее гладком алгоритме (а байтики то об этом не знают и продолжают идти..., что в некоторых случаях (речь не про сокеты) может потребовать еще и буфера для сырого потока). В случае c байт/бит стаффингом всегда имеем простой алгоритм с абсолютно предсказуемыми максимальными затратами времени на выделение фрейма и отсутствие необходимости в дополнительных буферах для запоминания чего-либо на случай проблем. Может оказаться немаловажным и тот факт, что имеем ВСЕГДА одинаково БЕЗ ИСКЛЮЧЕНИЙ работающий алгоритм, а в случае с волшебными словами еще придется писать и тестировать ветки поведения при ошибках. Это конечно не "бином Ньютона", но ошибиться можно :-( а оно это надо?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 16 2006, 11:08
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Evgeny_CD @ Jan 16 2006, 03:31)  SOM-144 - привлекательная вещь, я про них очень хорошо помню, и цены не очень безумные. Но я пока на нашел их Industrial, и, боюсь, цены там как раз будут неразумные. Для прототипов, где мне будут нужны x86, буду использовать это http://www.icop.com.tw/products_category.asp?CategoryID=2Контроллеров будет от 100 до 1к в год - как дело пойдет. Ядро по исходникам изучать пока не готов  Цены для моего случая - порядка 300 в год просто безвариантно привлекательнее самоделки, для 1000, полагаю тоже. Тем более, что никто самоделку потом поставить не запретит. На счет Industrial (отсутствия???) чего-то не понял... Цитата Ядро по исходникам изучать пока не готов  Ну а по книжкам! :-) Примерно в 2000 году на русском языке были изданы (DiaSoft помнится) две книжки, что-то типа "Ядро Linux в комментариях" и "IP стек в комментариях". Уровень софта вполне соответствует ныешнему контроллерному. Может увлечет чтение? У меня обе есть в бумажном варианте (только не под рукой) при необхобходимости могу дать полные выходные данные.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 16 2006, 11:16
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892

|
Цитата(zltigo @ Jan 16 2006, 14:08)  ...На счет Industrial (отсутствия???) чего-то не понял... -40 град С. Цитата(zltigo @ Jan 16 2006, 14:08)  ...Примерно в 2000 году на русском языке были изданы (DiaSoft помнится) две книжки, что-то типа "Ядро Linux в комментариях" и "IP стек в комментариях". Уровень софта вполне соответствует ныешнему контроллерному. Может увлечет чтение? У меня обе есть в бумажном варианте (только не под рукой) при необхобходимости могу дать полные выходные данные. Книжи эти я видел в каталогах, их уже не купить. У меня сейчас есть много увлекательного чтива  Все охватить не в состоянии. Видимо, будет взят байт стаффинг, и написан простой протокол на его основе. Тогда вообще все универсально получится - хоть по COM порту гони, хоть по сокетам. Я как-то сразу не оценил привлекательность байт стаффинга. Ну а то, что в худшем случае, когда в данных будут идти подряд одни ctl символы, трафик удвоится - меня не сильно волнует.
|
|
|
|
|
Jan 16 2006, 11:31
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Evgeny_CD @ Jan 16 2006, 13:16)  Видимо, будет взят байт стаффинг, и написан простой протокол на его основе. Тогда вообще все универсально получится - хоть по COM порту гони, хоть по сокетам. Излишество :-) в качестве физического интерфеса за Socket естественно может выступать и COM порт со штатной для операционки поддержкой SLIP/PPP. Вы уж определяйтесь - либо "большая" операционка со всеми ее достоинствами (ну и недостатками которые придется принимать и любить, как родные ) либо более самодельное с соответствующими достоинствами. Смешивать, пожалуй, это порочный путь.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 16 2006, 17:55
|

Местами Гуру
    
Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323

|
Цитата(zltigo @ Jan 16 2006, 12:51)  Цитата(Harbour @ Jan 16 2006, 11:35)  3. Синхронизация происходит ценой потери _одного_ неполного, на момент подключения к каналу, фрейма.
Это если Вы всегда, постоянно ищите помянутое 4x байтовое магическое значение и тем самым начисто исключаете его наличие в потоке для других целей. Но мне помнится там у Вас еще и размер поминался? Из чего я сделал вывод, что внутри фрейма указанного размера магическое значение НЕ ищется.. А иначе зачем размер еше гонять? Считаем: 1. Потеряли байтик - потеряли первый фрейм 2. Не нашли в ожидаемом месте магическое значение - начинаем искать - теряем второй фрейм 3. Встретилось нештатное магическое значение - продолжаем терять... Естественно, ценой хранения предыдущего фрейма можно выкрутиться с п.2, но цена выкрутиться будет еще и всплеск затрат времени в ранее гладком алгоритме (а байтики то об этом не знают и продолжают идти..., что в некоторых случаях (речь не про сокеты) может потребовать еще и буфера для сырого потока). В случае c байт/бит стаффингом всегда имеем простой алгоритм с абсолютно предсказуемыми максимальными затратами времени на выделение фрейма и отсутствие необходимости в дополнительных буферах для запоминания чего-либо на случай проблем. Может оказаться немаловажным и тот факт, что имеем ВСЕГДА одинаково БЕЗ ИСКЛЮЧЕНИЙ работающий алгоритм, а в случае с волшебными словами еще придется писать и тестировать ветки поведения при ошибках. Это конечно не "бином Ньютона", но ошибиться можно :-( а оно это надо? Поиск маджика происходит в _остутствии_ синронизации, потом только проверка, то что описано у Вас это просто бездарная реализация, человеческий алгоритм приблизительно таков - реализуем peek_data(int len, char *buf) и read_data(int len, char *buf) 1. peek(sizeof маджик)) - не он - скипаем байт, goto 1 2. он -ждем заголовок пакета, он у нас стандартной длины, проводим проверки (можно проверить валидность поля длины, црц и т.д.) и если проверка не прошла скипаем sizeof(magic), goto 1 3. проверка прошла - ждем данные - проверяем црц - не совпала - скипаем sizeof(magic), goto 1 4: синхронизация установлена И того теряем хвост 1 неполного пакета - устойчивость приема, в худшем случае (когда поток из одних маджиков например) определяется только качеством ф-ции црц Буфер для сырого потока и так придется делать - где ж Вы выделенный фрейм хранить-то будете, разве что совсем примитивная задача. Временные затраты одни и те-же, а удобство пакетов очевидно - в их гибкости и уже произведенной работе по отделению мух от котлет, то бишь определению типа пакета и факта наличия/отсутствия данных - а вашем случае структурка оборачивается ненужными вставками. Стаффинг имеет смысл (т.е. обмен будет быстрее) только при фреймах одинаковой длины и/или для выделения синхры.
|
|
|
|
|
Jan 17 2006, 15:56
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892

|
Цитата(zltigo @ Jan 16 2006, 14:31)  Излишество :-) в качестве физического интерфеса за Socket естественно может выступать и COM порт со штатной для операционки поддержкой SLIP/PPP. Вы уж определяйтесь - либо "большая" операционка со всеми ее достоинствами (ну и недостатками которые придется принимать и любить, как родные ) либо более самодельное с соответствующими достоинствами. Смешивать, пожалуй, это порочный путь. Согласен! Просто я немного изменил начальные условия. Для решения целевой задачи мне надо оцифровывать входной сигнал с относительно высокой скоростью - 20кгц. 8 бит. Далее первичная обработка: выделение границ битов (на амплитудной шкале), перевод в битовый поток, привязка блока битов к GPS времени, и передача в основную Линух систему для серьезной обработки. Понятно, что если я на ARM920 200 Мгц ядре забубеню 20 кгц интеррапты под Линухом, тот тут все быстродействие системы и кончится. Можно и ДМА прикрутить, но все равно останется довольно заметный объем низовых вычислений. Хочется освободить от этого основное ядро системы. Я всю первичную обработку загоню в какой-нибудь LPC2138 (ресурсов по процу и памяти как раз хватит), а вот подготовленный данные буду гнать по RS-485 в Linux машику. Как я уже описывал ранее, разработка будет идти "сверху", т.е. до оцифровки реального сигнала дело дойдет не очень скоро. Все будет отлаживаться на симуляторе, который и будет создавать все необходимые мне "входные сигналы". Просто хочется иметь один и тот же протокол, чтобы потом не пришлось переписывать. Понятно, что для TCP сокета байт стаффинг- странное решение. Но он мне даст полную универсальность - могу симулятор запустить на той же машине, где идет отладка, могу на другой (возможно, симулятор будет очень крутым по необходимой вычислительной моще), когда дело дойдет до контроллера - просто будут читать tty как файл. Еще раз большое спасибо всем, кто потратил время на мое просвещение!!!
Сообщение отредактировал Evgeny_CD - Jan 17 2006, 15:56
|
|
|
|
|
Jan 17 2006, 20:56
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892

|
Цитата(Harbour @ Jan 17 2006, 23:21)  ...Даже такой отторможенный арм как 920 должон легко взять планку в 20-50 кгц, см. adeos/xenomai latency test/examples... То, что он возьмет такую панку, я и не сомневаюсь! Вопрос в том, чтобы от производительности проца осталось хоть немного для целевой задачи, а не только на системщину. Обработка входных данных алгоритмически проста, но вычислений немало. В то же время, LPC2138 под управлением замечательной ОСи BigLoop все это сделает точно. И тогда под Linux с могу спокойно писать обработку верхнего уровня - которая как раз алгоритмически сложна, хотя объем вычислений там невелик. И я смогу написать все это, заботясь о простоте и красоте кода, и не очень думать производительности.
|
|
|
|
|
Jan 18 2006, 03:14
|
Знающий
   
Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644

|
Цитата(_artem_ @ Jan 15 2006, 19:37)  Vikladivayu knizku na /upload/doc/Unix_Linux_books :
Interprocess Communications in Linux®: The Nooks & Crannies By John Shapley Gray Папка есть, а где же книга? То есть, где она в /pub/? Нашел: /pub/DOC/Books/OS/Unix_linux/Interprocess_Communication_in_Linux.chm. Спасибо makc и _artem_!
|
|
|
|
|
Jan 26 2006, 12:57
|
Участник

Группа: Новичок
Сообщений: 65
Регистрация: 18-11-05
Пользователь №: 11 054

|
> оцифровывать входной сигнал с относительно высокой скоростью - 20кгц. 8 бит.
вы имеели в виду оцифровку видеосигнала? или я не понял почему эта скорость высокая.
|
|
|
|
|
Jan 26 2006, 14:02
|
Участник

Группа: Новичок
Сообщений: 65
Регистрация: 18-11-05
Пользователь №: 11 054

|
А вы не пробовали поискать девкиты работающие под QNX? если конечно построение распределённой системы не есть ваша конечная цель, то в пределах одного проца решать задачи всегда лучше. Стандартный линукс не осилит прерывания 20КГц, а QNX - вполне.
|
|
|
|
|
Jan 26 2006, 14:27
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892

|
Цитата(zaratustra @ Jan 26 2006, 17:02)  А вы не пробовали поискать девкиты работающие под QNX? если конечно построение распределённой системы не есть ваша конечная цель, то в пределах одного проца решать задачи всегда лучше. Стандартный линукс не осилит прерывания 20КГц, а QNX - вполне. ...ь любой софт - не проблема. Найти правильное решение - вот проблема. Я тщательно изучал вопрос полгода и пришел к выводу, что для моих задач (вероятно, и для многих других задач) вместо того, чтобы решать вопрос о том, какая полуOS/полумух потянет 20 Кгц прерывания, гораздо правильнее поставить ATmega48 за 1.2$, оцифровывать там, кучковать данные в пакеты, приписывать к каждому пакету метку реального времени, и загонять эти данные в *nix контроллер по стандартному интерфейсу (RS, Ethernet, CAN, ...). В правильной *nix системе затраты процессорного времени на блочный IO по стандартным каналам невелики, а что касается "решать задачи всегда лучше" - понятно, что на том же линухе приятнее программить, чем под uCOS. Что касается аппаратуры - AT91RM9200 просто гениальный проц со своей кучей коммуникационных контроллеров и DMA. К нему можно подцепить десяток этих ATmega48 вообще без проблем и лишней аппапаратуры (хотя, сказать по честному, AT91SAM7S32 за 4$ со своим SSC и DMA подходит куда лучше)  А вот заниматься поиском ответа на вопрос: "Какая высокоуровневая OS потянет 200 Кгц прерывание?" и "4ГГц процессора хватит для этого?" я просто принципиально не буду.
|
|
|
|
|
Jan 27 2006, 08:34
|
Участник

Группа: Новичок
Сообщений: 65
Регистрация: 18-11-05
Пользователь №: 11 054

|
Вам виднее, кто кроме вас вашу задачу знает? Если необходим именно десяток удалённых процессоров и система не может быть спроектирована в рамках одного, то конечно же вы правы. Но если вы хотите синхронизировать все эти процессы при помощи linux ipc на десятках килогерц, то возможно вы не сможете так решить свою задачу. Реалтайм (или близкие) синхронизации в qnx на мой взгляд выполнить удобнее. Спорить конечно не имеет смысла, в этом вы тоже правы.
|
|
|
|
|
Jan 27 2006, 10:17
|
Участник

Группа: Новичок
Сообщений: 65
Регистрация: 18-11-05
Пользователь №: 11 054

|
Линукс насколько я вижу мигрирует к десктопу быстрее, чем к embedded устройствам. И пользуюсь я им только по той причине, что прерываний 5..10Кгц в нынешней постановке моих задач хватает. Да, среда удобная, мне тоже нравится что она открытая. Но влезать в реализацию ядра не имею никакого желания, поэтому что полузакрытость QNX, что открытость линукса - это в определённой степени одно и то же. То есть и в QNX и в линуксе вам как разработчику до определённого уровня задач и не нужно думать о ядерной реализации, а работать только с процессами (ipc о которых вы и спрашивали). А если для вас синхронизация с более высокой частотой критична, придётся связываться с реалтаймовыми патчами ядра линукса, что не факт будет лучше чем пользоваться готовым и сертифицированным (!) продуктом. имхо.
|
|
|
|
|
Jan 27 2006, 11:42
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892

|
Цитата(zaratustra @ Jan 27 2006, 13:17)  Линукс насколько я вижу мигрирует к десктопу быстрее, чем к embedded устройствам. И пользуюсь я им только по той причине, что прерываний 5..10Кгц в нынешней постановке моих задач хватает. Да, среда удобная, мне тоже нравится что она открытая. Но влезать в реализацию ядра не имею никакого желания, поэтому что полузакрытость QNX, что открытость линукса - это в определённой степени одно и то же. То есть и в QNX и в линуксе вам как разработчику до определённого уровня задач и не нужно думать о ядерной реализации, а работать только с процессами (ipc о которых вы и спрашивали). А если для вас синхронизация с более высокой частотой критична, придётся связываться с реалтаймовыми патчами ядра линукса, что не факт будет лучше чем пользоваться готовым и сертифицированным (!) продуктом. имхо. Чистый Linux тосклив для embedded - это правда. Есть масса веток, ориентированных на embedded приложения - они куда интереснее. Я все-таки постраюсь, чтобы IPC у меня использовался для медленных "сущностей" - десятки мс. Есть такая чудная штука - RTAI (rtai.org). IMHO, она крайне перспективна, и вот ее и хочется освоить. Вопрос сертификации меня не волнует. Я уже много раз высказывал мнение, что сертификация к качеству продукта отношения не имеет (и не только в России) - это еще один способо развода на деньги. Что, многочисленные взломанные банковские системы не имели сертифкатов?
|
|
|
|
|
Jan 27 2006, 13:00
|
Участник

Группа: Новичок
Сообщений: 65
Регистрация: 18-11-05
Пользователь №: 11 054

|
Самое лучшее что могу вам посоветовать - побыстрее попробовать все вышеуказанные продукты ручками. Например мне не понравились ни rtlinux ни rtai по сравнению с qnx. Возможно что дело вкуса. Сертификацию я упомянул потому что хотел показать что разработчикам под qnx она потребовалась потому, что их области применения этого требуют. Есть формальная разводка на деньги, а есть список необходимых требований - по моему это надо разделять. В любом случае желаю вам успехов.
|
|
|
|
|
Jan 31 2006, 01:31
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Я прощу прощения если не в тему, но Evgeny_CD а не приходила ли Вам мысль отказаться от операционки? Чем дальше я читал эту ветку тем бесполезнее мне казалось ее применение. По Вашим словам 1bit на 100 Гц (опрос охранки) - это низкая скорость, но и опрос этот как правило выполняет один Intel 80C51 (128 байт RAM, ~0.5MIPS @12Mhz). Вы же планируете использовать ARM, LPC2138 - 60Mhz (59 32х битных MIPS) 20 Khz 8 bit, для 60-ти мегагерцового ARM'а - семечки. Ну смешно ведь ставить линукс лишь только для того чтобы использовать более дорой ARM контроллер и к тому же сделать его "тормознутым". IP стек реализовать - плевое дело, гораздо проще чем разобраться с его реализацией в Linux у меня с этим mega48 справлялся, походу обслуживая 16-ти разрядный стерео DAC @48kHz, тот самый проц который стоит меньше доллара по словам mse и который здесь почему-то используют только в качестве "сопроцессора для защиты софта". Если планируется использование пром PC, то можно взять просто DOS (он сейчас тоже вроде как Free), и извращаться как душе будет угодно. Под DOS ведь тоже есть нормальный IP стек, например Microsoft Client 3, Trumpet-TCP и прочие. PS: и по ходу MAC канального уровня, на котором строится траспорт (IP-стек) и сеансовый уровень (Sockets), обеспечивает доставку пакетов в том виде и в том порядке в котором пакеты были сформированы на транспортном уровне. Максимальный объем IP пакета определяется максимальным объемом MAC пакета и реализацией драйвера, и в большинстве случаев ограничивается 2-4kb.
|
|
|
|
|
Jan 31 2006, 02:01
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892

|
Цитата(defunct @ Jan 31 2006, 04:31)  Я прощу прощения если не в тему, но Evgeny_CD а не приходила ли Вам мысль отказаться от операционки? Чем дальше я читал эту ветку тем бесполезнее мне казалось ее применение.
По Вашим словам 1bit на 100 Гц (опрос охранки) - это низкая скорость, но и опрос этот как правило выполняет один Intel 80C51 (128 байт RAM, ~0.5MIPS @12Mhz). Нет. Ось нужна. 1. Проблема не в опросе, а в дальнейшей обработке. Например, Berkeley DB (http://dev.sleepycat.com/) я не возьмусь портировать под BigLoop, а база данных мне очень нужна. 2. DOS - "фтопку". Хоть free, хоть за деньги. 3. Мне надо, чтобы проект прожил 10 лет без кардинаьной смены идеологии, и мог много раз перескочить на разные аппаратные платформы. Так что ОСь будет служить вовсе не для утяжеления основного контроллера.
|
|
|
|
|
Jan 31 2006, 02:47
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Evgeny_CD @ Jan 31 2006, 04:01)  1. Проблема не в опросе, а в дальнейшей обработке. Например, Berkeley DB (http://dev.sleepycat.com/) я не возьмусь портировать под BigLoop, а база данных мне очень нужна. Весомый аргумент в пользу ОС. Цитата(Evgeny_CD @ Jan 31 2006, 04:01)  3. Мне надо, чтобы проект прожил 10 лет без кардинаьной смены идеологии, и мог много раз перескочить на разные аппаратные платформы. Ну а этот не совсем весомый  Опыт показывает, что независимо от сложности софта и ОС под которую он был написан, без особых усилий его можно перенести на другую аппаратную платформу, даже в том случае если софт этот был написнан не на C, а на asm'е или чем-нибудь еще. При условии, что перенос будет осуществляться той же командой разработчиков. А у Вас помоему ситуация еще проще, сами планируете писать софт, под самостоятельно разрабатываемый девайс. Imho при таком подходе лучше удешевлять на всю катушку аппаратную часть, вместо гонки за кроссплатформенностью. Хотя это только imho. ЗЫ: а есть сомнения, что при индивидуальном подходе устройство продержится 10 лет? Или через 5 лет будет уже другая полоса звуковых частот? ;>
Сообщение отредактировал defunct - Jan 31 2006, 03:03
|
|
|
|
|
Jan 31 2006, 08:00
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892

|
Цитата(defunct @ Jan 31 2006, 05:47)  Опыт показывает, что независимо от сложности софта и ОС под которую он был написан, без особых усилий его можно перенести на другую аппаратную платформу, даже в том случае если софт этот был написнан не на C, а на asm'е или чем-нибудь еще. При условии, что перенос будет осуществляться той же командой разработчиков. А у Вас помоему ситуация еще проще, сами планируете писать софт, под самостоятельно разрабатываемый девайс. Imho при таком подходе лучше удешевлять на всю катушку аппаратную часть, вместо гонки за кроссплатформенностью. Хотя это только imho.
ЗЫ: а есть сомнения, что при индивидуальном подходе устройство продержится 10 лет? Или через 5 лет будет уже другая полоса звуковых частот? ;> Проблема вспомнить через 10 лет, что же ты тут такого написал  . Разработка будет не индивидуальная, а силами небольшой команды. У нас уже есть примеры устройств на 87C51GB, которые прожили более 10 лет. И так хочется софт на них переписать, и так обломно ковыряться в асмовых исходиках (а софт там state of the art с точки зрения целевой задачи, его лет 5 по кусочкам писали и баги фиксили).
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|