Достаточно "сообщение" преобразовать в строку - примерно так
int getline(char * buf, int maxlen){//приём строки
int ch;
int len = 0;
if(maxlen < 2) return -1;
while(1){
ch = getchar();
//if(ch < 0) continue; // случай неожидающего int getchar(void)
if(ch == 0x0D) continue;
if(ch == 0x0A){
*buf = '\0'; break;
}
*buf++ = ch; //загружаем символ в буфер строки
len++;
if(len >= maxlen-1){
*buf = '\0';
break; //return -2;
}
}
return 0;
}
- чтобы далее использовать функции работы со строками (strlen, strncasecmp и др.).
Для очистки строки достаточно в младший элемент записать бинарный ноль
void srclr(char * buf){
*buf = '\0';
}
Манипулирование буферами и прерываниями это вопрос конкретной модели программы и решений есть мульён. Я обычно (если ОЗУ позволяет) держу кольцевой буфер для UART, ну и рабочий буфер для принятой строки. Использую неожидающую функцию getchar(), которая аж даёт следующий символ из буфера приёма (буфера UART-а), а при отсутствии оного выдаёт int -1. Соответственно в обработчике прерывания Rx UART-а произвожу аж заполнение кольцевого буфера.