Diseño/normas del software

Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, dark_sasuke, m0skit0, LnD, ka69, zacky06

arisma
Habitual
Habitual
Mensajes: 497
Registrado: 18 Sep 2009, 08:41

Re: Diseño/normas del software

Mensaje por arisma »

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.

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: Diseño/normas del software

Mensaje por m0skit0 »

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 :lol:
Imagen

arisma
Habitual
Habitual
Mensajes: 497
Registrado: 18 Sep 2009, 08:41

Re: Diseño/normas del software

Mensaje por arisma »

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.

yosoy_bostero
Enteradillo
Enteradillo
Mensajes: 43
Registrado: 12 Ene 2011, 16:55

Re: Diseño/normas del software

Mensaje por yosoy_bostero »

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

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: Diseño/normas del software

Mensaje por m0skit0 »

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

yosoy_bostero
Enteradillo
Enteradillo
Mensajes: 43
Registrado: 12 Ene 2011, 16:55

Re: Diseño/normas del software

Mensaje por yosoy_bostero »

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

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: Diseño/normas del software

Mensaje por m0skit0 »

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:
Imagen

arisma
Habitual
Habitual
Mensajes: 497
Registrado: 18 Sep 2009, 08:41

Re: Diseño/normas del software

Mensaje por arisma »

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)->

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:

Código: Seleccionar todo

tError cMapeoDireccionamiento::nuevoMapeo(cMapeoDireccion mapeo)
{
   tError ret = ERR_MAP_MAX_MAPAS;

   if (num_mapeos != MAP_MAX_MAPAS)
   {
      if (mapeo.estaValidado())
      {
         cMapeoDireccion* nuevo_mapeo = new cMapeoDireccion(mapeo.obtenerDireccionBase(),
               mapeo.obtenerDireccionFin(), mapeo.obtenerLongitud(),mapeo.obtenerComponente(), mapeo.obtenerTipoComponente());
         if (nuevo_mapeo->validar() == ERR_OK)
         {
            int i = primerMapeoVacio();
            if (i != NO_INDICE)
            {
               mapeos[i] = nuevo_mapeo;
            }


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 :)

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)

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: Diseño/normas del software

Mensaje por m0skit0 »

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 :lol:

¡Vamos, que esto marcha! :oki:
Imagen

Avatar de Usuario
darkmonster
Habitual
Habitual
Mensajes: 182
Registrado: 08 Abr 2010, 20:28
PSN ID: darkmonster17
Ubicación: Mexico
Contactar:

Re: Diseño/normas del software

Mensaje por darkmonster »

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:

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 :)

Responder