STM32 Arduino Core: неожиданное двойное поведение CRLF в Serial.println и SAMD51C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 STM32 Arduino Core: неожиданное двойное поведение CRLF в Serial.println и SAMD51

Сообщение Anonymous »

Я наблюдаю непоследовательное поведение в отношении окончания строк при переносе встроенного проекта из SAMD51 в STM32 с использованием платформы Arduino.
В SAMD51 Serial.println() ведет себя так, как ожидалось (один \r\n). Однако на STM32 (с использованием ядра STM32Duino) я наблюдаю «двойной» возврат каретки/перевод строки при определенных условиях.
Признаки:
  • При печати шестнадцатеричных буферов или числовых значений: Serial.println(0x01fff); → Вывод: 01fff\r\n (правильно)
  • При печати строковых констант или кодов ошибок: Serial.println("ERROR QUEUE EMPTY"); → Вывод: ERROR QUEUE EMPTY\r\n\r\n (неожиданный дополнительный CRLF)
Моя среда:
  • Среда: PlatformIO (оба)
  • Ядро: STM32Duino
  • Аппаратное обеспечение: STM32F446RE (NUCLEO)
  • Сравнение: То же код работает безупречно на SAMD51 (Adafruit Core).
Что я исследовал:
  • Я проверил, содержат ли мои строковые константы \n, но сокращение последних записей сокращает все, что находится перед первым \r\n, и условная логика (в зависимости от окончания) тоже не работает.
  • Я подозреваю, что существует разница в том, как реализован Print::println() или как базовый UART HAL обрабатывает буфер передачи в ядре STM32.
  • Я искал переопределения Serial.write(), которые могут автоматически конвертировать \n в \r\n, в то время как println также добавляет свои собственные.
Вопрос:

Имеет ли ядро STM32 Arduino известную функцию «авто-CRLF» в своей реализации HardwareSerial, которая может конфликтовать со стандартной логикой Arduino.h? Как я могу обеспечить согласованность одного \r\n в обеих архитектурах?

Подробнее здесь: https://stackoverflow.com/questions/799 ... -vs-samd51
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»