Проблемы с чтением строки за строкой и записью с помощью boost::asio::запись в устройство с последовательным портом

#c #serial-port #boost-asio

#c #последовательный порт #boost-asio

Вопрос:

Что я пытаюсь сделать:

  1. Загрузка и чтение строки в файле
  2. запись в последовательный порт

Проблема: требуется время ожидания, иначе данные отправляются слишком быстро, и плата не может обрабатывать сообщения одно за другим.

Мой фрагмент кода:

 //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. Прочитанный вы уверены, что сторона чтения не считывает несколько строк в одном чтении? Если сторона записи достаточно быстрая, одно чтение может считывать несколько строк одновременно. Добавление «паузы» между записями может просто действовать как разделитель строк.