¿Las variables globales consumen más poder que las variables locales en los sistemas integrados?

2

Hoy mi colega del trabajo dijo que el acceso a las variables globales en los microcontroladores consume más poder que el acceso a las variables locales, desafortunadamente ella no lo explicó. Al principio, los valores de las variables globales se copian en la RAM y luego operamos con los valores de la RAM, entonces, ¿cómo funciona que consuman más energía? ¿Se almacenan las variables locales en los registros de la CPU, no en la RAM? Estamos programando en lenguaje C utilizando GCC.

    
pregunta Al Bundy

1 respuesta

6

Supongo que eso es lo que ella tenía en mente. Las variables almacenadas en los registros necesitarían menos energía para acceder ya que no hay bus, descodificación de direcciones y todo lo que necesita para el acceso a la RAM.

Lo más probable es que las variables globales siempre se almacenen en la RAM si no haces cosas locas con tu compilador (asignando un registro para una variable).

Pero no puede estar seguro de que las variables locales no se almacenarán en la RAM. Su controlador solo tiene una cantidad muy limitada de registros disponibles, algunos de ellos serán necesarios para realizar otras operaciones. Si necesitas más variables locales, terminarás en la memoria RAM también.

Al llamar a una función, las cosas se insertan en la pila, que también es RAM. La mayor parte del código se almacena en flash y la lectura desde allí consume mucha más energía que desde la RAM.

Entonces, si este fuera un argumento para detener el uso de variables globales, diría que es bastante débil.

En realidad, encontré esto (debido a la sugerencia de MSP430 en los comentarios):

  

Asesor ULP > Regla 7.1 Use variables locales en lugar de globales cuando sea posible

     

Los compiladores de C para los microcontroladores en general y para las MCU MSP430 asignan específicamente las variables declaradas en el ámbito global en la ubicación de la memoria RAM de la estructura de la memoria. Por otro lado, las variables locales se asignan primero en los registros de la CPU (hasta que la función se queda sin registros de la CPU para sus variables locales). Los accesos a los registros de la CPU son los más eficientes y rápidos, en comparación con los accesos a las ubicaciones de memoria en la RAM o, lo que es peor, en FLASH. Por lo tanto, cualquier variable global a la que solo se acceda dentro de una función se puede reubicar de manera segura en el ámbito de la función local para optimizar la velocidad de acceso a la memoria y el consumo de energía.

Así que sí, ella probablemente estaba pensando en esto. Pero me pregunto cuántos ahorros puedes obtener realmente.

    
respondido por el Arsenal

Lea otras preguntas en las etiquetas