Lo dices bien. Como siempre, hay un "pero".....

Sin entrar en muchos detalles:
1) La mayoria de veces un micro esta esperando sin hacer nada.
2) Normalmente tu programa necesita ir atendiendo diferentes tareas a diferentes frecuencias (por ejemplo, refrescar un lcd cada 200 ms, leer pulsadores cada 50 ms, ... por decir algo).
3) El micro es "tan rapido" que podria ir haciendo diferentes pequenyas partes de codigo, que no alteren el resultado final y tu programa no se quede "esperando" hasta poder hacer la siguiente tarea.
4)
Un microcontrolador es un micro + modulos hardware (UART,TIMERS, RTC,...) que son "independientes" entre si.Ejemplo:
Serial.print(loquesea) => al final pasa por la funcion write que pongo abajo.
Extraido de HardwareSerial.cpp de Arduino core.void HardwareSerial::write(uint8_t c)
{
while (!((*_ucsra) & (1 << _udre)))
;
*_udr = c;
}
Resulta que en Arduino, esa funcion se queda parada hasta que comprueba un flag del registro de la UART que dice que se ha enviado. Haz las cuentas lo que pasa a 9600 baudios si quieres enviar multitud de informacion....
Pues un "truco" seria ir comprobando dicho flag mediante "polling" si ya se ha enviado, y en el caso de que no, sigues haciendo mas cosas, pero si se ha enviado, pues copias el siguiente byte a enviar en la UART. En vez de tener un while que deja "parado" al micro. Ya que el micro y la UART pueden ir trabajando independientemente. Y no tiene sentido que el micro este esperando a que se termine de enviar el dato, cuando de mientras podria estar haciendo otras operaciones.
No se si me he explicado bien.... Aqui hice un post del Timer 2, conmutando dos pines de Arduino a diferentes frecuencias:
http://real2electronics.blogspot.com/2011/01/timer-2.htmlEl ejemplo es la filosofia (en facil) de lo que hace un RTOS. Es decir, si puedes estar contando un evento con un timer, mientras envias datos por serie, mietras recibes por CAN y tu micro estar haciendo otra operacion.
En dicho ejemplo, el micro se pasa la mayoria del tiempo sin hacer nada!!
Saludos
Igor R.