реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Как получить время от последнего принятного байта по Uart-у, В виндах есть ReadTimeout, а в Linux - есть подобное?
Atridies
сообщение Apr 25 2014, 13:48
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 445
Регистрация: 7-02-05
Из: Зеленоград
Пользователь №: 2 468



Доброго времени суток!

Начал осваивать линукс и программирование под ним. Первым делом потребовалось написать программу, которая бы принимала данные по uart-у и парсила их на строки.
Если выделение строки из массива данных - не проблема, то вот стирание буфера меня озадачило. Идеально было бы, если это происходило по отсутствию данных в течении несколько миллисекунд. В винде есть ReadTimeout, при превышении порога - стираем буфер. В линуксе - только read();

Вопрос: можно ли получить в линуксе время от последнего принятого байта?

Заранее спасибо.
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Apr 25 2014, 14:05
Сообщение #2


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(Atridies @ Apr 25 2014, 17:48) *
Вопрос: можно ли получить в линуксе время от последнего принятого байта?

А может стоит попробовать стандартный путь Serial-Programming-HOWTO
Serial-HOWTO serial-programming-guide-for-posix-operating-systems


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Atridies
сообщение Apr 25 2014, 18:23
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 445
Регистрация: 7-02-05
Из: Зеленоград
Пользователь №: 2 468



Собсна, я кое-что из этого читал, и установка
Код
newtio.c_cc[VMIN]
для меня не нова.
Но мне хотелось бы обрабатывать входящие данные на лету, а стирать - после окончания пакета.

Я сделал, чтобы функция read вообще не тормозила программу, и по каждому read()>0 - перезаписываю в свой буфер и обрабатываю. А вот сброс буфера - хотелось бы иметь после того, как прошло какое-то время тишины.

Конечно, по VMIN - можно выходить из read() после 100 мс. тишины, но мне хотелось бы, чтобы программа не теряла лишнего времени, а обрабатывалась на лету.

По одной из ссылок я увидел метод с использованием сигнала SIGIO. Но насколько я понял - мне это тоже не поможет.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st June 2025 - 03:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.02033 секунд с 7
ELECTRONIX ©2004-2016