Autor Tema: Problema en proyecto con memoria Rom  (Leído 2008 veces)

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

Desconectado charlosh

  • PIC10
  • *
  • Mensajes: 12
Problema en proyecto con memoria Rom
« en: 08 de Marzo de 2010, 18:16:20 »
Buenas tardes, estoy y desarrollando un proyecto en el que utilizo un pic 16f877A, un LCD 2x16 y un teclado matricial de 16 teclas.

El programa  tiene en una seccion que trata de visualizar en el Lcd  los nombres de 60 diferentes números de parte, por lo que utilicé un menu de selección con la instruccion switch y en cada case utilicé la instrucción printf(lcd_putc,"\texto") en donde texto varia dependiendo del case en ejecución. Pero el problema es que consume demasiada memoria Rom. Y como en el futuro se agragarán 10 nuevos números de parte calculo que la memoria ram andará rondando el 100%, y ya no compilaria.
He leido que la instrucción Printf consume mucha Rom.
 Por lo que traté de ahorrar la memoria Rom y tratando de usar lo menos posible la instrucción Printf utilizo una variable universal llamada "Texto" y  en la sección del Switch en cada Case uso la instrucción Strcpy para transferirle los diferentes valores de los strings con los nombres de los 60 diferentes modelos. Y despues salir de la instrucción Switch y utilizar la instrucción printf(lcd_putc,"Texto: %s", texto) una sola vez para mostrar cada uno de los 60 diferentes mensajes. Esto si trabaja con la ventaja de escribir una sola vez la instrucción Prinf pero como en cada case utilizo la instrucción strcpy pues  consume demasiada memoria Rom, lo cual lo hace redundante.

Por lo que tengo la idea de buscar la solución,  en la cual  crear en la sección de declaracion de variables del programa una variable universal llamada texto(i), y varias variables del tipo string con los datos (strings) de los 60 diferentes modelos  y  en la cual el valor de i varie de acuerdo al valor del case en ejecución (si se esta ejecutando el case 3 pues que el valor de texto(i) sea texto(3)) .
En otras palabras

Declarar la variable texto(i)
en la cual dependiendo del valor de i adopte los diferentes strings:

texto(i)=texto a desplegar(i)

declarar los strings:
texto(1)="modelo x23f"
texto(2)="modelo xmo45juf"
texto(3)="modelo helix276"
texto(4)="modelo x34f"
texto(5)="modelo temp"

En la cual se despliegue el dato del string que está entre comillas en el Lcd en cada valor de texto(i) en funcion del valor de i.
y solo utilizar una sola vez la instrucción printf para que muetre el valor de texto(i) con el uso de la instrucción printf(lcd_putc,"Texto(i): %s", texto(i))

No sé si con algun tipo de matriz o algún otro arreglo sea posible hacer algo así.
No sé como declarar las variables para tratr de hacerlo

Si alguien tiene una idea de como hacerlo por favor hagan un comentario o algun ejemplo









Desconectado charlosh

  • PIC10
  • *
  • Mensajes: 12
Re: Problema en proyecto con memoria Rom
« Respuesta #1 en: 08 de Marzo de 2010, 18:35:15 »
Buenas tardes Suky  referente a el envio de dos veces de la misma consulta ,no era esa mi intención, lo que pasó es que al momento de pulsar el botón de mandar o publicar la primera consulta me apareció un error de internet y me decia que los cambios hechos en la cesión iban a ser perdidos y bloqueó la conexión a internet, pensé que no se habia publicado la consulta por lo que volví a teclear la consulta y la envie de nuevo. De hecho volvió a pasar lo mismo pero como accesé al hotmail ví que tenia respuesta y vi que si se publicaron ambas consulta Esto es lo que pasó.. Mucho agradeceria que le des oprtunidad a ser contestada mi consulta.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema en proyecto con memoria Rom
« Respuesta #2 en: 08 de Marzo de 2010, 20:38:41 »
Buenas tardes Suky  referente a el envio de dos veces de la misma consulta ,no era esa mi intención, lo que pasó es que al momento de pulsar el botón de mandar o publicar la primera consulta me apareció un error de internet y me decia que los cambios hechos en la cesión iban a ser perdidos y bloqueó la conexión a internet, pensé que no se habia publicado la consulta por lo que volví a teclear la consulta y la envie de nuevo. De hecho volvió a pasar lo mismo pero como accesé al hotmail ví que tenia respuesta y vi que si se publicaron ambas consulta Esto es lo que pasó.. Mucho agradeceria que le des oprtunidad a ser contestada mi consulta.

Esta bien, solo cerré uno de los temas así el tema es ordenado y no contestan en los dos.  ;-)

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado MarkKnopfler81

  • PIC12
  • **
  • Mensajes: 64
    • PICs, Electrónica y Robótica
Re: Problema en proyecto con memoria Rom
« Respuesta #3 en: 09 de Marzo de 2010, 09:08:23 »
Hola carlosh, mira creo que la mejor opcion sería usar una memoria I2C, entonces podrías ir leyendo las direcciones de memoria  en un bucle de 16 en 16...

De esa forma si quisieras agregar mas items al menu, no haría falta regrabar el Pic, con actualizar la EEPROM sería suficiente, y en dicha memoria se usa una dirección para guardar el valor de cantidad de items....

Saludos.
« Última modificación: 09 de Marzo de 2010, 09:11:50 por MarkKnopfler81 »

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Problema en proyecto con memoria Rom
« Respuesta #4 en: 09 de Marzo de 2010, 10:07:11 »
charlosh, yo haría una constante con cada mensaje "byte const msj1[] = "mensaje1"; y en cada
case: printf(lcd_putc,"mensaje1")
case: printf(lcd_putc,"mensaje2"), ect.

de todos modos no es mucha la ROM que se ahorre, pero para un programa como el que piensas desarrollar yo utilizaría el 18f4550, recuerda que son 32k

saludos.


 

anything