По поводу чтения данных - родная библиотека uart наверняка использует прерывание прихода символа и по этому прерыванию записывает принятый символ в буфер. Тебе нужно в фоне не только принимать символы но и обрабатывать приходящую информацию?
По-момему обычно всю реально real-time работу выполняют по прерываниям. Приходящую информацию по относительно медленному com порту обычно можно обработать с небольшим запозданием. Поэтому такую работу как раз может быть лучше выполнять в основном цикле программы (разбирая скопившиеся в буфере данные).