Autor Tema: Me quedo sin RAM antes de poner una linea de codigo!!!!!!!!!  (Leído 7271 veces)

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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Me quedo sin RAM antes de poner una linea de codigo!!!!!!!!!
« Respuesta #15 en: 08 de Octubre de 2008, 00:45:08 »
No tiene mucho sentido que esa sea la explicación, puesto que en el ejemplo anterior se puede crear un array de 82 bytes y compila sin problemas. Si el pic tiene 128 bytes de RAM, necesariamente estará poniendo algunos bytes en un banco y el resto en el otro.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Me quedo sin RAM antes de poner una linea de codigo!!!!!!!!!
« Respuesta #16 en: 08 de Octubre de 2008, 04:06:10 »
No tiene mucho sentido que esa sea la explicación, puesto que en el ejemplo anterior se puede crear un array de 82 bytes y compila sin problemas. Si el pic tiene 128 bytes de RAM, necesariamente estará poniendo algunos bytes en un banco y el resto en el otro.

No necesariamente Manolo. Fijate que tu primer array posee 82 elementos, los cuales pueden ser ubicados en el banco0(de 96 bytes disponibles) y el otro 31 elementos, los cuales pueden ser ubicados en el banco1(de 32 bytes disponibles).
Si quieren taparme la boca, pos una forma sería haciendo dos arrays de, por ejemplo, 50 elementos cada uno. Si permite ambos arrays en este PIC, entonces sí.Mi teoría es errónea.

Modulay, tenés razón en lo que decís. Vamos a interiorizar y debatir que esto me interesa :)

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Me quedo sin RAM antes de poner una linea de codigo!!!!!!!!!
« Respuesta #17 en: 08 de Octubre de 2008, 04:18:02 »
Pues me retracto: efectivamente he probado lo que dices Bruno, y no admite dos arrays de 50 posiciones.

Yo daba por hecho que los dos bancos de memoria son del mismo tamaño; esto de no leer el datasheet  :?

Desconectado angelmt

  • PIC10
  • *
  • Mensajes: 19
Re: Me quedo sin RAM antes de poner una linea de codigo!!!!!!!!!
« Respuesta #18 en: 08 de Octubre de 2008, 07:05:51 »
BrunoF no creo que esa sea la explicacion porque haz la prueba con un 16F747 que solamente el primer banco tiene 96 bytes y el resto son de 80 bytes y lo compila sin problemas, y necesariamente tiene que dejar la matriz dividida en dos bancos.

#include "C:\Documents and Settings\Angel\Escritorio\Bingo\f74\main.h"


int8 matriz[96];
int8 matriz1[96];



void main()
{

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF|ADC_TAD_MUL_0);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab

   // TODO: USER CODE!
   
   
   

}

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Me quedo sin RAM antes de poner una linea de codigo!!!!!!!!!
« Respuesta #19 en: 08 de Octubre de 2008, 12:22:06 »
Hola angel!

Casi...:D pero NO. El 16F747 posee 368 bytes de memoria y recién acabo de ver su datasheet y posee: 3 bancos de 96 bytes(bancos 0,2 y 3) y uno de 80 bytes(banco1).

Y si te fijas, nuevamente sucede lo que digo. Intentá declarar un array de 97 bytes y el compilador ya te dice que no hay memoria para tantas variables.

Parecería que por un lado lo que digo puede guardar cierta verdad, pero por otro lado no. Como dijo modulay: no veo bien la diferencia entre la paginacion de las flias 10,12 y 16 y la seleccion mediante el BGR en los 18F por ejemplo. Tampoco entiendo por que el CCS no utiliza el direccionamiento indirecto para poder hacer esto como migsantiago ha dicho. Y tampoco me cierra otra cosa mas que ya me olvide mientras escribía esto.... :(
« Última modificación: 08 de Octubre de 2008, 12:25:45 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Me quedo sin RAM antes de poner una linea de codigo!!!!!!!!!
« Respuesta #20 en: 08 de Octubre de 2008, 12:40:22 »
Bien. He estado meditandoló. Y la respuesta a las ambas preguntas que me he estado haciendo es la mísma:

La principal diferencia entre los 16F y los 18F que está relacionada con este problemita de los tamaños de los arrays, no tiene que ver tanto con la paginación sino con la distribución de los GPRs y FSRs. Si se fijan en cualquier 16F o anterior, los GPRs y los FSRs están mezclados. Es decir, si van recorriendo la memoria de datos, probablemente encuentren algo así(en un 16F8747 ya que estamos)

FSRs, GPRs,FSRs, GPRs,FSRs, GPRs,FSRs, GPRs.

Si lo queremos usar direccionamiento indirecto para poder armar un array que ocupe(o cruce) dos o mas bancos, en los 16F entonces habría que andar "saltando" a los FSRs. Tarea no tan sencilla como los 18F que poseen toda la memoria GPRs al inicio y recién al final los FSR...
Tal vez por esto Microchip los haya reorganizado de esta manera, eh? :)

Entonces, parecería que no tiene tanto que ver con el tamaño, sino que con que todos los elementos puedan ser ubicados consecutivamente. Es decir, de manera contínua para que el CCS pueda utilizar apuntadores sencillos.("la continuidad de los parques"  :mrgreen:)

A ver qué les parece mi nueva hipótesis.
« Última modificación: 08 de Octubre de 2008, 12:44:00 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: Me quedo sin RAM antes de poner una linea de codigo!!!!!!!!!
« Respuesta #21 en: 08 de Octubre de 2008, 12:40:55 »
Sea como sea,si el motivo por el que el compilador no deja compilar es el cambio de banco, es una carencia como una casa de grande.
Propongo una sentada reivindicativa pro bug-fix en las puertas de los cuarteles generales de CCS :D

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Me quedo sin RAM antes de poner una linea de codigo!!!!!!!!!
« Respuesta #22 en: 08 de Octubre de 2008, 13:01:10 »
Sea como sea,si el motivo por el que el compilador no deja compilar es el cambio de banco, es una carencia como una casa de grande.
Propongo una sentada reivindicativa pro bug-fix en las puertas de los cuarteles generales de CCS :D

Ja, ja, ja  :D :D :D hace viente años que no oía una propuesta de sentada ja, aj, ja  :D :D :D me apunto ja, ja ja,  :D :D :D
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: Me quedo sin RAM antes de poner una linea de codigo!!!!!!!!!
« Respuesta #23 en: 08 de Octubre de 2008, 13:35:49 »
Yo me llevo las cervecitas...tu encárgate de los bocatas.Del resto, que cada uno se apañe lo suyo :)