Los compiladores más sofisticados se han creado para optimizar el programa, especialmente en dos factores: memoria y velocidad. En el sentido de aumentar la velocidad, los compiladores usan algunas unidades de almacenamiento temporales llamadas “registros” (a veces también caché). Por lo general, el resultado de cualquier operación que se haya realizado en ALU se almacenaría en la memoria de datos. Algunas veces se almacena en registros y se puede acceder a él más rápidamente que el tiempo que tarda el acceso a la memoria desde la memoria de datos.
Volviendo al uso de volátil, es una palabra clave que se usa ampliamente en C incrustado, ya que implica el concepto de manejo de interrupciones. Hay algo llamado ISR (), un bloque o un segmento de función que se hace para realizar una tarea particular y esto se ejecuta cada vez que se genera la interrupción respectiva. Se recomienda tener un código mínimo dentro de ISR (). Porque si este ISR () tiene más instrucciones de programa para ejecutar o si tiene varias llamadas de función, puede suceder que la ejecución se bloquee en cualquier momento durante la ejecución, ya que se está ejecutando por una interrupción que se puede generar con frecuencia con muy menos valores delta (diferencia de tiempo entre dos interrupciones consecutivas).
Entonces, la única forma de ejecutar un gran conjunto de instrucciones sobre la interrupción es establecer una variable en ISR () y salir de ella. En un bucle que se ejecuta continentemente, podemos hacer que nuestro gran código se ejecute con la verificación de que si el indicador es alto (se produjo una interrupción).
- ¿En qué formalismo matemático se basa la programación orientada a objetos (OOP)? ¿Se desarrolló algún formalismo después de que la POO se generalizó?
- ¿Cómo juegan las matemáticas un papel importante en la programación?
- Estoy tomando SL Maths para el Diploma IB, ¿sería esto suficiente para universidades como UCB, UCLA, GaTech for Computer Science?
- ¿Cuáles son los conceptos matemáticos necesarios para la inclinación de la máquina y la programación?
- ¿Qué es un buen algoritmo para convertir un número decimal de coma flotante con muchos, muchos decimales en el equivalente binario?
“Volátil” es la palabra clave con la que declaramos cualquier variable cuyo valor se esté modificando dentro de ISR () y también fuera de ISR (). La declaración es algo como esto,
bandera booleana volátil = FALSO;
volatile le dice al compilador que no lee los registros, sino que lee la variable de la memoria de datos o de la memoria original. Básicamente, la memoria de datos sería la memoria original donde las variables se actualizan con cada modificación en el programa. La memoria de registro o caché copiará el contenido de la memoria original o de datos.
Si una variable no se declara como volátil y se está utilizando dentro y fuera de ISR (), entonces los compiladores más recientes pueden buscar la optimización allí. Supongamos que ISR () es invocado por una interrupción, donde el indicador se establece en ALTO. Esto se establece ALTO en la memoria original o de datos primero, y nuestro compilador puede obtener el valor de la variable del registro de caché en el que los datos aún no se copian.
Por lo tanto, siempre es mejor usar volátiles y evitar este conflicto. Debido a que cualquier cambio en el código se refleja solo en la memoria de datos (memoria original), algunos compiladores pueden copiar esos valores en los registros de la memoria caché para acelerar la ejecución o el acceso a la memoria y otros no.
“Volátil” garantiza que el acceso a la memoria se realice desde la memoria original (datos) y no desde la memoria caché o registros temporales.
Es tan bueno como decir “los datos originales son confiables o más confiables que una copia xerox”.