<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Чтение из COM порта - исключительно по одному байту. Почему ?</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9454.html</link>
    <description>Есть serial устройство - скорость работы 9600. От устройства приходят данные в пакетах  разной динный Если работать так :&lt;br&gt;  &lt;br&gt;int fd;&lt;br&gt;struct termios oldtio, newtio;&lt;br&gt;fd = open(DEVICE, O_RDWR &amp;#124; O_NOCTTY &amp;#124; O_NDELAY &amp;#124; O_NONBLOCK);&lt;br&gt;&lt;br&gt;fcntl(fd, F_SETFL,0);&lt;br&gt;struct termios attr;&lt;br&gt;tcgetattr(fd, &amp;attr);&lt;br&gt;attr.c_cflag = B9600 &amp;#124; CS8 &amp;#124; CLOCAL &amp;#124; CREAD;&lt;br&gt;attr.c_lflag &amp;= ~ICANON &amp;#124; ~ISIG ;&lt;br&gt;attr.c_cc&#091;VMIN&#093; = 0;&lt;br&gt;attr.c_cc&#091;VTIME&#093; = 1;&lt;br&gt;tcsetattr(fd, TCSANOW, &amp;attr);&lt;br&gt;tcflush(fd, TCIFLUSH);&lt;br&gt;&lt;br&gt;struct timeval timeout = &#123; 0 &#125;;&lt;br&gt;int result = select(fd+1, &amp;con, 0, 0, &amp;timeout);&lt;br&gt;&lt;br&gt;Вывод : #stty -F /dev/ttyUSB0&lt;br&gt;&lt;br&gt;speed 9600 baud; line = 0;&lt;br&gt;eof = ^A; min = 0; time = 1;&lt;br&gt;-cread&lt;br&gt;-brkint -icrnl -imaxbel&lt;br&gt;-opost -onlcr&lt;br&gt;-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke&lt;br&gt;&lt;br&gt;То читает исключительно по одному байту, то есть select сигналит на каждый байт приходящий в буфер. Если &#091;VMIN&#093; = 8 , например, то приходит пачкой (что и понятно), но при этом все пакеты меньше 8 естественно накапливаю</description>

<item>
    <title>Чтение из COM порта - исключительно по одному байту. Почему ? (Alex_S)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9454.html#5</link>
    <pubDate>Fri, 25 May 2012 01:23:34 GMT</pubDate>
    <description>&lt;br&gt;&amp;gt; посмотрел что cutecom делает с портом, настройки ... он ставит VMIN=60 , &lt;br&gt;&amp;gt; VTIME=1 . Это помогает если у себя так же настраиваю, НО &lt;br&gt;&amp;gt; ... медленнее идет чтение как то .. причем на глаз заметно &lt;br&gt;&amp;gt; даже ...&lt;br&gt;&lt;br&gt;  время можно strace-ом попробовать оценить, кстати&lt;br&gt;&lt;br&gt;  ты какого результата хочешь в итоге ?&lt;br&gt;  хочешь буферизации - задирай таймауты и смирись с задержкой&lt;br&gt;  хочешь скорости - выгребай по одному байту , ничего страшного в этом нет&lt;br&gt;   &lt;br&gt;</description>
</item>

<item>
    <title>Чтение из COM порта - исключительно по одному байту. Почему ? (Аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9454.html#4</link>
    <pubDate>Thu, 24 May 2012 21:29:50 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; прийти пакет?&lt;br&gt;&amp;gt;&amp;gt; Не в этом дело ... пускай даже делаю 8 байт от устройства &lt;br&gt;&amp;gt;&amp;gt; ... в cutecom и minicom они приходят одной строкой ... то &lt;br&gt;&amp;gt;&amp;gt; есть read(fd ... ) возвращает 8 байт .. а вот в &lt;br&gt;&amp;gt;&amp;gt; моей ситуации всегда read(fd .. ) возвращает 1 байт .. и &lt;br&gt;&amp;gt;&amp;gt; select срабатывает подряд 8 раз .. вот в чем дело &lt;br&gt;&amp;gt; посмотрел что cutecom делает с портом, настройки ... он ставит VMIN=60 , &lt;br&gt;&amp;gt; VTIME=1 . Это помогает если у себя так же настраиваю, НО &lt;br&gt;&amp;gt; ... медленнее идет чтение как то .. причем на глаз заметно &lt;br&gt;&amp;gt; даже ...&lt;br&gt;&lt;br&gt;Попробуйте так сконфигурировать:&lt;br&gt;&lt;br&gt;$ stty 9600 ignbrk -brkint -icrnl -imaxbel -opost -isig -icanon -iexten -echo noflsh &amp;lt;/dev/ttyS0&lt;br&gt;&lt;br&gt;у меня была проблема с программатором по COM-порту, такая конфигурация помогла.&lt;br&gt;взято отсюда: http://www.radiokot.ru/forum/viewtopic.php?p=869455&amp;sid=5c8547e70fca0e7e2a4202482074d947#p869455&lt;br&gt;&lt;br&gt;это конечно наобум, но вдруг поможет -- тоже была проблема именно со скоростью, при чем пересылка вообще останавливалась&lt;br&gt;&lt;br&gt;если вдруг помо</description>
</item>

<item>
    <title>Чтение из COM порта - исключительно по одному байту. Почему ? (greenetc)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9454.html#3</link>
    <pubDate>Wed, 23 May 2012 15:54:25 GMT</pubDate>
    <description>&amp;gt;&amp;gt; Думаю что никак. Как он(serial port) по вашему должен узнать какой длины &lt;br&gt;&amp;gt;&amp;gt; сейчас должен &lt;br&gt;&amp;gt;&amp;gt; прийти пакет?&lt;br&gt;&amp;gt; Не в этом дело ... пускай даже делаю 8 байт от устройства &lt;br&gt;&amp;gt; ... в cutecom и minicom они приходят одной строкой ... то &lt;br&gt;&amp;gt; есть read(fd ... ) возвращает 8 байт .. а вот в &lt;br&gt;&amp;gt; моей ситуации всегда read(fd .. ) возвращает 1 байт .. и &lt;br&gt;&amp;gt; select срабатывает подряд 8 раз .. вот в чем дело &lt;br&gt;&lt;br&gt;посмотрел что cutecom делает с портом, настройки ... он ставит VMIN=60 , VTIME=1 . Это помогает если у себя так же настраиваю, НО ... медленнее идет чтение как то .. причем на глаз заметно даже ... &lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Чтение из COM порта - исключительно по одному байту. Почему ? (greenetc)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9454.html#2</link>
    <pubDate>Wed, 23 May 2012 15:43:27 GMT</pubDate>
    <description>&amp;gt; Думаю что никак. Как он(serial port) по вашему должен узнать какой длины &lt;br&gt;&amp;gt; сейчас должен &lt;br&gt;&amp;gt; прийти пакет?&lt;br&gt;&lt;br&gt;Не в этом дело ... пускай даже делаю 8 байт от устройства ... в cutecom и minicom они приходят одной строкой ... то есть read(fd ... ) возвращает 8 байт .. а вот в моей ситуации всегда read(fd .. ) возвращает 1 байт .. и select срабатывает подряд 8 раз .. вот в чем дело&lt;br&gt;</description>
</item>

<item>
    <title>Чтение из COM порта - исключительно по одному байту. Почему ? (Help)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9454.html#1</link>
    <pubDate>Fri, 11 May 2012 07:31:42 GMT</pubDate>
    <description>Думаю что никак. Как он(serial port) по вашему должен узнать какой длины сейчас должен&lt;br&gt;прийти пакет?&lt;br&gt;&lt;br&gt;</description>
</item>

</channel>
</rss>
