Cómo crear una función de retraso en C o C incrustado

¡No no no! Los bucles ocupados para el tiempo son horribles. Son buenos para a lo sumo una cosa: “oye, el hardware está vivo” en la pantalla inicial.

Estás tratando de aprender conceptos integrados ¿verdad? Para su placa de evaluación TIVA Launchpad, vaya a instalar TI-RTOS: Sistema operativo en tiempo real (RTOS). Crea un objeto de reloj. Establezca el intervalo de tiempo deseado. Configure la función de devolución de llamada para apagar y encender el LED.

Lo anterior le brinda una visión de arriba hacia abajo de la arquitectura típica de software del sistema de un uC del tamaño TIVA. Una vez que se sienta cómodo con él, vaya a FreeRTOS, que es de código abierto completo, y realmente investigue cómo funciona.

Si realmente quieres profundizar en el tema, rueda tu propio RTOS. Un buen proyecto sería realizar una programación completa en tiempo real.

nulo delay_sec (int seg)

{

if ((sec + tot_overflow)> = 30000)

{

sec = ((sec + tot_overflow) -30000)

;

}

más

{

sec = sec + tot_overflow;

}

while (sec> = tot_overflow)

{

}

}

ISR (TIMER1_COMPB_vect)

{

TCNT1 = 0x00;

tot_overflow ++;

if (tot_overflow == 30000)

{

tot_overflow = 0;

}

}

Escribo este código de retraso para AVR usando el temporizador y trabajando bien y con precisión.

30000 es el límite que puse por segundos, pero no es problema, puedes dar más que esto. Escribo la lógica para esto en función de retraso

Si hay algún problema, dígame que puedo mejorarlo

Una mejor manera es implementar un temporizador de software utilizando un recurso de hardware como un temporizador o contador, o PWM, que puede generar eventos a una velocidad conocida en función de la configuración y una frecuencia de reloj de entrada.

Una interrupción debe estar vinculada al recuento de terminales del temporizador, y esa interrupción debe incrementar una variable. Esa variable se puede examinar para determinar cuánto tiempo ha pasado desde que se examinó inicialmente.

Esto también libera a la CPU para ejecutar otro código mientras se ejecuta el temporizador. Esto se denomina codificación “cooperativa”, y es una práctica mucho mejor que las funciones de “bloqueo”, pero requiere un poco más de experiencia en el firmware integrado.

El concepto es básicamente el mismo: averigüe cuánto tiempo lleva una instrucción y repítalo para lograr un retraso de parte de ese tiempo. Por lo tanto, debe saber cuántos ciclos de la máquina toma esa instrucción específica y cuál es la velocidad de reloj. Y eso forma tu relación básica.

Sin embargo, este puede no ser el retraso más preciso. Puede obtener demoras más precisas si usa el temporizador / contador interno del controlador.

También tenga en cuenta lo que dijo Dorin Lazăr sobre formas más eficientes de perder el tiempo del procesador. No siempre es posible, pero cuando lo sea, siempre hazlo.

Esta es una espera muy ocupada y definitivamente no quieres hacer eso. En cambio, use una API que su plataforma ofrece; siempre hay un retraso, o la función de dormir en algún lugar. De lo contrario, intente bloquear durante n milisegundos un bloqueo desbloqueable (que ya posee otra entidad). De una forma u otra, su plataforma le ofrecerá esta variante del sueño.

Por qué no desea realizar una espera ocupada:

  1. Come tiempo de procesador y calienta su dispositivo sin ninguna razón.
  2. Impide que otros subprocesos funcionen (si su sistema permite varios subprocesos)
  3. Siempre hay una forma menos hambrienta de hacerlo.
  4. El compilador puede optimizar su espera ocupada en algún momento y no realizar una espera ocupada (o permanecer en espera ocupada para siempre).

Si usa Linux, puede usar las diversas llamadas al sistema para dormir durante milisegundos. Son como “alarma ()” pero usan milisegundos.

timer_settime (2) – Página del manual de Linux

Configura el temporizador y capta la señal SIGALRM cuando expira el temporizador; Aquí hay un código de ejemplo:

Llamadas al sistema Linux

Greg

Hay muchas formas a través de las cuales puede crear una función de retraso.

  1. Los temporizadores de hardware en el microcontrolador se utilizan normalmente para crear una función de retraso.
  2. A través de “for loop” también puede crear la función de retraso, pero no se considera que sea precisa, para lograr la precisión a través de bucles necesita calcular el tiempo que tarda el microcontrolador en ejecutar una sola instrucción.

    Espero que ayude … Gracias por leer … !!!!

Usaría el periférico del temporizador del microcontrolador para generar e interrumpir el evento cada 10 milisegundos y luego usar tantos contadores de software en la rutina del Servicio de interrupción del temporizador como sea necesario.

La forma en que lo hace está desperdiciando demasiado de los procesadores informáticos solo para contar,

Hay cientos de cosas que un microcontrolador puede hacer en 100 milisegundos.

Además, si está utilizando el periférico del temporizador y su microcontrolador admite la función “dormir hasta que se interrumpe”, ahorrará considerable energía …

Defina el reloj según los requisitos y el hardware.
Luego use for loop para crear demora. En el interior del bucle, utilice el operador de incremento o decremento según el retraso requerido y la frecuencia de operación

El TM4C123 tiene seis temporizadores de 16/32 bits y seis temporizadores de 32/64 bits. ¿Seguramente uno de ellos no se está utilizando? Configure uno como un temporizador de 100 ms y use la interrupción. Sí, esto implicará abrir la hoja de datos y rascarse la cabeza. El valor de carga del intervalo del temporizador a 80MHz será 0x7A1200 durante 100 ms.

Si se trata de un solo subproceso y no hay sistema operativo que hable del temporizador establecido y luego espere la interrupción, Esperar interrupción pone a la CPU en estado de baja potencia. El temporizador (u otra interrupción) lo despierta más tarde.
La espera ocupada siempre es mala.

Si tiene un sistema operativo, entonces nanosleep () funciona.

Si estamos usando Embedded C, podemos usar temporizadores para crear demoras precisas.

Si usa avr studio, podemos usar la función predefinida para el retraso llamada _delay_ms () para el retraso de microsegundos y us () para el retraso de micro segundos.

Si no desea utilizar funciones predefinidas, podemos retrasar el uso del temporizador para demoras precisas.

Para más consultas, visite http://www.samriddhitechnologies.in

SysCtlDelay (100)

O

Retraso (100)

Hay funciones en TIVA que están destinadas al retraso.

Esto es lo que sucede cuando comienzas con conocimiento medio cocinado.

Utilice la función de retraso (valor) con el archivo de encabezado dos

Use para el bucle en lugar del bucle while

More Interesting

¿Ha fallado Java a la altura de sus esperanzas desde que apareció en escena a principios de los 90?

¿Es posible vivir el sueño del snowboard / mountain bike y desarrollar software independiente desde las montañas?

¿Cómo es el mercado laboral para un programador Java vs. C #?

¿Cuándo es un buen momento para comenzar a corregir errores menores en un programa?

¿Por qué la ley ignora el costo y la propiedad de la electricidad cuando se considera la funcionalidad del software de la computadora?

Estoy escribiendo una tesis escolar sobre TDD aplicado a aplicaciones web. ¿Qué tipo de proyecto sería mejor para exhibir TDD?

¿Cuál es el rango actual de costos por hora (en USD) para desarrolladores de software rusos de alta calidad (front-end y back-end)?

¿Qué lenguaje de programación debo aprender ahora si estoy comenzando mi carrera como desarrollador de software? ¿Cuál tendrá buenas oportunidades en el futuro?

¿Cuáles son las opciones de carrera para ingenieros de software?

¿Qué compañía inventará una mejor arquitectura de placa base para admitir la computación paralela eficiente? Intel, ATI / AMD, nVidia o Samsung, etc.

¿Estás realmente feliz de trabajar en el sector indio de TI? Cual es tu experiencia

¿Qué computadora portátil (disponible en India) es la más adecuada para un ingeniero de software con un presupuesto de 50 mil rupias?

¿Es la herencia una mala práctica en OOP? Muchos lugares que enseñan patrones de diseño dicen que optan por la composición sobre la herencia, pero ¿qué pasa cuando varias clases comparten la lógica de una clase abstracta como en el patrón de diseño del Método de plantilla?

¿Cómo evitan los ingenieros experimentados en las startups el estancamiento debido al exceso de problemas operativos?

¿Cuáles son los bootcamps o academias de desarrollo a corto plazo (2-12 meses) en todo el mundo para alguien interesado en comenzar una carrera como desarrollador?