|
|
  |
Вопрос ламера по Linux IPC, Inter Process Comminications |
|
|
|
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ГГц процессора хватит для этого?" я просто принципиально не буду.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|