Я наблюдаю непоследовательное поведение в отношении окончания строк при переносе встроенного проекта из 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 в обеих архитектурах?
Я наблюдаю непоследовательное поведение в отношении окончания строк при переносе встроенного проекта из [b]SAMD51[/b] в [b]STM32[/b] с использованием платформы Arduino. В SAMD51 Serial.println() ведет себя так, как ожидалось (один \r\n). Однако на STM32 (с использованием ядра STM32Duino) я наблюдаю «двойной» возврат каретки/перевод строки при определенных условиях. Признаки: [list] [*]При печати шестнадцатеричных буферов или числовых значений: Serial.println(0x01fff); → Вывод: 01fff\r\n (правильно)
[*]При печати строковых констант или кодов ошибок: Serial.println("ERROR QUEUE EMPTY"); → Вывод: ERROR QUEUE EMPTY\r\n\r\n (неожиданный дополнительный CRLF)
[*][b]Сравнение:[/b] То же код работает безупречно на SAMD51 (Adafruit Core).
[/list] Что я исследовал: [list] [*]Я проверил, содержат ли мои строковые константы \n, но сокращение последних записей сокращает все, что находится перед первым \r\n, и условная логика (в зависимости от окончания) тоже не работает.
[*]Я подозреваю, что существует разница в том, как реализован Print::println() или как базовый UART HAL обрабатывает буфер передачи в ядре STM32.
[*]Я искал переопределения Serial.write(), которые могут автоматически конвертировать \n в \r\n, в то время как println также добавляет свои собственные.
[/list] Вопрос:
Имеет ли ядро STM32 Arduino известную функцию «авто-CRLF» в своей реализации HardwareSerial, которая может конфликтовать со стандартной логикой Arduino.h? Как я могу обеспечить согласованность одного \r\n в обеих архитектурах?