Я бы вообще руки отрывал за использование С++ с его жутким оверхедом на микроконтроллерах!
В данном случае даже glibc нафиг не нужна: реализуем strcmp() вручную, аналогично поступаем для memmove и прочих полезных функций. В итоге код будет небольшим + шустрым.
Если нужно сравнить содержимое полученной строки с эталоном, то просто пишем
int strcmp(char *a, char *b){
int ret = 0;
do{ ret = (int)(*a++) - (int)(*b++); }while(!ret && *a && *b);
return ret;
}
char *in = get_serial_buf(); // функция, возвращающая указатель на первый байт в кольцевом приемном буфере USART
char *ref = "строка";
if(!strcmp(in, ref)){ // действия, выполняемые при равенстве строк
}
Если нужно найти подстроку, то аналогичным образом реализуем функцию strstr:
int strstr(char *haystack, char *needle){
char *ret = NULL, *n = needle+1, n0 = needle[0];
do{
int cmp;
if(*haystack != n0) continue;
ret = haystack++;
do{ cmp = (int)(*haystack++) - (int)(*n++); }while(!cmp && *haystack && *n);
if(!cmp && !*n) break; // found
ret = NULL; n = needle + 1;
if(!haystack) break; // haystack ended while not found
}while(*(++haystack));
return ret;
}