Diseño/normas del software
Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, dark_sasuke, m0skit0, LnD, ka69, zacky06
Re: Diseño/normas del software
Vale, hasta la r20 estaba vacío el constructor.
Me refiero a que al crear una instancia de cPSP, no se hace lo del controlador y al ser la instancia a cAllegrex un miembro privado de cPSP, no se puede hacer manualmente(ya que no existe en cPSP un metodo para hacerlo).
Pero no te preocupes, ya he visto que hay comentarios en el constructor de cPSP como tarea pendiente.
Me refiero a que al crear una instancia de cPSP, no se hace lo del controlador y al ser la instancia a cAllegrex un miembro privado de cPSP, no se puede hacer manualmente(ya que no existe en cPSP un metodo para hacerlo).
Pero no te preocupes, ya he visto que hay comentarios en el constructor de cPSP como tarea pendiente.
Re: Diseño/normas del software
arisma escribió:Vale, hasta la r20 estaba vacío el constructor.
Qué va: http://code.google.com/p/psp-emu/source ... ex.cpp?r=9
arisma escribió:Me refiero a que al crear una instancia de cPSP, no se hace lo del controlador y al ser la instancia a cAllegrex un miembro privado de cPSP, no se puede hacer manualmente(ya que no existe en cPSP un metodo para hacerlo).
Claro, aún no se ha implementado cPSP porque aún no sirve para nada si no están implementados los componentes. De todas formas en alguna revisión estaba implementado pero lo cambié porque cambió la estructura. De todas formas cPSP crea dichos objetos e inicializa cada componente con un puntero a los componentes que necesite para funcionar. cPSP prácticamente no haría nada, todo queda relegado en los diferentes componentes.
arisma escribió:Pero no te preocupes, ya he visto que hay comentarios en el constructor de cPSP como tarea pendiente.
Tendría que haber leído esto primero
![Riendo :lol:](./images/smilies/icon_lol.gif)
![Imagen](http://i237.photobucket.com/albums/ff281/Kravenbcn/Otros/firma_admin_daxh.png)
Re: Diseño/normas del software
davidgf: Compila y linka perfectamente con g++ (GCC) 4.4.5 20101112 (Red Hat
4.4.5-2). No funciona, debugeo y veo que se juega con malloc y free en una clase
(cBloque) que no tiene constructor copia, así que si se crean varias copias de
la clase (implicitamente al usar el operador =) se copia también el puntero y se
llama a free varias veces. O bien se hace una copia de los datos (un malloc en
cada construcción del objeto) o bien se implementa un constructor copia con
puntero con contador de referencias. A mi me gusta más usar siempre punteros y
nunca referencias para evitar estos problemas (se obliga a llamar explícitamente
al constructor siempre y no hay constructor copia).
El problema parece estar después del primer bloque, al ir a asignar el siguiente comprueba si puntero está asignado(distinto de NULL) y al liberar la memoria apuntada por ese puntero(free)
Los datos de la primera asignación son:
Dirección->0x88000000
Longitud ->0x800000
puntero ->0xb7520008
Al hacer free de puntero es cuando cae.
Igual se está haciendo un lio y debería ser puntero del array de bloques(bloques[0], ...)
EDITO
Al apuntar puntero a una dirección en lugar de tener NULL, al querer asignar el siguiente bloque, se controla para realizar la llamada a free.
Sigo pensando lo mismo de antes, por ejemplo si se sustituye(Depurando) la dirección a la que apunta puntero por la de bloques[0].puntero ya no da error(hasta la siguiente pasada claro)(this)
Última edición por arisma el 26 Ene 2011, 21:40, editado 1 vez en total.
-
- Enteradillo
- Mensajes: 43
- Registrado: 12 Ene 2011, 16:55
Re: Diseño/normas del software
la parte de memoria quedara con este diseño ya? o se planea alguna modificacion, porque estoy intentando entenderla simplemente por eso, ya deje mis consultas en el hilo del codigo fuente, pero pregunto por si los que estan codificando preveen alguna modificacion importante de la estructura
Re: Diseño/normas del software
yosoy_bostero escribió:la parte de memoria quedara con este diseño ya? o se planea alguna modificacion
Nadie te puede responder a eso porque no somos adivinos. Si mañana hay un diseño mejor, por supuesto que se cambiará.
![Imagen](http://i237.photobucket.com/albums/ff281/Kravenbcn/Otros/firma_admin_daxh.png)
-
- Enteradillo
- Mensajes: 43
- Registrado: 12 Ene 2011, 16:55
Re: Diseño/normas del software
no m0skit0 eso esta clarisimo, yo preguntaba si los que estan codificando estan planeando/haciendo en estos momentos alguna modificacion importante, ya que estoy intentando comprender el funcionamiento de lo codificado y si estan trabajando para cambiarlo ahora me voy a volver loco.
por supuesto que si en un futuro aparece algun mejor diseño (incluso mio (? jajajaja) sera modificado
por supuesto que si en un futuro aparece algun mejor diseño (incluso mio (? jajajaja) sera modificado
Re: Diseño/normas del software
Bueno davidgf ha propuesto en el SVN revisar el diseño de memoria.
Si hay una idea diferente, se sopesan los pros y los contras y se decide cuál es mejor. Quiero dejar claro que aquí se apunta a hacer que funcione bien y se pueda mantener decentemente, no de que unos destaquen por encima de otros. Cuántas más cabezas pensantes seamos, mucho mejor, porque así se nos ocurrirán ideas alternativas, o iremos a documentarnos sobre el asunto y obtendremos una visión diferente de la de los otros, enriqueciendo el debate sobre el diseño.
Este debate es importante mantenerlo abierto siempre, pero obviamente cuanto más codificado esté el asunto más difíciles y largos se hacen los cambios de diseño, y luego (por experiencia propia) nadie quiere liarse a cambiarlo![katana :katana:](./images/smilies/katana.gif)
Si hay una idea diferente, se sopesan los pros y los contras y se decide cuál es mejor. Quiero dejar claro que aquí se apunta a hacer que funcione bien y se pueda mantener decentemente, no de que unos destaquen por encima de otros. Cuántas más cabezas pensantes seamos, mucho mejor, porque así se nos ocurrirán ideas alternativas, o iremos a documentarnos sobre el asunto y obtendremos una visión diferente de la de los otros, enriqueciendo el debate sobre el diseño.
Este debate es importante mantenerlo abierto siempre, pero obviamente cuanto más codificado esté el asunto más difíciles y largos se hacen los cambios de diseño, y luego (por experiencia propia) nadie quiere liarse a cambiarlo
![katana :katana:](./images/smilies/katana.gif)
![Imagen](http://i237.photobucket.com/albums/ff281/Kravenbcn/Otros/firma_admin_daxh.png)
Re: Diseño/normas del software
Ok, intentaré mirar lo de la memoria a ver si puedo ayudar.
Respecto al error que da, es producido porque el constructor sólo se ejecuta la primera vez por lo que puntero sólo contiene NULL la primera vez.
Si creamos una función del tipo(no es la solución por el posible peligro)->
y llamarlo después de
Hecho ésto se continua correctamente pero nos da KO debido a un ret = ERR_MAP_MAX_MAPAS
Otra posible solución puede el uso de new y delete para crear una objeto cBloque
ACTUALIZO: Respecto al nuevo error creo que es por lo siguiente
Se establece el valor de ret a ERR_MAP_MAX_MAPAS por si hay error(hasta aquí correcto y conforme con el resto del codigo)
Sin embargo, no se establece a ERR_OK después de mapeos[i] = nuevo_mapeo; después de dicha operación.
Claro que ahora pasamos al siguiente error ERR_CPU_SIN_MEMORIA![Sonrisa :)](./images/smilies/icon_e_smile.gif)
EDITO:
En ningún lugar se establece el controlador de memoria por lo que el valor que contiene es NULL.(valor con el que se inicializa-cAllegrex)
Respecto al error que da, es producido porque el constructor sólo se ejecuta la primera vez por lo que puntero sólo contiene NULL la primera vez.
Si creamos una función del tipo(no es la solución por el posible peligro)->
Código: Seleccionar todo
void cBloque::modificarPuntero(void) //o argumento tByte* punt que podría ser aún más peligroso
{
puntero = NULL;
}
y llamarlo después de
Código: Seleccionar todo
ret = crearNuevoBloqueSig(bloque);
Hecho ésto se continua correctamente pero nos da KO debido a un ret = ERR_MAP_MAX_MAPAS
Otra posible solución puede el uso de new y delete para crear una objeto cBloque
ACTUALIZO: Respecto al nuevo error creo que es por lo siguiente
Spoiler:
Se establece el valor de ret a ERR_MAP_MAX_MAPAS por si hay error(hasta aquí correcto y conforme con el resto del codigo)
Sin embargo, no se establece a ERR_OK después de mapeos[i] = nuevo_mapeo; después de dicha operación.
Claro que ahora pasamos al siguiente error ERR_CPU_SIN_MEMORIA
![Sonrisa :)](./images/smilies/icon_e_smile.gif)
EDITO:
En ningún lugar se establece el controlador de memoria por lo que el valor que contiene es NULL.(valor con el que se inicializa-cAllegrex)
Re: Diseño/normas del software
No había visto esto, soulless, perdona. De todas formas ya tienes escritura en el SVN, así que no dudes en meter mano.
De todas formas esto ya está solucionado, la CPU ya lee instrucciones desde memoria, aunque aún no he probado con nada que no sea NOP
¡Vamos, que esto marcha!![oki :oki:](./images/smilies/smiles-oki.gif)
De todas formas esto ya está solucionado, la CPU ya lee instrucciones desde memoria, aunque aún no he probado con nada que no sea NOP
![Riendo :lol:](./images/smilies/icon_lol.gif)
¡Vamos, que esto marcha!
![oki :oki:](./images/smilies/smiles-oki.gif)
![Imagen](http://i237.photobucket.com/albums/ff281/Kravenbcn/Otros/firma_admin_daxh.png)
- darkmonster
- Habitual
- Mensajes: 182
- Registrado: 08 Abr 2010, 20:28
- PSN ID: darkmonster17
- Ubicación: Mexico
- Contactar:
Re: Diseño/normas del software
Intentado compilar el emulador en Windows, abre el emulador, pero me marca un mensaje que dice Instruccion Invalida. No se si deba a mi Compilador (MinGW) o ya es momento de empezar a trastear el codigo para adaptarlo.
Por cierto tuve que modificar el Makefile, dejandolo asi:
Agrege: -static-libgcc -static-libstdc++ para eliminar las dependecias de librerias.
Saludos
Por cierto tuve que modificar el Makefile, dejandolo asi:
Código: Seleccionar todo
all:
g++ -ggdb -c *.cpp
g++ -o psp_emu -static-libgcc -static-libstdc++ *.o
clean:
rm -f *.o psp_emu
Agrege: -static-libgcc -static-libstdc++ para eliminar las dependecias de librerias.
Saludos
PSP 3010 > 5.51 > 5.55 > 6.00 > 6.20 > 6.20 TN-B Downgrade 5.01 -> 5.03 -> CFEnabler 3.70 ![Sonrisa :)](./images/smilies/icon_e_smile.gif)
![Sonrisa :)](./images/smilies/icon_e_smile.gif)