День добрый. Подскажите советом куда смотреть.
От устройства приходят данные пакетами по 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 в сек то все ок , если больше начинает идти то начинает терять кучу пакетов.
> День добрый. Подскажите советом куда смотреть.
> От устройства приходят данные пакетами по 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, то я начинаю терять кучу пакетов.
>[оверквотинг удален]
> Я работаю. Получаю аванс и зарплату пакетами по 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 не привели к результату.
>>[оверквотинг удален]
>> Если на жену уходит приблизительно 80-100% в мес, то всё OK,
>> если жена начинает требовать шубу, тиффани и бмв 118i, то я начинаю
>> терять кучу пакетов.
> если это аллегория на тему "недостаточно скорости работы порта"Это была аллегория на тему, - "Что за прибор?"
С этой стороны, как я понял, впаянный в чипсет иль рядом UART 16550A, с другой стороны кто?> 800 байт в секунду против 57600 скорости порта не ровня
Может стоить понизить до 2400 иль 1200 хотя бы.
>>>[оверквотинг удален]
>>> Если на жену уходит приблизительно 80-100% в мес, то всё OK,
>>> если жена начинает требовать шубу, тиффани и бмв 118i, то я начинаю
>>> терять кучу пакетов.
>> если это аллегория на тему "недостаточно скорости работы порта"
> Это была аллегория на тему, - "Что за прибор?"
> С этой стороны, как я понял, впаянный в чипсет иль рядом UART
> 16550A, с другой стороны кто?прибор считывающий поступающие импульсы с крыльчатки для измерения скорости потока бенза (atmega) .... вот их то и приходит 80-200 в сек.
>> 800 байт в секунду против 57600 скорости порта не ровня
> Может стоить понизить до 2400 иль 1200 хотя бы.Попробую. Я всегда считал что бОльшгая скорость охватит в любом случае полосу пропускания и гарантировано не потеряет пакеты ... а выходит что не так что ли ?
>>>>[оверквотинг удален]
>>> 800 байт в секунду против 57600 скорости порта не ровня
>> Может стоить понизить до 2400 иль 1200 хотя бы.
> Попробую. Я всегда считал что бОльшгая скорость охватит в любом случае полосу
> пропускания и гарантировано не потеряет пакеты ... а выходит что не
> так что ли ?Обратно-то тоже летят данные и команды, atmega может просто "захлёбываться".
> С этой стороны, как я понял, впаянный в чипсет иль рядом UART
> 16550A, с другой стороны кто?Не факт. Может оказаться какая-то самопальная железяка, а то и очень б/у хня на i386 с 8250, что и создаёт проблему.
>> терять кучу пакетов.
> если это аллегория на тему "недостаточно скорости работы порта" то 800 байт
> в секунду против 57600 скорости порта не ровня. Игры с параметрами
> icanon и vmin и vtime не привели к результату.чем читаешь и как определяешь, что пакеты теряются ?
low_latency регулировал ?
> low_latency регулировал ?...или приоритет читающей программы поднять?
>>> терять кучу пакетов.
>> если это аллегория на тему "недостаточно скорости работы порта" то 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 регулировал ?
не сталкивался как то с параметром таким. Как его регулировать ?
>> чем читаешь и как определяешь, что пакеты теряются ?
> Читаю в потоке.
> pthread_create(&idle, &attr, &idleThread, 0);
> ...А программную модель работы отлаживал, без прибора,
через пайп/фифо иль для полного кайфа по нуль-модему?> for (;;) {
> printf("%.f\n", counter++);
> }counter++ не переполняется?
Если counter глобальная, где мутексы иль спинлоки?
>>>> терять кучу пакетов.
> 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() в любом случае полезно проверять .
успехов !
>>> терять кучу пакетов.
>> если это аллегория на тему "недостаточно скорости работы порта" то 800 байт
>> в секунду против 57600 скорости порта не ровня. Игры с параметрами
>> icanon и vmin и vtime не привели к результату.
> чем читаешь и как определяешь, что пакеты теряются ?
> low_latency регулировал ?просто включал
setserial /dev/ttyS0 low_latency
никакого эфекта не заметил
>> 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"` иль как-то так...
>[оверквотинг удален]
> 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