Si tengo la siguiente línea de código en un proyecto basado en Arduino:
__asm__("nop\n\t");
¿Tendrá esto exactamente el mismo efecto que nop en PIC12F675? ¿Importa que el PIC en cuestión y el Arduino puedan operar a diferentes velocidades?
Si tengo la siguiente línea de código en un proyecto basado en Arduino:
__asm__("nop\n\t");
¿Tendrá esto exactamente el mismo efecto que nop en PIC12F675? ¿Importa que el PIC en cuestión y el Arduino puedan operar a diferentes velocidades?
Un NOP
usualmente toma 1 ciclo de instrucciones . El PIC12F675 parece dividir el reloj entre cuatro para un ciclo de instrucción:
"Un ciclo de instrucciones consta de cuatro períodos de oscilador; Para una frecuencia de oscilador de 4 MHz, esto da una normalidad. tiempo de ejecución de instrucciones de 1 \ $ \ mu \ $ s. " (hoja de datos pág. 71)
Por lo tanto, un reloj de 20 MHz le dará un retraso de 200 ns (4/20 MHz).
El AVR utilizado en Arduino OTOH entrega 1 MIPS / MHz, por lo que a un reloj de 20 MHz lo más probable es que tenga un retraso de 50 ns (1/20 MHz).
Cada procesador tiene su propio conjunto de instrucciones y, por lo tanto, su propio lenguaje ensamblador. En realidad, puede haber diferentes ensambladores para el mismo procesador, cada uno con una sintaxis un poco diferente. Es el ensamblador que especifica qué nombres debe proporcionar para indicar instrucciones particulares. Normalmente, los ensambladores utilizarán los mismos nombres para las instrucciones (llamadas mnemonics de instrucciones ) que utiliza la documentación para el procesador, pero no siempre es así. Solicita instrucciones sobre dos procesadores diferentes que usan ensambladores diferentes, por lo que en general no puede asumir ninguna similitud simplemente porque los nombres son los mismos.
Sin embargo, a lo largo de los años, han surgido algunos nombres de instrucciones comunes (aunque no estándar). Uno de estos nombres es NOP, que se refiere a Sin OPERACIÓN . La mayoría de los procesadores tienen una instrucción que no hace nada, y la mayoría de los ensambladores llaman a esta instrucción NOP. Sin embargo, una vez más, no hay garantía de que esto sea cierto para cualquier ensamblador, por lo que siempre debe verificar en lugar de asumir.
No estoy familiarizado con el conjunto de instrucciones AVR, y ciertamente no estoy familiarizado con él como lo presentan las herramientas arduino. Por lo tanto, no sé qué hace el arduino NOP al que te estás refiriendo. Si, de hecho, simplemente toma un ciclo de instrucciones y no hace nada más como lo sugiere el nombre NOP, entonces sí, tiene el mismo efecto que la instrucción NOP del PIC 12F675 (en realidad un dispositivo central de 14 bits). En los dispositivos PIC tradicionales de 14 bits, NOP toma una sola palabra de instrucción y se ejecuta en un solo ciclo de instrucciones.
Los NOP se usan generalmente para insertar esperas cortas en el código, como esperar un microsegundo a que se estabilice una línea. Por cierto, en este PIC, si desea perder 2 ciclos de instrucción, puede hacerlo con la única instrucción "GOTO $ + 1" con algunas restricciones que no vale la pena incluir aquí.