Variables Const se guardan en RAM o en ROM?

#1
Estimadísimos!

Una pregunta corta:

Trabajando en programación C de CCS para Pic, me gustaría saber lo siguiente:

Dónde se guardan las variables tipo CONST? Se guardan en la ROM o en la RAM?

Concretamente, es un 18F2550, y necesito guardar en el unas gigantescas tablas de datos (al rededor de 8 KB). Estas tablas en el programa están declaradas como CONST.
Como sabemos, el 18F2550 tiene 32KB de rom, lo cual es suficiente.

Quisiera poder evitar meter estas tablas en una eeprom externa, ya que si encuentro la forma de meter estas tablas en la ROM, estóy listo.

Al CCS se le puede configurar, para que lo haga así?

Muchas gracias!
Saludos!
 
#2
No estoy seguro del todo, pero pienso que las tablas de constantes las guarda en la rom. Prueba a compilar el programa sin tablas y mira el uso de la memoria, y luego compila con tablas y mira que memoria es la que ha ocupado.
 
#4
Eliusum

Cuando declaras una tabla como esta en el CCS:

const char tabla[]={1,2,3,4};

Se guarda en la memoria flash del PIC.

Tené mucho cuidado con el CCS, tiene importantes bugs que te van a hacer doler la cabeza, especialmente cuando declarás tablas. Mi experiencia con éste compilador, es que funciona bien si las tablas son tablas de char, declaradas como te mostré arriba. Si declaras estructuras const, o tablas de otro tipo de datos, te vas a pelear con los bugs del compilador. Para evitar los bugs, te conviene "espiar" el assembler que genera, y por consejo, no hagas tablas mayores que 2k.
 
#6
Yap! Volví después de hacer algunas pruebas.

Tal como uds. me decían, otro amigo también me dio la buena idea de revisar el assembler.
Pero esto resultó a medias, ya que cuando por ejemplo dice "void main", lo deja tal cual en el assembler. Lo de la declaración de variables también... asique no me sirve para ver.

Ok, hice entonces una tremenda tabla de declaraciones CONST (una que ya debería pesar varios KB). Además reduje la optimización del compilador al mínimo para que no obvíe cosas. Y nada, la memoria no sube y no sube ... CCS me dice 0% of ROM a cada rato...

El pic 18f2550 si tiene 32KB. Otros de la misma familia tienen mínimo 24KB.

En el manual del CCS al igual que nuestro amigo más arriba dice también que las tablas las guarda en la ROM. Eso ya me deja más tranquilo.

La importancia de este Post queda en la inquietud de saber, con evidencia física, dónde se guardan las variables const y las tablas.

Muchas gracias por su ayuda. Si hay más ideas.. ...
Saludos!
 
#8
Especifique. jajajaja.

La tabla que necesito guardar pesa como 8 KB si la guardo en block de notas de windows. Eso si, habría que descontar las comas y los {}.

Saludos!
 

Temas similares

Arriba