LINUX.ORG.RU

RS232 FIFO FCR trigger


0

0

Проблема при общении с прибором по RS232 (Tektronix TDS1012):
данные читаются блоками по 8 байт, хотя для UART чипов 16550a максимальный размер буфера 16. В оффтопике FCR можно регулировать в свойствах COM-порта, в ядре же Linux это значение намертво зашито параметром
.fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10
в drivers/serial/8250.c.
Знает ли кто-нибудь способ настраивать этот параметр без пересборки ядра? Это помогло бы увеличить скорость обмена данными раза в 2.
Заранее спасибо.


Это не увеличит скорость обмена данными в 2 раза. В сущности, в лучшем случае это ничего заметно не изменит. Если ты будешь использовать буфер по максимуму (кажется 14), ядро слегка сэкономит на прерываниях, но увеличивается риск потери байтов. Это если конечно не используется контроль переполнения. Да и с ним тоже возможно.

И вообще, этот параметр обозначает, при каком заполнении буфера микросхема генерит прерывание. При этом если обработчик запаздывает с чтением данных, то микросхема продолжает заполнять свой буфер до упора. Мало того, даже если в буфере 1-2 байта, прерывание все равно произойдет по таймеру. Иначе ты бы никогда не получил последних байтов.

На крайняк, собери его модулем в разных вариантах.

ansky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.