Я использую Arduino-подобную библиотеку на модуле WiFi ESP8266. Код очень похож на Arduino.Соберите данные из UART на основе нескольких завершающих символов
Я собираю данные от UART и помещаю их в буфер. В настоящее время завершающим символом является '\n'
. Другими словами, поток входящих данных из UART сохраняется в буфере command_buffer
, и конец этих входящих данных идентифицируется '\n'
. Вот соответствующий код;
void onDataCallback(Stream& stream, char arrivedChar, unsigned short availableCharsCount)
{
if (arrivedChar == '\n') // Lets show data!
{
Serial.println("<New line received>");
while (stream.available())
{
char cur = stream.read();
charReceived++;
Serial.print(cur);
command_buffer[index] = cur;
buf_index++;
}
}
}
onDataCallback()
является функцией обратного вызова, которая вызывается, когда входные данные, полученные от UART.
Это моя проблема. Что делать, если конечный символ не является одним символом '\n'
? Что, если он состоит из нескольких двоичных символов, таких как <0xFF><0xFE><0xFA>
?
Arduino-подобные библиотеки поступают из рамок SMING. https://github.com/SmingHub/Sming
Спасибо. Upvoted. Выглядит неплохо. Я искал ответ, более подходящий для Ардуино. Я не уверен, что существуют эквивалентные функции для строковых функций 'push_back',' erase' и 'clear'. Во всяком случае, ваш ответ дал мне хороший головной убор. Большое спасибо! – user781486
Если 'std :: string' не полностью реализована, вы все равно можете использовать буферы старого стиля. Удачи. – YSC