The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"  +/
Сообщение от greenetc email(ok) on 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 в сек то все ок , если больше начинает идти то начинает терять кучу пакетов.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"  +1 +/
Сообщение от pavlinux (ok) on 11-Дек-12, 03:37 
> День добрый. Подскажите советом куда смотреть.
> От устройства приходят данные пакетами по 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, то я начинаю терять кучу пакетов.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"  +/
Сообщение от greenetc email(ok) on 11-Дек-12, 15:15 
>[оверквотинг удален]
> Я работаю. Получаю аванс и зарплату пакетами по 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 не привели к результату.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

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

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

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

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

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

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

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

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

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

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

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

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

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

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

9. "Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"  +/
Сообщение от Andrey Mitrofanov on 13-Дек-12, 09:30 
> low_latency регулировал ?

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

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

10. "Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"  +/
Сообщение от greenetc email(ok) on 13-Дек-12, 11:51 
>>> терять кучу пакетов.
>> если это аллегория на тему "недостаточно скорости работы порта" то 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 регулировал ?

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

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

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

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

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

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

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

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

15. "Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"  +/
Сообщение от Alex_S_reg (ok) on 19-Дек-12, 03:34 
>>>> терять кучу пакетов.
>            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() в любом случае полезно проверять .

успехов !

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

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

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

setserial /dev/ttyS0 low_latency

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

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

12. "Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"  +/
Сообщение от pavlinux (ok) on 14-Дек-12, 00:40 
>> 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"` иль как-то так...

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

14. "Теряются пакеты при чтении с /dev/ttyS0 если больше 100 в сек"  +/
Сообщение от greenetc email(ok) on 14-Дек-12, 13:57 
>[оверквотинг удален]
> 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

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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