PDA

Ver la versión completa : ¿Qué puede fallar cuando pasa ésto?



anibarro
27/01/2006, 02:09
Bueno, gracias a las pistas que me dio Oankali he conseguido usar las funciones normales de manejo de ficheros en la GP32, pero tengo un problema que no se solucionar.
Lo unico que he conseguido es reducir el problema a lo siguiente:
Con unos cuantos .c y .h, creo una libreria estatica (.a), que luego uso en el gpmain.c.
Todas los include y demas cosas del estilo estan en un .h, que esta incluido en todo los ficheros .c y .h de esta libreria.
Las funciones de esta libreria funcionan muy bien, pero a la hora de manejar ficheros empiezan los problemas. Incluyendo la libreria gpwrap.h que puse en otro mensaje, en principio todo funciona, uno de los .c carga pcx y otro .3ds. La que carga pcx funciona "bien", y lo pongo entre comillas porque despues de cargar un pcx, intente cargar un 3ds y la funcion "open" no era capaz de abrir el archivo.
Entonces, despues de cargar el pcx, para probar, abri un archivo con el fopen y no lo abria, probe a cargarlo con GpFileOpen por si el gpwrap funcionaba mal, y tampoco lo abria. Ni poniendo GpFatInit, ni sin ponerlo, nada.
Haciendo mas pruebas he visto que fue casualidad que abriese bien el pcx, porque poniendo directamente dentro del main este codigo:

ulong bytesLeidos;
FILE *f = fopen(gp:\\GPMM\\prueba.3ds,"rb");
if (f){
bytesLeidos = fread(buffer, 1, 10, f);
}


Lo abre y lo lee perfectamente, pero si meto la siguiente funcion en el .c que lee pcx por ejemplo, y la llamo desde el main, el programa se cuelga:

Leefichero(char buffer[11]) {
ulong bytesLeidos;
FILE *f = fopen(gp:\\GPMM\\prueba.3ds,"rb");
if (f){
bytesLeidos = fread(buffer, 1, 10, f);
}
}

Me estoy mareando de tanto probar :confused: y me he quedado sin ideas sobre que puede estar pasando :( La libreria la compilo exactamente con las mismas opciones de compilacion que el gpmain.c, en el gpmain.c incluyo la misma cabecera con los mismos includes, defines, etc.. que en los otros ficheros. No entiendo que puede estar pasando, menos aun cuando el resto de funciones van bien, solo me pasa con las que tratan los ficheros ( para mas cachondeo, han llegado a funcionar como decia antes...) y no es problema del GpFatInit...¿Alguna idea por caridad? :llorosa:

Puck2099
27/01/2006, 04:22
¿Pero se cuelga porque entra en un bucle infinito o se te reinicia la consola?

En principio no veo nada mal...

anibarro
27/01/2006, 07:28
Pues en la consola se cuelga y en el emu da un error y se cierra, creo que voy a hacer unas funciones equivalentes pero con otro nombre y probare a ver que pasa...no acaba de funcionarme bien el gpwrap ese :(

anibarro
27/01/2006, 17:14
Buff despues de mucho probar, resulta que la funcion rewind no estaba en el gpwrap pero tampoco daba error...y en el codigo, en los fseek en lugar de poner SEEK_SET por ejemplo, ponia un 0, y en el gpwrap se redefine el SEEK_SET para que coincida con el valor de la GP, pero si pones un 0, el le pasa un 0 al GpFileSeek, y significa otra cosa...bueno el caso es que ya funciona :D

anibarro
28/01/2006, 02:17
Ya se que parece que me estoy cachondeando, pero por fin se ha solucionado todo y de forma DEFINITIVA, lo que decia antes era parte del problema, porque he podido comprobar lo aleatorio que era. Anoche lo compilo y lo pruebo en el Geepee32 y funciona. Lo voy a probar esta tarde, y ya no funcionaba.
Problema: El Geepee no me funciona bien!!! cuando quiere funciona bien la carga de archivos desde la tarjeta y cuando quiere no...he probado en la GP32 y funciona siempre perfectamente, asi que moraleja: Probar siempre en la consola antes de deducir que algo esta mal :rolleyes: