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?
A NOP
generalmente toma 1 ciclo de instrucción . El PIC12F675 parece dividir el reloj por cuatro para un ciclo de instrucción:
"Un ciclo de instrucción consta de cuatro períodos de oscilador; para una frecuencia de oscilador de 4 MHz, esto da un tiempo de ejecución de instrucción normal de 1 s." (hoja de datos p. 71)
Entonces, un reloj de 20 MHz le dará un retraso de 200 ns (4/20 MHz).
El AVR utilizado en Arduino OTOH ofrece 1 MIPS/MHz, por lo que a 20 MHz de reloj lo más probable es que dé 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 el que especifica qué nombres debe proporcionar para indicar instrucciones particulares. Por lo general, los ensambladores usarán los mismos nombres para las instrucciones (llamados mnemónicos de instrucción ) que usa la documentación para el procesador, pero no siempre es así. Está preguntando acerca de las instrucciones en dos procesadores diferentes que usan diferentes ensambladores, por lo que, en general, no puede asumir ninguna similitud solo porque los nombres son los mismos.
Sin embargo, a lo largo de los años han surgido algunos nombres de instrucción comunes (aunque ciertamente no estándar). Uno de esos 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, nuevamente, no hay garantía de que esto sea cierto para ningún 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 tal como lo presentan las herramientas arduino. Por lo tanto, no sé qué hace el arduino NOP al que te refieres. Si de hecho simplemente toma un ciclo de instrucción y no hace nada más como sugiere el nombre NOP, entonces sí, tiene el mismo efecto que la instrucción NOP PIC 12F675 (en realidad, un dispositivo central de 14 bits). En los dispositivos tradicionales de núcleo de 14 bits de PIC, NOP toma una sola palabra de instrucción y se ejecuta en un solo ciclo de instrucción.
Los NOP generalmente se usan para insertar esperas cortas en el código, como esperar un microsegundo para que se establezca una línea. Por cierto, en este PIC, si desea desperdiciar 2 ciclos de instrucciones, puede hacerlo con la única instrucción "GOTO $+1" con algunas restricciones que no vale la pena mencionar aquí.
ElectroNoob
ElectroNoob