Autor Tema: Diferencia entre int xxxx e int const xxxx  (Leído 3424 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Diferencia entre int xxxx e int const xxxx
« en: 21 de Octubre de 2006, 13:37:29 »
Hola foreros. Todas las veces que he escrito programas en lenguaje C, al declarar una variable siempre uso: int variable y para declarar un valor fijo: int const 'constante' pero les digo que lo hacía por costumbre, y que en realidad no le dí importancia entender su significado, hasta que me tocó escribir 16 arrays(8 bits) de 8 datos para un 16F84 y sucedía lo siguiente:

yo escribí inicialmente el código así:

Código: C
  1. #include <16F84A.h>
  2. #fuses XT,NOWDT,PUT
  3. #use delay(clock=4000000)
  4.  
  5. int caracter1_direccion[8]={0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47};
  6. int caracter1_datos[8]={0xf1,0xef,0xe5,0x11,0x2f,0xe3,0xe5,0x2};
  7. int caracter2_direccion[8]={0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f};
  8. int caracter2_datos[8]={0xf,0xf2,0x1,0xe,0xe,0xf,0xf,0xf};
  9. int caracter3_direccion[8]={0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57};
  10. int caracter3_datos[8]={0xfe,0xf5,0xf2,0xec,0xe,0xe,0x0,0xff};
  11. int caracter4_direccion[8]={0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f};
  12. int caracter4_datos[8]={0xff,0xff,0xee,0x46,0xf,0xe,0xe,0xff};
  13. int caracter5_direccion[8]={0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67};
  14. int caracter5_datos[8]={0xff,0xf,0xff,0xe,0xfe,0xee,0xef,0xff};
  15. int caracter6_direccion[8]={0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f};
  16. int caracter6_datos[8]={0x0,0xde,0x13,0x14,0xe3,0x1e,0xde,0xff};
  17. int caracter7_direccion[8]={0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77};
  18. int caracter7_datos[8]={0x0,0xce,0x10,0x13,0x1e,0x1e,0xfe,0xff};
  19. int caracter8_direccion[8]={0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f};
  20. int caracter8_datos[8]={0xc,0x10,0x13,0xd1,0x1,0xdf,0x3e,0xff};
  21.  
  22. void main() {
  23.  ...
  24.  ...  
  25.  ...
  26. }

Bueno si compilamos ese código, el ccs nos dirá que no hay suficiente RAM, quiere decir que todos los arrays se guardaran en la zona de los Registro de Propósito General, y el 16f84 lo que tienen son 68 bytes, que van desde 0xC hasta 0x4F, sacando la cuenta en este programa, cabrian aproximadammente 6 arrays.

si compilamos(con 6 arrays), el ccs me dice  78% RAM y 30% ROM (sumandole otras variables).

pero declarando todos los arrays como: int CONST caracter[n]xxxx

al compilar nuevamente (todos los 16 arrays), el ccs me dice dice un 7% de RAM
y un 46% de ROM

Esto es parte de un código que lo había escrito antes en ensamblador y al llevarlo al C, me encuentro con ese detalle que me genera esta duda. Cuando se declara en lenguaje C como const, ¿los datos se guardan en la ROM?

Salu2

PD: en el link http://www.todopic.com.ar/foros/index.php?topic=5426.0 oshow  menciona algo sobre la asignación de variables en memoria.


La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Diferencia entre int xxxx e int const xxxx
« Respuesta #1 en: 21 de Octubre de 2006, 13:45:07 »
Cierto, Palitroquez, al guardar los valores como CONST se almacenan en la memoria de programa. Si no los declaras como constantes, ocupan espacio de la RAM del micro.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Diferencia entre int xxxx e int const xxxx
« Respuesta #2 en: 21 de Octubre de 2006, 14:20:53 »
Sigo haciendo pruebas con ese mismo código para ver que sucede cuando se declaran en ambos casos. Gracias por sacarme de dudas Nocturno.

Salu2
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek