Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Работа с com-портами посредством прерываний.  (Прочитано 2806 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Vil84

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
 Здравствуйте! Помогите, пожалуйста, решить проблемку.
 Стоит задача - написать программку, общающуюся с com-портом посредством прерываний. Работа посредством опросов не подходит. Азбуку программирования ядра http://tldp.org/LDP/lkmpg/2.6/html/x1256.html прочитал, погонял экземплы, но никак не пойму, как можно совместить работу описанных там функций с работой программы, использующей стандартные библиотеки? Может, есть какой-то другой способ работы с сом-портами?
 Если у вас есть полезные ссылки или похожие примеры - поделитесь, пожалуйста.

Оффлайн truegeek

  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
Re: Работа с com-портами посредством прерываний.
« Ответ #1 : 21 Декабря 2010, 11:17:29 »
когда-то мне товарищ digiwhite скидывал ссылки:
может быть поможет и вам
« Последнее редактирование: 21 Декабря 2010, 15:20:19 от sanb »

Оффлайн Vil84

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Работа с com-портами посредством прерываний.
« Ответ #2 : 21 Декабря 2010, 12:02:47 »
 Особенно за последнюю ссылочку спасибо. Этого я ещё не читал. Только вот вы мне ответьте, может ли одна программа работать и в области пользователя, и в области ядра? И если да, то как это совместить?

Оффлайн truegeek

  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
Re: Работа с com-портами посредством прерываний.
« Ответ #3 : 21 Декабря 2010, 12:17:25 »
Особенно за последнюю ссылочку спасибо. Этого я ещё не читал. Только вот вы мне ответьте, может ли одна программа работать и в области пользователя, и в области ядра? И если да, то как это совместить?
не совсем понятен вопрос
может ли одна программа работать и в области пользователя, и в области ядра?
не поясните?

Оффлайн Vil84

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Работа с com-портами посредством прерываний.
« Ответ #4 : 21 Декабря 2010, 12:37:16 »
 У меня вся программа написана с применением пользовательских библиотек. К ядру я не прикасался.  Нужно подключить её к com-порту для обмена информацией с внешними устройствами, и обмен этот должен происходить, так сказать, по факту, не спрашивая порт о наличии в нем поступившей информации, а принимая её и обрабатывая по факту получения. Вот я никак и не соображу, как это можно осуществить.

Пользователь решил продолжить мысль 21 Декабря 2010, 12:59:44:
И ещё интересный момент - машина никак не хочет воспринимать irq-4. В примере http://tldp.org/LDP/lkmpg/2.6/html/x1256.html программа резво откликается на irq-1, но после изменения в этом же примере номера прерывания и попытки поймать байт с адреса ком-порта обработчик прерываний даже не вызывается. Не знаете ли, почему?
« Последнее редактирование: 21 Декабря 2010, 12:59:44 от Vil84 »

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Работа с com-портами посредством прерываний.
« Ответ #5 : 21 Декабря 2010, 21:15:52 »
не спрашивая порт о наличии в нем поступившей информации, а принимая её и обрабатывая по факту получения. Вот я никак и не соображу, как это можно осуществить.
А к чему эта молчанка? Почему нельзя спросить о наличии? Проблема в блокировках или ещё чего? Если нужно без блокировок, то можно воспользоваться select() или вообще работать с портом в отдельном потоке.

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Работа с com-портами посредством прерываний.
« Ответ #6 : 22 Декабря 2010, 13:16:37 »
Зачем здесь ядро насиловать я не понял.
Тебе нужны асинхронные события? Они есть. Но требуют "особой кухни".
Мне кажется что все должно решаться гораздо проще. Попробуй иначе взглянуть на вещи. Для начала почитай как пишутся приложения обрабатывающие более 1го источника ввода. про select тебе уже сказали, еще есть poll, epoll, aio

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Работа с com-портами посредством прерывани
« Ответ #7 : 22 Декабря 2010, 17:11:09 »
Может, есть какой-то другой способ работы с сом-портами?
Есть элементарный способ. Практически без программирования.
Немного теории для профита.
В лине все является файлами и порты тоже.
Ряд соображений.
1. Использование непосредственно прерываний - это плохо по ряду причин. Разговор на эту тему длинный, если не поймете суть, то можно к нему возвратиться.
Вместо этого универсальнее использовать отдельный процесс (на чтение допустим).
2. Принимать по 1 байту - это прошлый век. Все порты имеют FIFO. Отказываться от его использования - это значит двигаться в прошлый век.  Работать надо с пакетами.
3. Факт получения пакета устаканился как отсутствие принятой информации в течении какого-то времени.

ЗЫ. Если все это понять, то проблем уже не будет.
 
« Последнее редактирование: 23 Декабря 2010, 11:38:58 от alexander.pronin »

 

Страница сгенерирована за 0.062 секунд. Запросов: 25.