User Tag List

Página 1 de 2 12 ÚltimoÚltimo
Resultados 1 al 15 de 26

Tema: programar en c++ y variables/direcciones del sistema

  1. #1

    Fecha de ingreso
    May 2005
    Mensajes
    444
    Mencionado
    0 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts

    programar en c++ y variables/direcciones del sistema

    Hola,

    pues eso un par de preguntillas

    ¿se puede compilar en c++ para la gp32 con el SDK Oficial? y si se puede como? algun ejemplillo/plantilla please

    ¿de donde puedo sacar las variables/direcciones de sistema de la gp? no encuentro ninguna pagina y veo que la gente los usa, por ejemplo en el Magical Noseque (no recuerdo el resto del nombre) que se libero el codigo fuente hace poco utiliza la dirección de memoria donde se almacena la paleta para crear efectos Fade in fade off ¿de donde ha sacado esa dirección?

    hay gente que tiene la dirección de la variable del sistema que indica cuando se ha producido el refresco de la pantalla... y eso de donde lo han sacado? en algun lado estara documentado, vamos digo yo, no?

    Pos solo eso, gracias
    The_Goulin

  2. #2

    Fecha de ingreso
    Nov 2003
    Ubicación
    Andorra
    Mensajes
    661
    Mencionado
    2 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts
    No conozco nadie que haya conseguido compilar C++ con el SDK oficial con el compilador GCC (aunque oí algo hace muuuucho de que sí se podía).
    Sí que se puede hacer con el ADS.

    En cuanto a lo que preguntas de las direcciones, las sacan de la documentación del procesador.
    Me parece que aquí, el la web de Mr.Spiv encontrarás bastante material: http://www.cs.helsinki.fi/u/jikorhon...nload.html#pdf

    Oankali.

  3. #3

    Fecha de ingreso
    Aug 2003
    Ubicación
    Madrid (Getafe)
    Mensajes
    13,899
    Mencionado
    48 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    5
    Agradecer Thanks Received 
    221
    Thanked in
    Agradecido 164 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    2
    Cita Iniciado por oankali
    No conozco nadie que haya conseguido compilar C++ con el SDK oficial con el compilador GCC (aunque oí algo hace muuuucho de que sí se podía).
    Sí que se puede hacer con el ADS.
    Compilar se puede perfectamente ... yo hace muuucho compile alguna cosilla. Los rumores eran que se necesitaba algun parche porque la gestion de memoria (new y destruct) de objetos parecia que no tiraba bien y tendia a dejar memoria por ahi purulando.

    Te pasaria el codigo pero no tengo idea de donde andaran las cosillas que hice en c++, lo que si te digo que fue con el minigp32 y el sdk oficial.

    Aiken

  4. #4

    Fecha de ingreso
    Apr 2003
    Ubicación
    Salamanca
    Mensajes
    5,347
    Mencionado
    2 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    13
    Agradecer Thanks Received 
    35
    Thanked in
    Agradecido 29 veces en [ARG:2 UNDEFINED] posts
    Creo que en las versiones mas actuales del GCC no hay problemas con "new".

    Direccioens de registros pides??? mira en los ejemplos de MrSpiv y en los includes del Mirko's SDK.
    Última edición por mortimor; 12/07/2005 a las 16:04

  5. #5

    Fecha de ingreso
    Mar 2003
    Ubicación
    Cerdanyola
    Mensajes
    3,846
    Mencionado
    46 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    38
    Agradecer Thanks Received 
    1,887
    Thanked in
    Agradecido 614 veces en [ARG:2 UNDEFINED] posts
    No se si usare alguna caracteristica del c++ en mi codigo, pero clases, sobrecarga de operadres y esas cosas, no.

  6. #6

    Fecha de ingreso
    Apr 2003
    Ubicación
    Salamanca
    Mensajes
    5,347
    Mencionado
    2 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    13
    Agradecer Thanks Received 
    35
    Thanked in
    Agradecido 29 veces en [ARG:2 UNDEFINED] posts
    Sera que estoy yo equivocado , ahora lo quito para no inducir a error.

  7. #7

    Fecha de ingreso
    Nov 2003
    Ubicación
    Andorra
    Mensajes
    661
    Mencionado
    2 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts
    Bueno, animado por la respuesta de Aiken, por fin me he decidido a probar el C++ con el GCC.
    No sé como lo hice hace 2 años, pero hoy no estoy teniendo problemas, salvo el de preparar correctamente las cabeceras de las librerías gpfont16.h y gpgraphic16.h
    Aparte de esto ningún problema por el momento.

    Aquí os pongo el código con ejemplos sacados de http://www.cplusplus.com/doc/tutorial/:

    Código:
    #include <gpdef.h>
    #include <gpstdlib.h>
    #include <gpfont16.h>
    
    #include "gpmain.h"
    
    
    GPDRAWSURFACE gtSurface[2];
    int giSurface;
    
    
    class CRectangle {
        int x, y;
      public:
        void set_values (int,int);
        int area (void) {return (x*y);}
    };
    
    void CRectangle::set_values (int a, int b) {
      x = a;
      y = b;
    }
    
    class CRectangle2 {
        int width, height;
      public:
        CRectangle2 (int,int);
        int area (void) {return (width*height);}
    };
    
    CRectangle2::CRectangle2 (int a, int b) {
      width = a;
      height = b;
    }
    
    // Initialize graphics mode
    void InitGraphics(int depth)
    {
      // Initialize graphic mode
      GpGraphicModeSet(depth, NULL);
    
      // Crea les superficies
      GpLcdSurfaceGet(&gtSurface[0], 0);
      GpLcdSurfaceGet(&gtSurface[1], 1);
    
      // Register surfaces
      giSurface = 0;
      GpSurfaceSet(&gtSurface[giSurface]);
    
      // Activates LCD if needed
      if (!(GpLcdStatusGet() & GPC_LCD_ON_BIT))
        GpLcdEnable();
    
      giSurface = 1;
    }
    
    int divide (int a, int b=2)
    {
      int r;
      r=a/b;
      return (r);
    }
    
    void prevnext (int x, int& prev, int& next)
    {
      prev = x-1;
      next = x+1;
    }
    
    void GpMain (void * arg)
    {
      int i, j;
      char str[30];
      CRectangle rect;
      CRectangle2 rect2 (4,6);
      
      InitGraphics(16);
    
      GpTextOut16(NULL, &gtSurface[giSurface], 0, 0, "Ejemplo C++ en 16 bits", 0);
    
      prevnext(1, i, j);
      gm_sprintf(str, "i=%ld, j=%ld", i, j);
      GpTextOut16(NULL, &gtSurface[giSurface], 0, 20, str, 0);
    
      i = divide(12);
      j = divide(12, 4);
      gm_sprintf(str, "i=%ld, j=%ld", i, j);
      GpTextOut16(NULL, &gtSurface[giSurface], 0, 40, str, 0);
    
      rect.set_values (3,4);
      gm_sprintf(str, "area=%ld, area2=%ld", rect.area(), rect2.area());
      GpTextOut16(NULL, &gtSurface[giSurface], 0, 60, str, 0);
    
      gm_sprintf(str, "memoria=%ld", gm_availablesize());
      GpTextOut16(NULL, &gtSurface[giSurface], 0, 220, str, 0);
    
      GpSurfaceFlip(&gtSurface[giSurface++]);
      giSurface &= 0x01;
    
      while (TRUE);
    }
    Ahora voy a ver que tal los problemas de memoria con los constructores y desctructores.
    Os mantendré informados.

  8. #8

    Fecha de ingreso
    Nov 2003
    Ubicación
    Andorra
    Mensajes
    661
    Mencionado
    2 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts
    Pues hasta aquí hemos llegado, a la que utilizo los operadores new/delete ya no funciona.
    He descargado el parche de Mr.Spiv gracias a un post incontestado de Aiken de hace la tira de tiempo, pero, como él, no hay manera de hacerlo funcionar.
    Aunque me parece que estoy cerquita.
    Me he puesto en contacto con Mr.Spiv. A ver si me contesta.

    Oankali.

  9. #9

    Fecha de ingreso
    Feb 2005
    Mensajes
    1,120
    Mencionado
    7 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    60
    Agradecer Thanks Received 
    84
    Thanked in
    Agradecido 50 veces en [ARG:2 UNDEFINED] posts
    Nos mantenemos a la escucha

  10. #10

    Fecha de ingreso
    Jun 2004
    Ubicación
    Granada
    Mensajes
    673
    Mencionado
    0 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    1
    Thanked in
    Agradecido 1 vez en 1 post

    Post

    Cita Iniciado por oankali
    Pues hasta aquí hemos llegado, a la que utilizo los operadores new/delete ya no funciona.
    He descargado el parche de Mr.Spiv gracias a un post incontestado de Aiken de hace la tira de tiempo, pero, como él, no hay manera de hacerlo funcionar.
    Aunque me parece que estoy cerquita.
    Me he puesto en contacto con Mr.Spiv. A ver si me contesta.

    Oankali.
    Oankali, has mirado en el mirkoSDK? hay un par de ejemplos de C++ donde puedes ver como crea y destruye objetos sin problema :?

    Es mas la libreria de una-i es C++ puro y duro xD

    Un Saludo
    Weblog sobre mis proyectos de linux, gp2x, emulación, desarrollo, abandonware...
    http://david.dantoine.org/


  11. #11

    Fecha de ingreso
    Jun 2004
    Mensajes
    250
    Mencionado
    1 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por oankali
    Pues hasta aquí hemos llegado, a la que utilizo los operadores new/delete ya no funciona.
    He descargado el parche de Mr.Spiv gracias a un post incontestado de Aiken de hace la tira de tiempo, pero, como él, no hay manera de hacerlo funcionar.
    Aunque me parece que estoy cerquita.
    Me he puesto en contacto con Mr.Spiv. A ver si me contesta.

    Oankali.
    Yo uso algo tal que asi y no hay ningun problema, lo del appmain te lo puedes saltar, solo es importante la redefinicion del operador new y delete.

    Esto es con el sdk de mirko, no se si en las veriones modernas lo habran arreglado, en el sdk oficila supongo que tendras que llamar a gp_malloc o como se llame y listo.

    Código:
    ///////////////////////////////////////////////////////////////////////////
    //  Description
    //
    ///////////////////////////////////////////////////////////////////////////
    int main()
    {
      AppMain();
      gp_Reset();
      return 0;
    }
    
    ///////////////////////////////////////////////////////////////////////////
    void*  operator new(long unsigned int size)
    {
      return malloc(size);
    }
    
    ///////////////////////////////////////////////////////////////////////////
    void*   operator new[](long unsigned int size)
    {
      return malloc(size);
    }
    
    ///////////////////////////////////////////////////////////////////////////
    void   operator delete(void* p)
    {
      free(p);
    }
    
    ///////////////////////////////////////////////////////////////////////////
    void   operator delete[](void* p)
    {
      free(p);
    }

  12. #12

    Fecha de ingreso
    Nov 2003
    Ubicación
    Andorra
    Mensajes
    661
    Mencionado
    2 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts
    Mr.Spiv me ha contestado que con el devkitARM en principio tendría que funcionar sin parche, pero no lo he conseguido.

    Eso sí, si añado estas líneas (gracias Una-i):

    Código:
    void* operator new(long unsigned int size)
    {
      return gm_malloc(size);
    }
    
    void* operator new[](long unsigned int size)
    {
      return gm_malloc(size);
    }
    
    void operator delete(void* p)
    {
      gm_free(p);
    }
    
    void operator delete[](void* p)
    {
      gm_free(p);
    }
    ya solo me queda un error:

    gpmain.o: In function `Example5()':
    gpmain.cpp.text+0x478): undefined reference to `__gxx_personality_sj0'
    collect2: ld returned 1 exit status
    make: *** [testCPP.elf] Error 1

    ¿Será mi makefile?

    Aquí os cuelgo todo el proyecto.

    Oankali.
    Archivos adjuntados Archivos adjuntados
    Última edición por oankali; 14/07/2005 a las 08:45

  13. #13

    Fecha de ingreso
    Nov 2003
    Ubicación
    Andorra
    Mensajes
    661
    Mencionado
    2 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts
    Trasteando un poco más, me he cargado los operadores new y delete del código cambiándolos directamente por las funciones gm_free() y gm_malloc().
    Me sigue dando el mismo error que antes, o sea que ese error no tiene nada que ver con estos dos operadores.

    El error: gpmain.cpp.text: undefined reference to `__gxx_personality_sj0'
    lo provoca el destructor de la clase.
    A la que elimino el destructor, ya funciona.

    Esto no es una solución, pero era para ayudaros a ayudarme

    Oankali.

  14. #14

    Fecha de ingreso
    Sep 2004
    Ubicación
    Vigo
    Mensajes
    129
    Mencionado
    0 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    3
    Bucenado por google he encontrado esto:

    Exceptions are not supported. Since exceptions are enabled by default in the C++ frontend, they explicitly need to be turned off using -fno-exceptions in the compiler options. Failing this, the linker will complain about an undefined external reference to __gxx_personality_sj0.

    La fuente es:

    http://www.sigterm.de/projects/sens-.../libc/FAQ.html

    Pruébalo y ya nos dirás.

    Un saludo.
    Cláusula de exención de responsabilidad: No tengo que estar necesariamente de acuerdo con mis propias opiniones.

  15. #15

    Fecha de ingreso
    Sep 2004
    Ubicación
    Vigo
    Mensajes
    129
    Mencionado
    0 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    3
    He compilado tu ejemplo añadiendo

    CPPFLAGS = $(CFLAGS) -fno-exceptions

    en el makefile y tu error desaparece.

    sin embargo yo obtengo el siguiente:

    gpmain.o: In function `MainScreen()':
    gpmain.cpp.text+0x1a0): undefined reference to `GpTextOut16(tagGPDRAWTAG*, tag
    GPDRAWSURFACE*, int, int, char*, int)'

    si cambio GpTextOut16 por GpTextOut compila a la perfección.

    ¿A ti no te pasa lo mismo?

    Un saludo.
    Cláusula de exención de responsabilidad: No tengo que estar necesariamente de acuerdo con mis propias opiniones.

Página 1 de 2 12 ÚltimoÚltimo

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •