The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек, !*! greenetc, 10-Дек-12, 18:19  [смотреть все]
День добрый. Подскажите советом куда смотреть.
От устройства приходят данные пакетами по 8 байт.
Параметры порта стоят следующие
===========================================================================================
[root@i7 ~]# stty -F /dev/ttyS0
speed 57600 baud;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z;
rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 8; time = 0;
ignbrk -brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
===========================================================================================

Если пакетов идет приблиз 80-100 в сек то все ок , если больше начинает идти то начинает терять кучу пакетов.

  • Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек, !*! pavlinux, 03:37 , 11-Дек-12 (1) +1
    > День добрый. Подскажите советом куда смотреть.
    > От устройства приходят данные пакетами по 8 байт.
    > Если пакетов идет приблиз 80-100 в сек то все ок , если
    > больше начинает идти то начинает терять кучу пакетов.

    Утра доброе. Подскажите советом куда смотреть.
    Я работаю. Получаю аванс и зарплату пакетами по 10 купюр.
    Параметры жены следующие
    ==========================================================================================
    [root@abramovich ~] # stty -F /dev/wife
    w=55, len=175, h=90, boobs=3, edu=MGU, otsos=100500+, piz=^o
    -mozg, +havach, +quiet  
    ==========================================================================================

    Если на жену уходит приблизительно 80-100% в мес, то всё OK,  
    если жена начинает требовать шубу, тиффани и бмв 118i, то я начинаю терять кучу пакетов.

    • Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек, !*! greenetc, 15:15 , 11-Дек-12 (3)
      >[оверквотинг удален]
      > Я работаю. Получаю аванс и зарплату пакетами по 10 купюр.
      > Параметры жены следующие
      > ==========================================================================================
      > [root@abramovich ~] # stty -F /dev/wife
      > w=55, len=175, h=90, boobs=3, edu=MGU, otsos=100500+, piz=^o
      > -mozg, +havach, +quiet
      > ==========================================================================================
      > Если на жену уходит приблизительно 80-100% в мес, то всё OK,
      > если жена начинает требовать шубу, тиффани и бмв 118i, то я начинаю
      > терять кучу пакетов.

      если это аллегория на тему "недостаточно скорости работы порта" то 800 байт в секунду против 57600 скорости порта не ровня. Игры с параметрами icanon и vmin и vtime не привели к результату.

      • Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек, !*! pavlinux, 00:27 , 12-Дек-12 (4)
        >>[оверквотинг удален]
        >> Если на жену уходит приблизительно 80-100% в мес, то всё OK,
        >> если жена начинает требовать шубу, тиффани и бмв 118i, то я начинаю
        >> терять кучу пакетов.
        > если это аллегория на тему "недостаточно скорости работы порта"

        Это была аллегория на тему, - "Что за прибор?"
        С этой стороны, как я понял, впаянный в чипсет иль рядом UART 16550A, с другой стороны кто?

        > 800 байт в секунду против 57600 скорости порта не ровня

        Может стоить понизить до 2400 иль 1200 хотя бы.

        • Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек, !*! greenetc, 11:42 , 12-Дек-12 (5)
          >>>[оверквотинг удален]
          >>> Если на жену уходит приблизительно 80-100% в мес, то всё OK,
          >>> если жена начинает требовать шубу, тиффани и бмв 118i, то я начинаю
          >>> терять кучу пакетов.
          >> если это аллегория на тему "недостаточно скорости работы порта"
          > Это была аллегория на тему, - "Что за прибор?"
          > С этой стороны, как я понял, впаянный в чипсет иль рядом UART
          > 16550A, с другой стороны кто?

          прибор считывающий поступающие импульсы с крыльчатки для измерения скорости потока бенза (atmega) .... вот их то и приходит 80-200 в сек.

          >> 800 байт в секунду против 57600 скорости порта не ровня
          > Может стоить понизить до 2400 иль 1200 хотя бы.

          Попробую. Я всегда считал что бОльшгая скорость охватит в любом случае полосу пропускания и гарантировано не потеряет пакеты ... а выходит что не так что ли ?

          • Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек, !*! pavlinux, 13:50 , 12-Дек-12 (6)
            >>>>[оверквотинг удален]
            >>> 800 байт в секунду против 57600 скорости порта не ровня
            >> Может стоить понизить до 2400 иль 1200 хотя бы.
            > Попробую. Я всегда считал что бОльшгая скорость охватит в любом случае полосу
            > пропускания и гарантировано не потеряет пакеты ... а выходит что не
            > так что ли ?

            Обратно-то тоже летят данные и команды, atmega может просто "захлёбываться".  

        • Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек, !*! ACCA, 06:35 , 13-Дек-12 (8)
          > С этой стороны, как я понял, впаянный в чипсет иль рядом UART
          > 16550A, с другой стороны кто?

          Не факт. Может оказаться какая-то самопальная железяка, а то и очень б/у хня на i386 с 8250, что и создаёт проблему.

      • Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек, !*! Alex_S, 03:45 , 13-Дек-12 (7)
        >> терять кучу пакетов.
        > если это аллегория на тему "недостаточно скорости работы порта" то 800 байт
        > в секунду против 57600 скорости порта не ровня. Игры с параметрами
        > icanon и vmin и vtime не привели к результату.

        чем читаешь и как определяешь, что пакеты теряются ?

        low_latency регулировал ?

        • Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек, !*! Andrey Mitrofanov, 09:30 , 13-Дек-12 (9)
          > low_latency регулировал ?

          ...или приоритет читающей программы поднять?

        • Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек, !*! greenetc, 11:51 , 13-Дек-12 (10)
          >>> терять кучу пакетов.
          >> если это аллегория на тему "недостаточно скорости работы порта" то 800 байт
          >> в секунду против 57600 скорости порта не ровня. Игры с параметрами
          >> icanon и vmin и vtime не привели к результату.
          > чем читаешь и как определяешь, что пакеты теряются ?

          Читаю в потоке.

          pthread_create(&idle, &attr, &idleThread, 0);
          ...
          ...
          ...
          extern "C" void *idleThread(void *me).
          {    

              for (;;) {
                  struct timeval timeout = { 0 };                
                  fd_set con;
                  FD_ZERO(&con);
                  FD_SET(0, &con);
                  FD_SET(fd_io, &con);
                  int result = select(MAX(fd_io+1), &con, 0, 0, &timeout);
                  if ( result )
                  {
                     if (FD_ISSET(fd_io, &con)).
                     {
                                  unsigned char data[8];
                                  int d = read(fd_io, &data[0], 8);
                                  if ( data[0] == 83 )
                                  {
                                        if (  data[1] == 75 )                                          
                                           printf("%.f\n", counter++);
                                  }
                     }
                  }
               }
          }


          Когда скорость поступления данных в порт приемлимая вижу на экране равномерный вывод нарастающий, когда скорость растет сразу вижу заикания вывода.

          > low_latency регулировал ?

          не сталкивался как то с параметром таким. Как его регулировать ?

          • Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек, !*! pavlinux, 00:47 , 14-Дек-12 (13)
            >> чем читаешь и как определяешь, что пакеты теряются ?
            > Читаю в потоке.
            > pthread_create(&idle, &attr, &idleThread, 0);
            > ...

            А программную модель работы отлаживал, без прибора,
            через пайп/фифо иль для полного кайфа по нуль-модему?

            >  for (;;) {
            >             printf("%.f\n", counter++);
            > }

            counter++ не переполняется?

            Если counter глобальная, где мутексы иль спинлоки?

          • Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек, !*! Alex_S_reg, 03:34 , 19-Дек-12 (15)
            >>>> терять кучу пакетов.
            >            if > (FD_ISSET(fd_io, &con)).
            >            {  
            >          
            >  unsigned char data[8];        
            >  int d = read(fd_io, &data[0], 8);        
            >  if ( data[0] == 83 )
            >          
            >

            кароче ...
            "Почему четыре?"  .. в смысле - почему 8 байт ?  там еще может быть, выгребай до конца,
               пока read() не вернет ощибку.

            да и результат read() в любом случае полезно проверять .

            успехов !

        • Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек, !*! greenetc, 12:43 , 13-Дек-12 (11)
          >>> терять кучу пакетов.
          >> если это аллегория на тему "недостаточно скорости работы порта" то 800 байт
          >> в секунду против 57600 скорости порта не ровня. Игры с параметрами
          >> icanon и vmin и vtime не привели к результату.
          > чем читаешь и как определяешь, что пакеты теряются ?
          > low_latency регулировал ?

          просто включал

          setserial /dev/ttyS0 low_latency

          никакого эфекта не заметил

          • Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек, !*! pavlinux, 00:40 , 14-Дек-12 (12)
            >> low_latency регулировал ?
            > просто включал
            > setserial /dev/ttyS0 low_latency
            > никакого эфекта не заметил

            struct sched_param prm;
            prm.sched_priority =  sched_get_priority_max(SCHED_FIFO);
            pthread_setschedparam(pthread_self(), SCHED_FIFO, &prm);

            for (;;) {
                    struct timeval timeout = { 0 };                
                    fd_set con;
            ...
            }

            # chrt -p -f 99 `pgrep "[irq]/4"` иль как-то так...

            • Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек, !*! greenetc, 13:57 , 14-Дек-12 (14)
              >[оверквотинг удален]
              > struct sched_param prm;
              > prm.sched_priority =  sched_get_priority_max(SCHED_FIFO);
              > pthread_setschedparam(pthread_self(), SCHED_FIFO, &prm);
              > for (;;) {
              >         struct timeval timeout =
              > { 0 };
              >         fd_set con;
              > ...
              > }
              > # chrt -p -f 99 `pgrep "[irq]/4"` иль как-то так...

              ммм ... не подумал над приоритетом .. стояло так

              struct sched_param pamparam;
              param.sched_priority = sched_get_priority_min(SCHED_FIFO);
              pthread_attr_setschedparam(&attr, &pamparam);
              pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
              pthread_t idle;
              if (pthread_create(&idle, &attr, &idleThread, 0) != 0) {
                 pthread_attr_setschedpolicy(&attr, SCHED_OTHER);
                 param.sched_priority = 0;
                 pthread_attr_setschedparam(&attr, &pamparam);
                 pthread_create(&idle, &attr, &idleThread, 0);
              }
              pthread_attr_destroy(&attr);

              попробую sched_get_priority_max




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру