Tamaño maximo de array, 16F877

Hola,

Quiero introducir un array de tipo float y el tamaño máximo que me permite el compilador sin problemas de Ram es 24, pero necesito que sea de 50, hay alguna posibilidad de crearlo?

un saludo
 
mm creo que lo tengo declarado en la memoria de programa, es decir donde declaro todas las variables no? Lo tengo declarado ahí.. float valor[24]..
 
los elementos del array se almacenan en posiciones consecutivas de la memoria RAM del PIC

poniendo:

rom float variable[50];

ya deberia dejarte. Claro está que ahora la variable la tendrás en la eeprom y tendras que manejar punteros

Ah! Se me olvidó decirte que también es posible hacer arrays bidimensionales
 
Última edición:
Muchas gracias, ahora echaré un vistazo a ver si es muy complicado.. De todas formas he comprobado que me acepta en la memoria de programa dos de tamaño 20, por lo que quizás sea mas rapido y facil hacerlo así.. y creo que con 40 tendré suficiente..
 
Si necesitas un array de ese tamaño, y no te sirve colocarlo en flash como te sugirió tartisa. Definitivamente tienes que pasarte a otro PIC. Te recomiendo que uses el PIC18F452, tiene el mismo Pin-out que el PIC16F877 pero tiene mucho más memoria RAM. El 877 tiene 368 bytes de RAM, mientras que el 452 tiene 1536 bytes. Acordate que cuando declarás una variable tipo float, te ocupa 4 bytes por cada elemento del array. Así, que sólo tu array de 50 elementos, ocupa 200 bytes en RAM. A eso, tenés que sumarle todas las otras variables que hayas ocupado, más las variables que te gasta en implementar el stack o las variables locales.
 
Pues si, quizás cambiar el pic sea lo mas rapido, porque podría usar dos arrays como si estuviesen anidados pero cambiar va a ser mas facil.. Acabo de comprobar que pic tengo aqui por que lo necesito ya y en mi pueblo no hay tiendas de electronica y tengo un 18F4450, voy a comprobar si es similar al 18F452..

Muchas gracias por vuestra ayuda,
Comprobado, tiene el mismo diagrama de pines por lo que viene perfecto... voy a revisar las demas características
 
Última edición:
Una duda que tengo ya que nunca he usado ningún 18F, debo modificar cosas del codigo o me funciona con las mismas instrucciones y eso? porque estoy probando una simulación y parece que no está bien y no se si es algun fallo tonto o es que hay que cambiar cosas...
Me refiero a cosas a tener en cuenta a parte de las dierecciones de puertos y registros que cambian
 
Última edición:
Un par de cosas tenés que modificar:

- Los fuses.
- El timer0 si lo has usado, tenes que decirle que trabaje en 8 bits, los 18F pueden trabajar en 8 o 16 bits.
- El ADC, si lo has usado, en estos fijate en la hoja de datos, pero creo que el que querés usar vos, es de 12 bits.

Creo que nada más.... Suerte!
 
Muchas gracias, esas cosas creo que las tengo cambiadas ya.. Aunque aún sigo teniendo bastantes problemas.. Sabeis por que puede ser que no escriba bien en la pantalla? Despues de mucho intentarlo he cargado el programa 'hola mundo' a ver si eso lo mostraba, pero tampoco.. estoy utilizando la libreria flex_lcd con 4 bits, igual que hacia con el 16f877 aunque alli que trabajaba correctamente...

Edito: Ya funciona el Lcd. Aunque lo demas sigue funcionando mal, a ver si encuentro la solucion y ya comentaré que fallaba..
 
Última edición:
Atrás
Arriba