Autor Tema: Arrays y poco espacio en RAM, ¿cómo lo soluciono?  (Leído 3120 veces)

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

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Arrays y poco espacio en RAM, ¿cómo lo soluciono?
« en: 07 de Abril de 2014, 14:26:11 »
Hola a todos, antes de nada decir que estoy utilizando MPLAB, CCS, PIC16F876A.
 Estoy metido en un proyecto que utilizo un teclado y un LCD 16x2, en el LCD despliego un menú para operar con el teclado y como en las 16 posiciones del LCD no me cabe todo el texto que quiero desplegar he hecho que el texto se desplace en un array de 16 posiciones y mientras voy imprimiendo el array.

ósea, tengo varios arrays de arra[40], arra1[24], array2[60]......etc y esos arrays los paso a una función que hace que esos arrays se desplacen en el LCD.

hasta ahí todo está genial, la función trabaja bien y eso perooooo, (¿por que siempre hay un pero leñeeee?) con tan solo dos o tras arrays de 40 0 50 posiciones me dice el compilador que la memoria está llena y bla bla bla,..... casi no tengo código en el programa, cuando compilo me dice que el RCM = 19% y RAM 50% - 100% y si le pongo un array más ya me da error y no compila.
según creo la ram se ha llenado, pero cuando le das a la opción de memory usage gauge está solo la cuarta parte en verde, ósea solo la cuarta parte usada.

¿Por qué está pasando eso?, ¿cómo puedo solucionarlo?
he pensado en utilizar una memoria externa i2c para meter los textos del LCD y luego llamar esos textos desde el programa principal

al igual estoy cazando moscas a cañonazos y yo sin enterarme  :shock:
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Arrays y poco espacio en RAM, ¿cómo lo soluciono?
« Respuesta #1 en: 07 de Abril de 2014, 14:53:51 »
Guarda los arrays en la memoria rom
Cont char [número de bytes]={texto a guardar};
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Arrays y poco espacio en RAM, ¿cómo lo soluciono?
« Respuesta #2 en: 07 de Abril de 2014, 15:38:48 »
Te recomiendo que saltes a uno de la linea PIC18F.
Yo usaba ese y tenia el mismo problema, me canse de optimizar código hasta que decidí probar un PIC18F252.

Se terminaron mis problemas y ahora tengo 60 % de Rom usada y no chilla.
Tiene que ver con el paginado de memoria el problema, que junto a los arrays complica todo mal.

Prueba usar una versión mas nueva del CCS, tal vez optimice mejor, pero no te hagas muchas ilusiones...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re: Arrays y poco espacio en RAM, ¿cómo lo soluciono?
« Respuesta #3 en: 07 de Abril de 2014, 18:56:17 »
Guarda los arrays en la memoria rom
Cont char [número de bytes]={texto a guardar};

Lo de "cont" no funciona en CCS, me da un error como que no lo reconoce,
¿no te referias a #ROM,...tal que así? #rom 0x2100 = {"Probando memoria rom"}
si es a eso lo que te refieres, tampoco hay espacio, con lo cual creo que tendré que utilizar una memoria i2c tipo 24LC250 o alfo de eso

Te recomiendo que saltes a uno de la linea PIC18F.
Yo usaba ese y tenia el mismo problema, me canse de optimizar código hasta que decidí probar un PIC18F252.

Se terminaron mis problemas y ahora tengo 60 % de Rom usada y no chilla.
Tiene que ver con el paginado de memoria el problema, que junto a los arrays complica todo mal.

Prueba usar una versión mas nueva del CCS, tal vez optimice mejor, pero no te hagas muchas ilusiones...
La verdad que siempre he podido meterme con ese y utiliar el C18 que me mola más que el CCS, lo veo más robusto y como que se trabaja más directo en los registros, pero esto que hago es como un experimento, metiéndome con este micro a ver hasta donde puedo llega, es un jobby y más bien placer más que otra cosa, así también aprendo a optimizar mejor los códigos que hago

soy así de freeky, unos se lo pasan bien tomando cervezas, yendo al cine, o estar ve bares y yo con esto (ojo todo lo otro también lo hago pero en su justa medida) jijijiji
« Última modificación: 07 de Abril de 2014, 19:14:34 por Thulsa Doom »
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Arrays y poco espacio en RAM, ¿cómo lo soluciono?
« Respuesta #4 en: 07 de Abril de 2014, 20:37:25 »
Lo de Cont en realidad es Const (defines una constante), y funciona bien para guardar mensajes.

Lo otro que deberias probar es forzar al compilador a optimizar el codigo para ese PIC:

Código: C
  1. #include <16f876.h>
  2.  
  3. #device *=16      //permite guardar variables en memoria extendida

Ya que quieres renegar... :D :D :D

Y no precisas cambiarte a C18 para usar un PIC18F, el CCS lo hace y muy bien !!
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Arrays y poco espacio en RAM, ¿cómo lo soluciono?
« Respuesta #5 en: 07 de Abril de 2014, 21:08:14 »
Hola, también soy de la idea que leas desde ROM con el const.

Si fuera obligatorio que usaras RAM porque el contenido de los arreglos es dinámico, entonces asegúrate de crear esos arreglos dinámicamente... que no existan todos al mismo tiempo en RAM. Esto lo puedes solucionar:

- Crea un arreglo en una función. Cuando salgas de ella, la RAM se liberará.
- Usa memoria dinámica (malloc). No sé si CCS soporte eso.

Saludos.

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Arrays y poco espacio en RAM, ¿cómo lo soluciono?
« Respuesta #6 en: 08 de Abril de 2014, 00:56:24 »
No me fije y puse cont en vez de const...
Mía culpa
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re: Arrays y poco espacio en RAM, ¿cómo lo soluciono?
« Respuesta #7 en: 08 de Abril de 2014, 19:16:21 »
Gracias por la ayuda, de esta manera si puedo meter más arrays pero no la entiendo la verdad a ver si alguien tiene un poco de paciencia y me lo explica.

a ver me funciona pero no del todo, me explico.

si declaro el array como.
Código: [Seleccionar]
const char string1[] = "lo que sea que va dentro de este array";
y lo intento poner en la función que he hecho el compilador me da este error.

Attempt to create a pointer to a constant

pero si la pongo el un lcd_putc(,string1); si me lo compila.

lo que hice para que me funcionara y no sé si será de la mejor manera, me parece algo chapucero es.
crear un array de esta manera.
         
Código: [Seleccionar]
char stringMainc[];
y hacerle un bucle for de esta manera
         
Código: [Seleccionar]
for(h=0;h<42;h++){
                stringMainc[h] = string1[h];
             {
y luego meter el el array stringMainc en mi función.

ósea creo un string y descargo ahí lo que me haga falta y trabajo con el directamente.

Lo bueno sería trabajar directamente con los arrays creados con const pero no sé porque me está saliendo ese error, tengo mucho que aprender..... :oops:

¿que consejos me dais?
       
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Arrays y poco espacio en RAM, ¿cómo lo soluciono?
« Respuesta #8 en: 08 de Abril de 2014, 20:13:03 »
  En versiones viejas de CCS, éste no soportaba punteros a la rom.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Arrays y poco espacio en RAM, ¿cómo lo soluciono?
« Respuesta #9 en: 08 de Abril de 2014, 21:12:16 »
Hola, talvez esto te sirva. Saludos.

http://www.todopic.com.ar/foros/index.php?topic=25785.msg210802#msg210802

Eso del apuntador constante hay que verlo con código. Si quieres publícalo y lo revisamos.

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re: Arrays y poco espacio en RAM, ¿cómo lo soluciono?
« Respuesta #10 en: 14 de Abril de 2014, 04:09:10 »
   Hola a todos, no he tenido mucho tiempo para seguir dándole caña pero lo algo he hecho.

Bueno, pues he probado a meter los arrays en la rom como me han comentado y el compilador no me informa de que la memoria está llena y me lo deja compilar, pero ahora si que es una locura, resulta que me machaca código que ya tenía hecho y el comportamiento del programa es impredecible.
Hay alguna manera de introducir esos arrays sin que me me machaque otras partes del programa?.

La verdad que me falta más experiencia en programación
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...