У меня есть код, который необходимо прочитать с последовательного устройства. Это функция опроса, вызываемая скоростью r
.Чтение последних данных из последовательного порта с использованием boost asio
Устройство выплескивает данные в строках, разделенных \r\n
и быстро, на частоте около 100 Гц. Всякий раз, когда я опросу, я хочу прочитать весь серийный буфер. Я считаю, что это сложно сделать с boost :: asio, потому что он не обеспечивает функцию available()
для меня.
Один из методов, я попытался было использовать read_until()
, но это не решает мою проблему, потому что могут быть новые данные в буфере после \r\n
что read_until()
остановками.
Я пробовал consume()
в буфере после того, как прочитал его, но это все еще проблема с взломом, пока я не знаю, что я прочитал последние данные с устройства.
У кого-нибудь есть совет по этой проблеме?
Это то, что вам нужно будет позаботиться о себе, boost :: asio не думает, что '\ r \ n' - все это особенное. Используйте буфер. –
@HansPassant Конечно, я об этом подумал и использовал функцию read_until() для ее обработки. Но я думаю о том, что если я буду использовать read_until(), он будет считываться с вершины стека буфера. Я хочу, чтобы данные были самыми последними, и, следовательно, будут в нижней части стека. Как я могу отменить буфер? – Nopestradamus
Просто не пополняйте буфер, пока он не станет пустым. У драйвера последовательного порта уже есть буфер приема. –