#c #serial-port #boost-asio
#c #последовательный порт #boost-asio
Вопрос:
Что я пытаюсь сделать:
- Загрузка и чтение строки в файле
- запись в последовательный порт
Проблема: требуется время ожидания, иначе данные отправляются слишком быстро, и плата не может обрабатывать сообщения одно за другим.
Мой фрагмент кода:
//class.cpp
while (!file.atEnd())
{
std::string str = file.readLine();
QString qstr = QString::fromStdString(str);
writeTextToMessageLog("PRINTF: " qstr);
sendCommand(str, str.c_str(), str.size());
// THE STRAIGHTFORWARD WAY WITH SLEEP
Sleep(100);
}
void class::sendCommand(const std::string str, const char *buf, const int amp;size)
{
size_t bytes = boost::asio::write(m_portConfig, boost::asio::buffer(buf, size));
}
В принципе, так оно и есть. Я решил это с помощью функции SLEEP, но мне нужен лучший способ начать запись новой строки после того, как мое оборудование отправит сигнал или sth. Существует ли что-то подобное?
Комментарии:
1. Насколько я знаю, последовательные порты не отправляют ответ на получение данных, это больше похоже на UDP, таким образом, вы просто передаете в него данные, и все. Учитывайте скорость передачи данных в бодах перед отправкой данных, это показатель того, сколько данных вы можете использовать.
2. Вам всегда нужно проверять, равно ли количество записанных байтов тому, которое вы хотели записать. А если нет, то повторите попытку записать оставшиеся или используйте
write_async
.3. Прочитанный вы уверены, что сторона чтения не считывает несколько строк в одном чтении? Если сторона записи достаточно быстрая, одно чтение может считывать несколько строк одновременно. Добавление «паузы» между записями может просто действовать как разделитель строк.