UART буфер не читается - PullRequest
       22

UART буфер не читается

0 голосов
/ 06 января 2011

Я пытаюсь прочитать двоичные данные с последовательного устройства в C на Linux.Проблема в том, что иногда во внутреннем буфере драйвера есть символы, но опрос (с select (2)) возвращает сообщение о том, что устройство не готово к чтению.of termios и всех связанных с ним людей и искал через Интернет.Я считаю, что правильно установил все флаги (а именно VTIME, VMIN) и отключил ICANON.Я также пытался использовать функцию "tcmakeraw", но она не решила проблему.

У вас есть какие-нибудь идеи о том, что мне делать?заранее Янне

Ответы [ 2 ]

1 голос
/ 07 января 2011

Вы должны показать нам код.Я бы начал с использования cfmakeraw на последовательном порту.После того, как у вас все работает в необработанном режиме, вы можете внести изменения и посмотреть, как это работает.Вот список вопросов или вещей, которые вы можете проверить:

  • после изменения атрибута, используя, например, cfmakeraw, вызываете ли вы tcsetattr (...), чтобы применить ваше изменение?

  • Как вы можете доказать, что в буфере приема драйвера все еще есть данные?

  • Вы проверяете системный вызов на наличие ошибок?

  • каков результат фиксации вашей программы?

Редактирование на основе ваших комментариев: Ваш протокол "гарантия" .... => Проверь свое предположение!Непроверенная, кристально чистая гарантия является хорошим подтверждением «невозможной ошибки»

В основном: выбор неисправен или ваш серийный драйвер.Причиной сбоя последовательного драйвера является то, что аппаратное устройство не заполнено настолько, чтобы вызвать прерывание или потерять прерывание.

0 голосов
/ 06 января 2011

Что происходит, когда вы читаете напрямую (не через C) /dev/ttyS0 (или эквивалент) после setserial ваших параметров. Можете ли вы получить необходимые данные за пределами select()?

...