Saltar al contenido

¿Cómo funciona __delay_cycles?

Contamos con tu apoyo para difundir nuestras crónicas con relación a las ciencias informáticas.

Solución:

De MSP430 Optimizing C/C++ Compiler v 3.1 User’s Guide (SLAU132c.pdf) pp. 109:

El código intrínseco de __delay_cycles inserta para consumir con precisión la cantidad de ciclos especificados sin efectos secundarios. El número de ciclos retrasados ​​debe ser una constante de tiempo de compilación.

Es una función intrínseca, diseñada específicamente para agotar ciclos. Debería ser bueno para al menos ese número de ciclos. Puede cambiar 1000 a otra cosa (debe ser una constante, no puede ser una variable). Tanto el bucle for como la llamada a la función se sumarán al retraso.

Adicionalmente:

sí, con el código habrá un pequeño error de “compensación” y “ganancia” en el retraso real que obtienes. El código es bueno para garantizar un cierto retraso mínimo, con un error muy pequeño en la dirección positiva. Es por eso que el retraso dentro del bucle se eligió bastante grande (“ms”). Si necesita un retraso total, la mejor manera sería usar un temporizador. Pero si, por alguna razón, aún desea usar los retrasos de SW, recomendaría codificar una función en ensamblador en lugar de medir la función C. Puede compensar en la función misma los errores de “compensación” y “ganancia” de la llamada y la sobrecarga del bucle. Además, nuestros IDE tienen funciones de contador de ciclos que puede usar para analizar la función de retraso. Pero para los retrasos de SW, tenga en cuenta que las interrupciones podrían activarse (si están habilitadas) y cambiar su retraso observable resultante.

Empleados de TI en sus foros de soporte.

Mire el desensamblado del código, recuerde que el ciclo for agrega algunas instrucciones que toman algunos ciclos. Con un bucle de 5000, estos ciclos adicionales se sumarán. Además, ¿cómo delay_cycles() se implementa puede hacer una gran diferencia.
Puede contar los ciclos de cada ciclo en el simulador, hacer los cálculos y compensar los ciclos agregados pasando el valor apropiado.

Por supuesto, la mejor manera de obtener una sincronización precisa es usar interrupciones, pero usted dice que quiere evitarlas por ahora.

Sección de Reseñas y Valoraciones

Al final de la post puedes encontrar las aclaraciones de otros administradores, tú asimismo tienes la opción de insertar el tuyo si lo deseas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *