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

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

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: memoria ROM insuficiente
« Respuesta #15 en: 28 de Junio de 2008, 13:43:24 »
No creo que exista gran diferencia en trabajar con un 18F. La organización de los pines es la misma, claro que muchos pines tienen más funciones interesantes. Lo que si veo bastante diferente es la organización de la memoria, pero no creo que haya problema con eso porque el compilador se encarga de todo.
Yo estoy en tu misma situación vasconi, en el proceso de migrar a los 18F... me he quedado loco con la cantidad de cosas adicionales que tienen.
Definitivamente, hay que progresar. No me puedo seguir estancando con los antiguos 16F  :D
Y la diferencia de precios, por lo menos en mi país, yo diría que es bastante ridícula... entre un 16F877 y 18F4550, que son equivalentes en pines... sólo como Bs.4, si comparas eso con la cantidad de ventajas del 18F... pues Bs 4 no es nada...  :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 #16 en: 30 de Junio de 2008, 09:10: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

Solo varios cambios.
Mas que nada debes revisar bien todos los fuses, algunos son diferentes.
Ademas como dice Firepic, deberas inicializar los perifericos adicionales, algunos para anularlos y otros para utilizarlos.

Sacando eso, lo que queda es una potencia impresionante a favor de los PIC18F... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: memoria ROM insuficiente
« Respuesta #17 en: 30 de Junio de 2008, 14:24:35 »
Cual de las variables declaradas es la que da problemas?

Porque si es una variable global no debería darte problemas en la ROM sino en RAM, sea porque el compilador no puede asignarle una localización determinada o porque no puede direccionar la variable porque no se ha configurado adecuadamente el uso de PCL y PCH.

Ahora si lo que declaras es una variable global que luego inicializas, la cosa puede complicarse, prueba a declarar solo la variable y no la inicialices, luego nos cuentas.

Saludos
Reinier

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: memoria ROM insuficiente
« Respuesta #18 en: 30 de Junio de 2008, 14:28:57 »
Gran reiniertl, podrías probar en tu compilador?
Porque lo que dices tiene absoluta lógica, yo también pensé lo mismo y no me lo podía creer... pero en efecto lo probé en mi compilador y es así... la ROM está cerca del 50% (o sea que debería dar para rato) y cuando agregué una variable (creo que local) int32 me dió el error de memoria insuficiente...
Tal vez se solucione agregando el #separate que mencionó Gonzalo, no lo he probado.
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 #19 en: 30 de Junio de 2008, 14:38:18 »
SI, eso estoy haciendo... hasta ahora el programa anda de 10. Tengo que ponerme a ver las cosas extra que ofrecen estos pic pero sin dudas que son mucho mas potentes, partiendo de la base que en el mismo encapsulado del 877 tengo 32k de memoria con el 18F452.
Consulta quizá fuera del hilo. Es mejor utilizar el compilador de Microchip C18 que CCS? pregunto ya que estoy tratando de compilar el codigo para manejo de LCD sin retardos que pusieron hace poquito en este foro y aun no logro hacerlo andar... el codigo dice que es para C18 y otros mas pero no para CCS..
Volviendo al tema, por si a alguien le sirve, el Celsius Cordoba Argentina los venden a los 452 (sueltos por $34) o sino en Cika Cordoba pero el monto de la compra debe superar los u$S50 (a 9 + iva del 10.5% cada uno).
Saludos....
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"

Desconectado Gonzalo_BlackHawk

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 519
Re: memoria ROM insuficiente
« Respuesta #20 en: 30 de Junio de 2008, 16:29:12 »
Hola a todos. Bueno, me hice un hueco para poder revisar un poco el programa de vasco.

Casi me da un infarto cuando abri el proyecto y automaticamente pude entender donde esta el problema, es en la organizacion del código, bueno mas bien en la falta total de organización del código  :mrgreen:.

El problema a tratar con multiples unidades de compilacion es que hay que saber muy bien que unidades usan que variables, como las usan y en que orden se ejecutan las funciones dentro de esas unidades y si lo hacen mas de dos veces, etc etc etc etc. En fin, hay que ser muy prolijo al tratar con programas de este tipo (ojo, tambien hay que ser prolijo aun cuando solo manejemos un unico .c).

Lamentablemente, no pude terminar de optimizar y organizar el código porque me llevaria horas, pero hasta donde pude hacer he eliminado el desbordamiento del uso de la ROM (Proba vasco de agregar una int32 ahora) y he disminuido sustancialmente el uso de RAM y de ROM (La RAM bajo de un 40 y pico a solo 19% y el uso de la ROM ahora esta en 41 % y no va causar mas problemas la declaración de nuevas variables). Vasco, te invito a que te tomes tu tiempo y que pruebes de organizar el código un poco más, descubrirás que el 16F877A te sobra en memoria para lo que quieres hacer (Aqui no es necesario cambiarse a un 18F).

Lo poco que pude hacer lo explico a continuación, de todas formas pueden contrastar los códigos para ver las diferencias:
- Las variables estaban mal declaradas, eran todas globales y ocupaban ROM durante todo el programa cuando a veces solo se necesitan una sola vez. Genere un archivo "Encabezado.h" que contiene todas las declaraciones y variables globales del programa (Como consejo, los proyectos con multiples .c deben tener siempre un encabezado donde se organice todo, para evitar problemas).
- Algunas variables en la RAM (Las cadenas de texto para el LCD) son constantes y por lo tanto deben ir en la ROM.
- Algunas variables solo se utilizan en una unidad de compilación y por lo tanto se deben declarar aqui (No en el Encabezado.h) y de forma estática (Mediante la declaración static). Esto no ahorra memoria pero es vital para evitar conflictos de nombres de variables y además indica el alcance correcto que debe tener la misma.
- Algunas funciones estaban siendo unidas en una sola (Una sola función que chupa ROM a lo loco) en forma automática por el compilador y por lo tanto deberian ser especificadas para que no sean inline, mediante la instruccion #separate (Yo solo separe una sola función, pero si te sobra stack separa algunas más).
- Algunas variables ni se estaban utilizando.
- Otras cosillas que no me acuerdo.

Bueno, vasco, olvidate de comprarte un 18F porque no lo necesitas (Bueno en realidad compratelo y experimenta un poco con el en tu tiempo libre) y dedicate a organizar tu código y veras como bajan las barritas verdes a la hora de compilar. Esperamos tu avances.

Saludos.
"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 #21 en: 30 de Junio de 2008, 17:12:12 »
Gonzalo, a veces dudo de que seas humano viejo!  :o
Naguará! Y dígame si tuvieses más tiempo programando en C!  :shock:
Ni me imagino lo que serás cuando tengas mayor edad... prodigioso, vas a ser una bestia mano!
En serio, ha sido una magistral explicación... en verdad gracias man!
Igual yo también trataré de experimentar con los 18F, pero sólo para actualizarme y conocer más juguetitos  :D
Ya veo que se puede lograr mucho con un poco más de orden. He aprendido muchas cosas que no sabía.
Enseguida me pondré a hacer un archivito .h para el proyecto que estoy haciendo, que me tiene el pic casi al tope de la ROM...
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 vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Re: memoria ROM insuficiente
« Respuesta #22 en: 30 de Junio de 2008, 17:51:22 »
Gonzalo, muchisimas gracias viejo. La verdad que recien empiezo con C pero tambíen en lo que respecta a programación y aqui es donde se nota la gente que programa de oficio como vos y saben hacer un analisis profundo del sistema antes de programar.
Estoy volviendo al 877 y prometo que hasta que no les saque el jugo al maximo no paso a los 18 jeje.
Gracias de nuevo, y los tendré al tanto de los avances.. Por el momento falta como medio programa o poco menos. Al final lo publico por si sirve..
Como dice fire, De que planeta viniste???!!!
Nos leemos....... :mrgreen:
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: memoria ROM insuficiente
« Respuesta #23 en: 02 de Julio de 2008, 16:04:40 »
puede suceder que al declarar la variable numero 12, se exceda la ram paginada en bank 0, y entonces el compilador te tira el error, intenta usar #locate, para asignar variables en otros bancos disponibles.


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

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Re: memoria ROM insuficiente
« Respuesta #24 en: 02 de Julio de 2008, 16:18:34 »
He vuelto al 877 por sugerencia de Gonzalo ya que aun no lo agoto. Con el codigo optimizado no he tenido que usar el Locate aun... ahora, otra consulta. He avanzado un poco mas con mi programa y estoy ocupando el 47% de la rom. En proteus anda de primera, pero lo paso al protoboard y anda hasta un punto y se detiene, en realidad el programa sigue corriendo pero el LCD queda clavado.. Alguna idea? puede ser algun bug en mi programador
(es comprado pero ya encontre algun problemita una vez), o tendrá que ver con la organizaciòn del programa en los bancos 0 y 1 (aunque al 47% estaria sobre el banco 0 aun?).
Gracias....
"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 #25 en: 04 de Julio de 2008, 19:13:33 »
Muchachos, hoy me arte... creo que el CCS es un compilador sencillamente malo... Ya encontre varios bugs en mi primer proyecto.. Me voy a cambiar a C18 de Microchip..
Quiza este dormido pero este es el codigo y les explico que hace el simulador

void calado(void)
{
   if (vcalado==0)
   {
      vcalado=100;
      if (vrep==0)
      {
      vrep=8;
      reloj_progresivo();
      }
      else
      vrep--;
   }
   vcalado--;
}

Segun entiendo la funcion reloj_progresivo(); deberia ejecutarse cuando vcalado y vrep llegan a 0, pues no, se ejecuta cada ves que entro al if, es mas, se decrementan vcalado y vrep tambien cada entrada al if principal!!..... No entiendo nada------
No quiero ser mala onda pero entiendan que un dia entero sin avanzar ni una linea me tiene mal..
Despues les cuento como me va con el C18..
Abrazo
"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 #26 en: 04 de Julio de 2008, 20:14:12 »
Saludos vasco.
Viejo entiendo que el CCS tiene varios bugs que hay que tener en cuenta... el maestro pocher hasta ha creado un hilo donde se han ido explicando muy bien. Pero tampoco es que sea malo. Yo he hecho varios proyectos bastante complejos, usando i2c, spi, serial, interrupciones externas, y manejo de varios componentes... y me ha ido bastante bien.

Claro, eso no quiere decir que me haya funcionado a la primera programada. Muchas veces me pasa que no hace lo que quiero y tengo que sentarme y con mucha paciencia examinar todo el código hasta encontrar el problema.. a veces son "detalles" que causan muchos daños, como variables mal declaradas, y otras cosas inherentes a la propia programación.

Es por eso que yo uso el CCS integrado al mplab, de esa forma puedo simular línea por línea e ir viendo los registros del micro... también puedo dar valores a las variables importantes y ver el funcionamiento de las condicionales.
Los if es muy raro que tengan problemas. Debe ser algo que está mal en el resto del código.

Vasconi, la programación no es cosa fácil. Pero creo que debes ser más persistente. Prueba con el mplab y así puedes ver los registros vcalado y vrep... y el funcionamiento de las condicionales.
Claro que tú tomas la decisión final. Pero si es un error en la programación (que es lo más probable) lo vas a arrastrar al c18 y vas a tener retrabajo innecesario. No lo tomes a mal vasco, es sólo una sugerencia que te doy con toda buena intención.

Saludos, nos leemos!  :mrgreen:

P.D. Mis proyectos "complejos" son en realidad una tontería en comparación con otros proyectos que han hecho otros integrantes del foro usando este mismo compilador.
« Última modificación: 04 de Julio de 2008, 20:44:08 por firepic »
"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 jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: memoria ROM insuficiente
« Respuesta #27 en: 04 de Julio de 2008, 20:31:39 »
Muchachos, hoy me arte... creo que el CCS es un compilador sencillamente malo... Ya encontre varios bugs en mi primer proyecto.. Me voy a cambiar a C18 de Microchip..
Quiza este dormido pero este es el codigo y les explico que hace el simulador

void calado(void)
{
   if (vcalado==0)
   {
      vcalado=100;
      if (vrep==0)
      {
      vrep=8;
      reloj_progresivo();
      }
      else
      vrep--;
   }
   vcalado--;
}

Segun entiendo la funcion reloj_progresivo(); deberia ejecutarse cuando vcalado y vrep llegan a 0, pues no, se ejecuta cada ves que entro al if, es mas, se decrementan vcalado y vrep tambien cada entrada al if principal!!..... No entiendo nada------
No quiero ser mala onda pero entiendan que un dia entero sin avanzar ni una linea me tiene mal..
Despues les cuento como me va con el C18..
Abrazo

Yo no estaría tan seguro de que el CCS tiene un Bug. Mi experiencia me dice que el 90% de los errores son humanos y no del compilador.

Si quieres que te ayudemos pon todo el prgrama, ya que no vemos la declaración de las variables, ni los valores iniciales que le asignas.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Re: memoria ROM insuficiente
« Respuesta #28 en: 04 de Julio de 2008, 22:22:35 »
//VARIABLES GLOBALES///////////////////////////////////////////////////////////

unsigned int vrep=8;
int32 vcalado=100;

Aqui las variables y su tipo.. El tipo int32 es porque en realidad lo valores que necesito manejar son grandes, pero para el ejemplo los puse chicos y podes ver el problema mas rapido..
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: memoria ROM insuficiente
« Respuesta #29 en: 04 de Julio de 2008, 22:35:53 »
¿La función es llamada varias veces?

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús