Autor Tema: memoria ROM insuficiente  (Leído 17840 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
memoria ROM insuficiente
« en: 27 de Junio de 2008, 16:51:02 »
Hola masters, otra consultilla que quiero hacerles pues me desconcierta un poco el CCS.. El tema es simple, de momento mi programa ocupa el 54% de ROM y el 44% de ram...
De repente agrego una variable float y me dice que no hay mas espacio de ROM...
No entiendo? porque hace eso?
Un abrazo
N
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Re: memoria ROM insuficiente
« Respuesta #1 en: 27 de Junio de 2008, 17:52:33 »
Perdon, quiero aclarar que uso el 16F877 y que mi programa ya cuenta con 11 variables float declaradas. O sea cuando declaro la numero 12 de 54% la rom se va al 100% Alguna idea de por donde buscar?
Estoy por empezar de nuevo el programa para ir viendo paso a paso donde se me desbanda la cosa..
Ta luego..
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: memoria ROM insuficiente
« Respuesta #2 en: 27 de Junio de 2008, 19:00:58 »
Si estás agregando aparte de la declaración de la variable, código medio "pesado" para manejar la susodicha variable... seguramente se te está acabando la memoria de programa... debes tener un programa bien largo entonces...
Sería bueno que postearas el código a ver en dónde se puede simplificar un poco...
A mí me acaba salir ese mismo error y lo solucioné cambiando algunos "printf" por "puts", que consume menos memoria porque es una instrucción más sencilla. También quité algunos "delay" y traté de simplificar lo más posible..
Ahora ya no tengo el problema, pero estoy usando un 94% de ROM... así que ya no puedo meterle muchas más cosas de las que ya tengo.
Por cierto estoy usando el mismo micro que tú.
Espero que puedas solucionar tu problema.
Ok saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: memoria ROM insuficiente
« Respuesta #3 en: 27 de Junio de 2008, 19:24:20 »
Sucede que la gama 16F tiene la memoria FLASH dividida en Bloques (PAGINAS), entonces, cuando se usa CCS y PICs tipo 16F hay que indicarselo para que este manpule los registros PCL y PCH para paginar toda la memoria de programa.

Agrega esto :
#device *=16 

Despues del #include <16f877A.h>..

De esa forma ganas mas espacio, pero la verdad C en un 16F..No creo te dure mucho.

SALUDOS!!

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: memoria ROM insuficiente
« Respuesta #4 en: 27 de Junio de 2008, 20:43:31 »
PICmouse, he probado con la directiva que mencionas, pero el uso de ROM es el mismo porcentaje que sin colocar la directiva.
Sabes cuál puede ser la razón?  :?
Saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado Gonzalo_BlackHawk

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 519
Re: memoria ROM insuficiente
« Respuesta #5 en: 27 de Junio de 2008, 23:19:45 »
Hola chicos.

Bueno, los 16F877 tienen 8Kx 14 words de espacio de memoria de programa, y esto no se cambia por más código que agreguemos. La instrucción #device *=16 solo cambia el modo de acceder a la RAM, lo cual permite ciertas ventajas como por ejemplo poder manejar mas eficientemente ciertos sectores de esta memoria que de otra forma no se pueden usar (Este problema lo tienen algunos dispositivos como los 509, 57, 66, 67, 76 y 77 hasta donde yo sé). Para tu caso vasco esto no te sirve porque en general el manejo de punteros de 16 bits requiere mas ROM lo cual te empeora tu situación, CCS lo aclara en su manual y yo lo he comprobado en la realidad (tratandando de ahorrar memoria en un caso parecido al tuyo).

Me extraña que una sola variable float este desbordando tu capacidad de almacenamiento, habria que ver el código para poder depurarlo un poco. No entiendo tu error, el compilador te indica esto? "Out of ROM, A segment or the program is too large". Si es así el problema esta en que una función es muy larga y no hay suficiente ROM para ejecutarla. lo que se puede hacer en este caso es resignarte un nivel en el stack y cortar la función en dos con la instrucción #separate. Puedes verificar si hay alguna función esta desbordando la página de código mirando el Call Tree que genera CCS, es muy útil porque indica la RAM y la ROM que utiliza cada segmento del programa. Esperamos tu respuesta.

0x01 Saludo.
"Siempre piensa si el jugo vale la exprimida..."

"La muerte esta tan segura de vencer que nos da toda una vida de ventaja."

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: memoria ROM insuficiente
« Respuesta #6 en: 28 de Junio de 2008, 01:36:09 »
Como siempre muy útil tu respuesta Dr. Gonzalo, muchas gracias!  :P
No sabía eso del "Call Tree"... a ver si lo consigo, me va a ser muy útil también a mí  :lol:
Ok saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: memoria ROM insuficiente
« Respuesta #7 en: 28 de Junio de 2008, 08:09:26 »
Estas seguro que solo es una variable float (usa 4 bytes) o es un array de variables float lo que agregas??? :lol:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 624
Re: memoria ROM insuficiente
« Respuesta #8 en: 28 de Junio de 2008, 10:30:04 »
Las variables que declaras se guardan en la RAM , es decir, que al declarar una nueva variable te deberia salir un en la RAM, ahora dependiendo como utilizes esta variable te puede salir ese error de la memoria de programa (ROM), como solucionas este error?, bueno  una forma es ver  cuanta ROM te consume cada una de tus funciones , esto puedes verlo en el archivo de estadisticas que te genera el compilador, y dividir las funciones que sean muy largas, o probar poniendo la directiva #SEPARATE, en algunas de estas funciones,

Saludos
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Re: memoria ROM insuficiente
« Respuesta #9 en: 28 de Junio de 2008, 11:37:02 »
Hola todos, gracias por las respuestas. He mirado un poco el tree pero me surgen mas dudas aun... no se leerlo quizá. Por otro lado, el problema parece proesentarse al superar el 50% de la memoria rom.. Ahora estoy al 48%, pero si agrego una variable int32, por ejemplo, chau... Out of ROM, A segment or the program is too large    inicio
Aclaro que es una simple variable y no un arreglo. Adjunto el codigo completo por si lo quieren ver. El programa principal se llama robertacho4.c
Mil gracias..
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: memoria ROM insuficiente
« Respuesta #10 en: 28 de Junio de 2008, 12:19:05 »
Una variable Int32 usa realmente 4 posiciones en ram... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: memoria ROM insuficiente
« Respuesta #11 en: 28 de Junio de 2008, 12:22:09 »
Es cierto MGLSOFT,por eso es de lo más extraño lo que ocurre.
Probé el programa de vasconi, y es cierto... dice ROM 48% y luego cuando agregas la variable int32 te sale el error de que no hay ROM.
Si quieres pruébalo tú a ver si a tí si te funciona.
Esto se escapa a mi comprensión, no entiendo qué es lo que pasa.  :shock:  :?
Si vos encuentras la solución, no dejes de comunicarlo por favor, ten piedad de nosotros los ignorantes!  :D
Ok saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: memoria ROM insuficiente
« Respuesta #12 en: 28 de Junio de 2008, 12:28:18 »
Je..je.. :D :D
Esa fue la razon por la cual migre de un PIC16F876 a un PIC18f252.... :mrgreen: :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: memoria ROM insuficiente
« Respuesta #13 en: 28 de Junio de 2008, 12:32:06 »
Si, pues al parecer la solución será migrar a los 18F y mandar los 16F pal.... ya tú sabes dónde  :D
Bueno pues a mudarse todo el mundo se ha dicho!  :lol:
Con todo esto ya estoy decidido a no usar más los 16F... a menos que sea un proyecto pequeñito...
Saludos, nos leemos!  :mrgreen:
 
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Re: memoria ROM insuficiente
« Respuesta #14 en: 28 de Junio de 2008, 12:48:33 »
Muchachos, ya me parecia... de los 16F el que me anda lindo es el 628A pero para este caso me quedo muy corto de memoria... En Fin, va la segunda pregunta. NUNCA trabaje con los 18F, alguna recomendación? Cual puedo usar que sea equivalente en memoria y salidas al 877? Tengo que modificar mucho mi programa?
Gracias amigos piclisteros por toda su ayuda.
Vasco
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"