Retraso de software frente a temporizadores de hardware

4

Trabajando con un microcontrolador, ¿en qué condiciones exactas deberíamos elegir entre temporizadores de hardware y retrasos de software en un controlador integrado?

He visto artículos que hacen hincapié en el uso de temporizadores.

Si los temporizadores son tan buenos, ¿por qué se necesitan retrasos en el software?

Este es el enlace que describe el uso de s / w o cronómetros de hardware.

enlace

Pero esto no enfatiza el caso cuando los temporizadores de hardware están disponibles en el controlador que estamos usando.

    
pregunta Rookie91

3 respuestas

6
  

Por retrasos de hardware me refiero a 'Temporizadores'.

La ventaja de usar temporizadores para realizar un retraso es que proporcionan una manera de permitir el conteo asíncrono. Al utilizar un "Retardo de software", obliga al controlador a poner todos sus recursos en el procesamiento de algún tipo de bucle (incrementando una variable hasta un valor determinado) y, por lo tanto, bloqueando el resto de la ruta de ejecución del código.

  

Si la demora de hardware es tan buena, ¿por qué se necesitan demoras de software?

Un retardo de software es más fácil de implementar y puede ser suficiente si es solo un retardo muy corto que no interrumpe significativamente ninguna otra tarea en la ruta principal de procesamiento de código secuencial. Además, los temporizadores pueden estar en uso para otras tareas relacionadas con el hardware como la generación de PWM y pueden no ser "libres" para configurarse de acuerdo con sus requisitos de demora.

Otro caso de uso sería un retraso inicial que se requiere antes de que se ejecute el bucle principal. No habría necesidad de usar un retraso de hardware en ese caso.

Una última cosa que me viene a la mente es que una demora de software no requiere que las interrupciones se habiliten globalmente, mientras que es un requisito para demoras basadas en temporizador (al menos para el caso de uso común).

    
respondido por el Rev1.0
5

Donde sea posible, normalmente usaría un temporizador y un retraso de software por los siguientes motivos

  • Un tiempo de retardo basado en temporizador es fácil de calcular ya que sabes cuánto dura una marca. Un retraso del software puede optimizarse si su compilador es demasiado inteligente o debido a que muchos procesadores modernos usan una tubería, es difícil calcular con precisión la cantidad de tiempo que tomará un simple bucle de software.

  • A menudo se puede usar un temporizador para generar una interrupción, por lo que puede continuar con otras tareas.

¿Cuándo no usaría un temporizador?

  • Si no tuviera un repuesto

  • Si necesitaba un retardo realmente corto como, por ejemplo, configurar algunas líneas de puerto de salida para una dirección específica y luego bajar otra línea para indicar que quiero leer datos. Tal retraso puede ser tan breve como unos pocos ciclos de reloj, por lo que no sería beneficioso utilizar un temporizador.

respondido por el Warren Hill
5

Los temporizadores de hardware son muy precisos, pero generalmente hay un número limitado disponible. Los temporizadores de software solo consumen ciclos de CPU y espacio de memoria, que son los únicos límites en el número que puede tener.

Un compromiso que se usa en muchos sistemas es configurar un temporizador de hardware para generar una interrupción periódica precisa "tick" a una tasa conocida, y luego implementar un número arbitrario de temporizadores de software (cuya resolución es el período de tick) basado en esa interrupción.

Las tasas de verificación varían, desde los 18.20651 Hz [1] utilizados en la PC original de IBM, hasta 10 kHz o más en algunos sistemas integrados en tiempo real.

[1] El valor preciso es \ $ \ frac {7166250} {393609.216} Hz \ $. Brownie señala a la primera persona que puede completar explicar de dónde proviene este número.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas