Al trabajar 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 enfatizan 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 temporizadores de hardware.
http://betterembsw.blogspot.in/2012/12/software-timing-loops.html
Pero esto no enfatiza el caso cuando los temporizadores h/w están disponibles en el controlador que estamos usando.
Por retrasos de hardware quise decir 'Temporizadores'.
La ventaja de usar temporizadores para realizar un retraso es que proporcionan una forma de permitir el conteo asíncrono. Al usar un "retraso 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 dado) y bloqueando así el resto de la ruta de ejecución del código.
Si la demora del hardware es tan buena, ¿por qué se necesitan las demoras del software?
Un retraso de software es más fácil de implementar y puede ser suficiente si es solo un retraso muy corto que no interrumpe significativamente ninguna otra tarea en la ruta de procesamiento de código secuencial principal. Además, los temporizadores pueden estar en uso para algunas otras tareas relacionadas con el hardware, como la generación de PWM, y es posible que no estén "libres" para configurarse de acuerdo con sus requisitos de retraso.
Otro caso de uso sería algún retraso inicial que se requiere antes de que se ejecute el ciclo principal. No habría necesidad de utilizar un retardo de hardware en ese caso.
Una última cosa que me viene a la mente es que un retraso de software no requiere que las interrupciones estén habilitadas globalmente, mientras que es un requisito para retrasos basados en temporizadores (al menos para el caso de uso común).
Siempre que sea posible, normalmente usaría un temporizador y un retraso de software por las siguientes razones
Un tiempo de retraso basado en un temporizador es fácil de calcular ya que sabe cuánto dura un tic. Un retraso de software puede optimizarse si su compilador es demasiado inteligente o dado que muchos procesadores modernos usan una tubería, es difícil calcular con precisión la cantidad de tiempo que tomará un bucle de software simple.
A menudo puede usar un temporizador para generar una interrupción para poder continuar con otras tareas.
¿Cuándo no usaría un temporizador?
Si no tuviera uno de repuesto
Si necesitaba un retraso 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 corto como unos pocos ciclos de reloj, por lo que no sería beneficioso usar un temporizador.
Los temporizadores de hardware son muy precisos, pero normalmente hay un número limitado de ellos disponibles. 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 utiliza en muchos sistemas es configurar un temporizador de hardware para generar una interrupción de "tictac" periódica precisa a una velocidad conocida, y luego implementar una cantidad arbitraria de temporizadores de software (cuya resolución es el período de tictac) en función de esa interrupción. .
Las tasas de ticks varían, desde los 18,20651 Hz [1] utilizados en la PC IBM original, hasta los 10 kHz o más en algunos sistemas integrados en tiempo real.
[1] El valor exacto es . Brownie señala a la primera persona que puede explicar completamente de dónde viene este número.
Andy alias
Colina de Warren
Spehro Pefhany
Juan U.
Spehro Pefhany
Rdo
Nick Alexeev