Название: Чтение данных с СОМ порта Отправлено: soalvi от Апреля 20, 2010, 10:54 Здравствуйте.
Написал прогу которая выдаёт данные в СОМ (ttyS1) и читает из него. Выдача работает нормально - приёмник данные получает, а вот чтение почему-то не идёт :( , фрагмент моего кода: Код: fd_ttyS0 = open("/dev/ttyS1", O_RDWR | O_NOCTTY | O_NDELAY); Название: Re: Чтение данных с СОМ порта Отправлено: Rcus от Апреля 20, 2010, 11:36 FNDELAY это флаг O_NONBLOCK, который переводит дескриптор в неблокирующий режим. Код ошибки 11 обычно это EAGAIN. см. man 3 read
Цитировать When attempting to read a file (other than a pipe or FIFO) that supports non-blocking reads and has no data currently available: * If O_NONBLOCK is set, read() shall return -1 and set errno to [EAGAIN]. * If O_NONBLOCK is clear, read() shall block the calling thread until some data becomes available. * The use of the O_NONBLOCK flag has no effect if there is some data available. Название: Re: Чтение данных с СОМ порта Отправлено: soalvi от Апреля 21, 2010, 07:53 То есть как я понял код ошибки 11 говорит, что на момент чтения данные на порт не поступили?
Название: Re: Чтение данных с СОМ порта Отправлено: soalvi от Апреля 21, 2010, 09:13 Использовал функцию select для ожидания данных - данные получаю. Но в полученных данных перед нужной мне частью имеется какой-то мусор.
Вызов функции Код: read(fd_ttyS0, NULL, sizerequest); Как избавиться от мусора в приёме данных? Название: Re: Чтение данных с СОМ порта Отправлено: kuzulis от Апреля 21, 2010, 10:58 soalvi,
не парьте мозх. :) Посмотрите, наконец, как это сделано в: 1. http://code.google.com/p/qextserialport/ или 2. http://fireforge.net/scm/viewvc.php/?root=qserialdevice Название: Re: Чтение данных с СОМ порта Отправлено: soalvi от Мая 04, 2010, 15:58 Добился следующего результата: С другого ПК из под Windows используя программу терминал передаю в Linux данные - данные передаются корректно. Но когда начинаю передачу из своей программы (из под Windows) то данные принимаются кусками - из посылки выборочно принимается 2-4 байта.
Текст программы передатчика (из под Windows, Builder): Код: port = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, Код: fd_ttyS0 = open("/dev/ttyS0", O_RDWR| O_NOCTTY | O_NDELAY); |