SLEEP o ocupado en espera. ¿Cuál sería el servicio de una interrupción más rápido?

3

Estoy programando un microcontrolador PIC para atender dos eventos a través de interrupciones en un entorno muy limitado de tiempo.

Los microcontroladores PIC permiten un modo SLEEP que activa a la PCU en cualquier interrupción externa (INTn) pero tiene un retardo de activación dependiendo del modo de oscilador seleccionado.

Quiero saber qué opción comenzaría a atender las interrupciones más rápido. Un bucle principal como este:

//CPU never goes to sleep, keeps executing a jump
void main(){
    while(1){}
}

o un bucle principal como este:

//CPU goes to sleep (idle), waits for INTn interrupts.
void main(){
    while(1){
     asm SLEEP;
    }
}

El despertar del sueño inactivo parece tomar 2 ciclos de acuerdo con el PIC18F4XK22 mientras que una instrucción de salto (de un bucle de tiempo infinito puede demorar más y puede ser interrumpible hasta la mitad de la ejecución del salto.

    
pregunta NeonMan

1 respuesta

1

Tú mismo lo dijiste, despertarte del sueño conlleva cierto retraso, dependiendo del oscilador. El retraso será relativamente pequeño para los osciladores R-C y mucho más largo para los osciladores de cristal.

El segundo método usa menos energía, asumiendo que puedes dormir el tiempo suficiente en promedio para que la corriente reducida sea significativa.

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas