Los compiladores en la mayoría de los idiomas están programados para optimizar el código de los idiomas superiores, antes de compilarlo en lenguaje máquina. Pero, en ciertas condiciones, el compilador no conoce el flujo de datos completo y las actualizaciones / interrupciones, en cuyo caso la optimización causa errores.
Un ejemplo puede ser el ciclo:
registerX = 0xFF; // o cualquier valor inicial distinto de cero
while (registerX! = 0)
{
// algún código, que no contiene actualización de registerX en el código
}
El código anterior es típico en operaciones de tipo de sondeo , donde está esperando, por ejemplo, un sensor conectado a registerX para detectar algún valor (0 en este caso) después del cual sale del bucle.
¡Pero su compilador no es consciente de que esto es similar a una operación asignada de memoria ! Todo lo que ve es que está esperando que registerX sea 0, cuando no lo está actualizando ni una sola vez en el código. Por lo tanto, se traduce como:
- ¿Cuál será el futuro de los sistemas embebidos? ¿Qué técnicas será la versión avanzada de los sistemas embebidos?
- ¿Cuál es un mejor instituto para hacer incrustado?
- ¿Qué tan bueno es un trabajo en la industria de sistemas integrados? #robetbosch #electrónica
- ¿Cuál es la mejor manera de aprender Linux embebido? ¿Es razonable asistir a un curso de introducción de Linux incrustado a un precio de US $ 400?
- ¿Cuáles son los diferentes usos de los FPGA en sistemas integrados?
mientras que (1)
{
// mismo código
}
lo cual es desastroso en el sistema embebido, ya que los datos del sensor no tienen significado para la respuesta del microcontrolador. Además, los compiladores almacenan el valor de variables no volátiles en ‘ caché ‘ para referencias en todas las iteraciones de bucles. Esto es una falla, ya que el cambio de datos del sensor no será capturado. Por lo tanto, debe usarse volátil para definir registros de hardware en la programación Embebida. De lo contrario, el valor inicial de ese registro se utilizará en todas las iteraciones en dichos bucles. La palabra clave volátil se asegura de que esas variables no se almacenen en la memoria caché, y no se realiza ninguna optimización al respecto.