He creado un programa simple que se ejecuta en un microcontrolador P12F629 con MikroC.
Necesito ejecutar algunas tareas críticas en el tiempo (por ejemplo, aumentar el reloj interno, enviar datos a la matriz de LED, ...).
En lugar de un simple bucle + Delay_ms()
(que tiene su propio conjunto de problemas), uso una interrupción:
void main()
{
InitTimer0();
while(1);
}
void InitTimer0()
{
//setup timer0 interrupt
//...
}
void Interrupt() //will be fired every x ms
{
//perform some time-critical tasks
//e.g. increase internal clock
//...
}
El problema es que un bucle while
consume ciclos de CPU para nada (y por lo tanto reduce la vida útil de la batería).
¿Hay una manera de evitar esto?
Si elimino la llamada while(1);
al final de main()
, el programa se ejecuta exactamente igual. ¿Hace alguna diferencia? ¿Añadir una llamada Delay_ms(1000)
dentro del bucle while ayuda a reducir el estrés de la CPU?
En x86, recuerdo que hay una instrucción halt
que detiene la CPU hasta que se dispara una interrupción externa. Esto sería perfecto aquí. ¿Hay tal cosa en MikroC?