Всегда и сразу. Как правило, FIFO у UART небольшой, вся "строка" там не поместится. Да и нужно как-то её анализировать на предмет "конца строки". ЗЫ: понятие "считывать" оооочень расплывчатое...
СЦБист писал(а):
Что является признаком того, что строка принята в полном составе,
Обычно, маркером конца строки является... заранее оговорённый маркер конца строки. Например "\0" или "\r\n"... Либо, "строка" передаётся в составе "кадра" заранее оговорённого формата.
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
Мне нужно считать полноценную строку, а не огрызки.
Задайся вопросом: кто должен найти маркер окончания строки? Есть некая волшебная функция "найти строку"? Нет, значит придется самому искать. Найти можно только читая принятый поток в поисках маркера. Другого варианта нет.
СЦБист писал(а):
Считывать нужно в какой-то определенный момент. Тут есть такое понятие как тайм-аут.
И что тебе это даст? Данные могут приходить когда угодно - зависит от скорости передачи, от "желания" источника передать данные.....
Формируешь кольцевой буфер. Постоянно читаешь из файла (сколько можно) и добавляешь данные в этот буфер. После каждого успешного чтения ищешь маркер "конец строки" от текущего указателя чтения по последний принятый байт. При нахождении строки - извлекаешь её, смещаешь указатель чтения... И так далее.
Либо читай по одному байту, анализируй его на "окончание". Если не конец - добавляешь байт в буфер строки и читаешь дальше... Это будет более тормозно, но проще в реализации.
Про кольцевой буфер не понял с какой целью его лепить.
Складывать данные в этот буфер, в процессе поиска конца строки. Ибо можно вычитать не только символы из конца строки, плюс маркер окончания, но и начало новой строки - чтобы это начало не потерять. Либо запрашивай по одному байту и анализируй на "конец строки". Тогда можно без кольцевого буфера.
СЦБист писал(а):
что делать с тайм-аутами ? нужно их выставлять ?
Разумеется. При отсутствии данных будет выход из функции по таймауту. Иначе можно зависнуть на ожидании.
СЦБист писал(а):
Данные у меня приходят по запросу а не когда угодно.
Это и есть "когда угодно". Запрос может уйти в любой момент, запрос может "не дойти" до получателя, получатель может ответить в разное время, ответ может "не дойти" до компа.
Да-да-да, никто и никогда не передавал данные через различные соединения. Все эти Ethernet, RS-232, RS-485 и многие другие - это вымысел. Все эти протоколы (как самодельные, так и промышленные) - сплошной обман.
СЦБист писал(а):
По поводу конца строки. Нету у нее не конца не начала.
Э-э-э, поясни? Если у строки нет конца - т что ты собираешься искать?
СЦБист писал(а):
и искать ответ в другом месте.
Удачи. Когда найдешь ответ - перечитай снова эту тему с самого начала.
Если передача относительно редкая, то можно опрашивать с наперед заданным периодом, запрашивая число байт в порту. После того как в очередной раз не будет принято ни одного байта - конец приема строки.
_________________ Загружая на вход компьютера "мусор", на выходе получим "мусор^32". PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
После сработки события вызовите GetOverlappedResult - она скажет сколько данных на самом деле принялось/отослалось. И если идёт отправка - то почему вы отметили, что буфер приёмный? У приёма свой экземпляр OVERLAPPED должен быть и отдельное событие нужно создавать и Read вызывать.
СЦБист писал(а):
в буфере buffer_write 186 символов
186 - это размер буффера, либо длина С-строки там хранящейся?
_________________ Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR!
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения