Краткий ответ - да : вы можете записать UDR в любое время, без каких-либо проверок вперед.
Но, если выходной буфер заполнен (флаг UDRE в UCSRA установленне задан), тогда записанные данные будут игнорироваться передатчиком или, другими словами, они будут потеряны.
Модуль USART имеет двойной выходной буфер.Это означает, что можно записать туда два байта впереди: один передается прямо сейчас, а другой в буфере будет передан позже.Флаги UDRE показывают, когда байт буфера пуст, а флаг TXC показывает, когда байт передачи извлечен.
Итак, если у вас есть способ убедиться, что буфер передатчика не будет переполнен, то это возможночтобы проверить этот флаг на всех.Поскольку получение байта требует ровно столько же времени, сколько и передача, вы можете быть уверены, что прерывания RXC не будут происходить чаще, чем будут передаваться байты, поэтому, если UDR не записан в другом месте, можно предположить, что выходной буфервсегда может принять хотя бы один байт, когда происходит прерывание RXC.
Тем не менее, если UDR записывается где-то еще, возможно, что выходной буфер не будет пустым, когда происходит прерывание RXC, поэтому переданный эхо-байтбудет потеряно.
С другой стороны, хорошая практика программирования - как можно скорее оставлять обработчики прерываний.Вводить циклы ожидания в процедуру обработки прерывания - плохая идея.В этом случае, если вы не можете быть уверены, что выходной буфер будет пуст в событии RXC, лучше либо иметь какой-либо выходной буфер в ОЗУ, который будет обрабатываться в прерывании UDRE, либо выполнять эхо-сигнал вне прерывания RXC.