Чтобы конкретно ответить на ваш вопрос, вы можете проверить готовность полученного буфера (при условии, что после получения "\ r \ n") для анализа:
void dispatchMsg()
{
static int end_char_count = 0;
while(sim.readable() && end_char_count < 2){
char c = sim.getc();
buffer[count++] = c;
if(c == '\r' || c == '\n')
end_char_count++;
else
end_char_count = 0;
}
//Here i want to wait for whole response from uart instead i fetch only one char
if(end_char_count == 2)
{
end_char_count = 0;
analyzeString(buffer);
}
}
Однако обработчик прерываний должен быть максимально быстрым. В противном случае вы можете начать терять последовательные данные. Обычно обработка данных делегируется основному потоку, оставляя данные в буфере / очереди и опрашивая основной поток для получения полных данных. Драйверы UART и ATCmdParser сделают это за вас, как указано @ Jan.
Кроме того, если ваш вопрос находится в контексте команд AT, то можно получить многострочный ответ. В этом случае ваш analyString () должен выполнять некоторую похожую буферизацию, пока не будут получены все ожидаемые строки. Или расшифруйте ответ при получении каждой строки.