Есть ли существенная разница между возвратами каретки для Arduino?
Serial.write(0x0d); // шестнадцатеричный
Serial.write(13); // ASCII
Serial.write('\r'); // символ
Есть ли более эффективный? Я читал, что это зависит от терминальной программы. Так это означает IDE? (Это мой первый опыт работы с последовательной связью.)
@adamaero, 👍1
3 ответа
Лучший ответ:
Как уже упоминалось ранее, они все одинаковы. Вам нужно помнить, что компилятор берет написанный вами читабельный код и превращает его в инструкции, которые может понять процессор. Если вы хотите изучить, как компилятор что-то делает, вы можете скомпилировать программу в шестнадцатеричный файл и затем сравнить. Или, для еще меньшей детализации, но гораздо проще, посмотрите на размер файла, созданного при компиляции в IDE используя только одну строку в функции настройки
write(0x0d) ----> 1334 bytes
write(13) ----> 1334 bytes
write('\r') ----> 1334 bytes
Для этого простого примера мы можем предположить, что все три из них производят один и тот же hex-файл. Существует множество более сложных примеров различных способов выполнить одну и ту же задачу, которые могут производить более или менее эффективный код, но в этом случае компилятор собирается производить тот же набор инструкций для процессора.
Как указано в комментариях, я не говорю, что поскольку они имеют одинаковый размер, они должны быть одинаковым шестнадцатеричным кодом. Поскольку любой записанный один байт даст код того же размера, но не тот же результат. Но при сравнении двух методов, которые, как мы знаем, имеют одинаковую функциональность (0x0d и '\r') и производят двоичный код того же размера, то мы можем предположить, что компилятор сократил их до одного и того же кода.
Один эффективнее?
после компиляции он одинаков для всех нотаций. Функция и значение одинаковы для всех 3 нотаций.
Нет никакой разницы между всеми строками кода в вашем вопросе. Все представления означают одно значение, содержащее один байт. Существует только одна реализация Serial::write()
, которая имеет uint8_t
в качестве параметра. Поэтому все различные представления в любом случае приводят к uint8_t
.
- AT-команда не отвечает на последовательный монитор
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- Как остановить SoftwareSerial от получения данных и повторно включить его в какой-то другой момент?
- Ардуино для чтения с преобразователя RS232 в последовательный модуль TTL
- Не нашел датчик отпечатков пальцев :( Arduino Mega 2560 Adafruit Fingerprint Sensor
- Чтение SMS с помощью Arduino Uno и SIM800L и печать на LCD (16x2 буквенно-цифровых) с использованием последовательного соединения
- Как работает последовательная связь на Arduino?
- Как связаться с ESP8266 ESP01, отправив данные через программный сериал на Arduino Uno?