Может ли это быть сделано лучше?
"Как только" ввод "нажал, ISR (не показан) выходит, и мы вернулись в основной" наиболее необычно .
Я не знаком с Usart
, чтобы предлагать более авторитетно.
Более распространенная парадигма - хранить входящие данные в циклической очереди и увеличивать счет при поступлении '\n'
и счет байтов в очереди.
Читатель, чем убывает, как только он их выводит.
Необходимо соблюдать осторожность, чтобы ISR не активировался, когда другой код обращается к этим переменным, и наоборот.
Ключевым недостатком подхода OP является предположение, что основной код выполнит все после того, как '\n'
поступит еще до того, как начнется следующее сообщение. Я бы на это не рассчитывал.
ИМО, код нарушается разными способами:
Нет нулевого символа
ststr(temp, "\r");
ожидает, что temp
будет содержать '\0'
после последнего введенного символа. Вместо этого он имеет остатки от предыдущего и склонен к переполнению буфера.
Гораздо лучше обрабатывать входящие данные как байты массива, чем C строка .
Отсутствует код?
Ниже указано «приращение для каждого полученного байта», но нет кода, который указывает, что.
Отсутствует код?
Ничто не указывает usart
прекращает заполнение arr
при 30 байтах.