TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: bitpic en 28 de Marzo de 2007, 13:57:44
-
Buenas a todos, estoy en un punto critico de mi PFC.
Estoy haciendo una aplicacion con un 18f252 usando el CCS y ya ocupo el 78% de la RAM y de la memoria de programa solo el 38%, en la aplicacion intercambio 1000 bytes con otro 18f252 a traves de bluetooth.
Para hacer este intercambion uso 1000 bytes de memoria RAM para almacenar temporalmente los datos, estos datos luego los grabo en una memoria SD.
El problema que tengo es el siguiente:
- Leo bien los datos de la SD y los paso a la RAM
- Envio bien los datos de la RAM por bluetooth
- Al otro modulo bluetooth le llegan bien los datos que se han enviado.
- "Al almacenarlos en la RAM del PIC me escribe los 256 primero bytes bien, luego me escribe 256 con espacios (" ") y luego continua almacenando, pero ya he perdido 256 bytes por el camino con esos espacios."
UN EJEMPLO: (no voy a poner todos los bytes pero si un pequeño ejemplo)
tendria que quedar la ram asi si todos los caracteres fuesen "a"
aaaaaaaaaaaaaaaaa 1k todo lleno de "a"
y me llega esto:
aaaaaaaaaaa (256 "a") _______________________ (256 "_") aaaaaaaaaaaaaaaaaaaaaaaaaaaaa (488 "a")
por tanto de las 1000 "a" que tendrian que llegar solo me llegan 744.
Despues de darle muchas vueltas he pensado que podria ser algun tipo de solapamiento en la memoria RAM al estar cerca del 100% de su uso. Para probar he hecho que guarde un poco mas de memoria y me ha escrito unos caracteres que creo que tienen que ver con una libreria que uso, con lo cual me da a pensar que si se podria tratar de solapamiento de memoria, pero no se que hacer para solucionarlo.
Por si acaso os dejo el trozo de codigo que se encarga de guardar en la RAM los datos que llegan:
void addbufer(char c){ // Añade a bufer -----------------------
switch(c){
case CR:
rcvchar=0;
while(rcvchar!=CR){
rcvchar=getc();
bufer[xbuff++]=rcvchar;
}
flagcommand=1;
break;
case STX: // Este es el trozo de codigo que recibe los 1000 bytes (tipo char) -------------------------------------------------
num_bytes=0;
for(xbuff=0;xbuff<1000;xbuff++){
archivo[xbuff]=getc();
if(archivo[xbuff]==ETX){
num_bytes=xbuff-1;
break;
}
}
flag_write=1;
break;
}
enable_interrupts(int_rda); // Habilita Interrupción RDA
enable_interrupts(global); // Habilita interrupciones
}
las variables las tengo definidas al principio del programa asi:
char archivo[1000];
long xbuff=0;
long num_bytes=0;
P.D.: Uso una variable de 1000 pero en realidad lo que recibo suele ser de menos (entre 500 y 800 bytes) pero pongo mas por si se diese el caso. Al final del archivo envio un ETX que indica cuando acaba este y sale del bulce.
¿¿¿ Alguien tiene idea de que puedo estar haciendo mal o como puedo hacer para que no se me solape la memoria en caso de que sea este el problema ???? :shock:
Un saludo, (Si me solucionais esto os debo la mitad de la nota que saque jejejjejeje :D)
-
ARREGLADO, he creado un protocolo que envi paquetes de 200 bytes para que no me ocupe tanta memoria y asi me ahorro problemas.
He pasado del 80% de RAM ocupada a 21%, o sea que de p.t. m.dr. jejejejej
Un saludo.