Pages: [1]   Go Down
Author Topic: Cuestion sobre optimizando de variables globales y normales  (Read 564 times)
0 Members and 1 Guest are viewing this topic.
Orduña- Bizkaia
Offline Offline
Sr. Member
****
Karma: 0
Posts: 317
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola, dentro de mis conocimientos quiero tener lo codigos lo mas optimizados posibles, el caso es que tengo una duda con las variables globales, cuanto ocupan, etcc..

Por ejemplo se pueden poner varias maneras aquellos valores fijos que no se vayan a tocar

#define num_linea 6          // cuanto ocupa en memoria esta opcion?? dicen que es mejor usar const byte en este caso
const byte num_linea=6;   // ocupa 1 byte??

o como variables normales.
byte num_linea=6;  //ocupa 1 byte
int num_linea=6;  //ocupa 2 bytes

En cuanto a las variables que se puedan cambiar sus valores, no entiendo muy bien como funciona volatile, es temporal pero cuando se borra o como funciona. Ocuparia lo mismo un volatile byte num_linea= 6 que un byte a secas???

Otra cuestion es el uso de int_8(lo mismo que byte), int_16(lo mismo que int), o int_32(como un float), esto a la hora de trabajar el micro creo q es lo mismo, pero lleva menos ciclos usarlas asi o da exactamente lo mismo????? Quiero optimizar todo, siempre que vaya a mejor, jejee.

A ver si me podeis aclarar un poco este tema, lo que si me estoy acostumbrando es a usar byte cuando los numeros no son mayor de 255.
Saludos
« Last Edit: May 25, 2013, 12:10:37 pm by riscking » Logged

Donostia
Offline Offline
God Member
*****
Karma: 3
Posts: 743
elektronikadonbosco
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Interesante reflexion. Yo solo te puedo decir que define es una constante por lo que no  ocupa espacio en la ram. Al compilarlo el compilador cambia las constantes por su valor. Sobre el resto no te puedo ayudar. Salu2
« Last Edit: May 26, 2013, 02:58:33 am by ionhs » Logged

Orduña- Bizkaia
Offline Offline
Sr. Member
****
Karma: 0
Posts: 317
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Jeje, nadi controla del tema, con volati letengo mis dudas, por ejemplo dentro de una funcion que se llama al entrar en un menu y luego se sale para entrar en otro y usarla de nuevo, como es mejor declararla como volatile o normal o lo mismo con la i de un for, al compilar al poner como volatile ocupa mas el sketch y bastante mas como 26 bytes que me ha dejado mosca.

Se que es un tema algo complicao.

Saludos.
« Last Edit: May 31, 2013, 06:39:47 pm by riscking » Logged

Palencia, Spain
Online Online
Sr. Member
****
Karma: 25
Posts: 491
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola.
En primer lugar #define no es en sí una variable, por lo que no utiliza memoria por sí. Se trata de una directiva de preprocesador. Puedes verlo como una instrucción de editor buscar y reemplazar, pues hace prácticamente eso, sustituir las ocurrencias de la palabra clave por la definición antes de compilar. Si por ejemplo pones #define pi 3.1416 le estás diciendo al preprocesador que donde encuentre la expresión pi escriba 3.1416.
En cuanto a ocupación de memoria, viene a ser lo mismo preceder la declaración por const o volatile. Lo único que cambia es que se le dan unas instrucciones al compilador. En el caso de const, que lance un error si se trata de modificar dicha variable, y en el caso de volatile se le indica que que siempre que vaya a utilizarla, se debe consultar su valor en memoria, aunque ya esté previamente cargada en un registro. Esto previene que si otro proceso (p. ej. una interrupción) cambia el valor de la variable, utilice el nuevo valor y no la copia obsoleta que tiene en ese registro de trabajo.
No creo que haya ninguna diferencia de velocidad entre trabajar un byte o un int_8, aunque (no estoy seguro) creo que el primero es unsigned (0 a 255) y el segundo signed (-128 a 127). Int_16 es lo mismo que int a secas en este compilador, aunque int_16 es más claro en cuanto al tamaño de la variable. Int_32 no es lo mismo que float, aunque ambos ocupen 4 bytes, ya que uno es entero y otro punto flotante y la forma en que se guarda y trabaja un número difiere totalmente en cada caso. El trabajo con punto flotante requiere más trabajo que con enteros. En resumidas cuentas, siempre que declares una variable piensa en si necesita signo, el valor máximo/mínimo que va a tener, y si es necesario o aconsejable trabajar con punto flotante.
Logged

Pages: [1]   Go Up
Jump to: