Programa con 2 bucles y temporización y tal

-1

Entonces, digamos que tengo un prog que tiene un bucle rápido @e 64uS y un bucle lento @e 8mS. Si el bucle rápido tarda 34uS en ejecutarse, ¿necesito asegurarme de que el bucle lento pueda ejecutarse en 30uS para no ser interrumpido?

Parece que a veces, si un bucle sigue interrumpiendo, otras cosas malas sucederán. ¿Es esto cierto & gt ;?

    
pregunta alxcpa01101

3 respuestas

0

Suponiendo que estás utilizando un microprocesador con sus propias interrupciones de hardware, deberías poder configurar dos temporizadores de hardware (a menos que sea un micro muy básico) y luego asignar una rutina de interrupción a cada uno, configurar los temporizadores con el período correcto , y todo sucederá.

El lento se "detendrá" si el rápido ocurre mientras se está ejecutando. Cuando ninguno de los dos se está ejecutando, puede ejecutar código no sensible al tiempo en el ciclo principal ().

Hasta ahora, otras respuestas parecen asumir un sistema operativo con su propio sistema de prioridad / interrupción, lo que supone una gran sobrecarga de tiempo, espacio y complejidad en la mayoría de los micros. Si lo hace con los temporizadores de hardware que pueden interrumpir el hardware, la respuesta será mucho más rápida.

Sin más detalles (MCU, idioma, más descripción del código ...) es muy difícil ser mucho más útil.

Como suena como si esto fuera un poco nuevo para ti, sugeriría leer sobre cómo escribir código que no se caiga sobre sí mismo cuando una rutina de interrupción cambia algo en medio de la otra haciendo algo; requiere un poco de pensamiento! Si los tiempos son muy críticos, es posible que tenga que ajustar los valores del temporizador para permitir que se produzca la interrupción, algunos temporizadores pueden generar errores del período +/- 1 debido a la forma en que funcionan los contadores: preguntar yo como lo se!

    
respondido por el John U
0

Necesitas programar la lógica en tus bucles. Háganlos conscientes el uno del otro. Como idea, puede establecer una variable global al principio del bucle y al final del bucle cambiando la variable global de 0 a 1 o lo que sea. Haga la otra comprobación de bucle para ver si la variable global es verdadera y luego ejecute el bucle, si no, espere x la cantidad de tiempo. Simple si se debe usar la declaración.

¿En qué lenguaje estás programando?

    
respondido por el user2097165
-1

Lo que puede hacer es tener un solo bucle que controle una fuente de reloj en tiempo real (como un registro de recuento de ciclos de bus o cualquier cosa de ese tipo), observe una tabla de programación y llame a las funciones registradas en los momentos correctos . Si una acción periódica que se lleva a cabo cada 8 ms se programa al mismo tiempo que una acción que se realiza cada 64 us, tal vez el 64 us puede tener prioridad. Si la acción de 8 ms se retrasa 30 veces, no es una gran perturbación en su período. La acción que se ejecuta primero si se programan al mismo tiempo se puede resolver al tener un campo de prioridad adjunto a la acción.

    
respondido por el Kaz

Lea otras preguntas en las etiquetas