PDA

Ver la versión completa : Código interfaceado para acceder a la táctil



Propeller
07/11/2007, 15:17
Bueno, para ahorrar laburo a la gente, y dado que yo he tenido que hacerlo ya para una cosa que estoy programando, os pongo aquí el código que he usado para acceder a la táctil (sin misterios, es como el que ya existe, modificado e interfaceado) listo para usar en cualquier aplicación.

Según ha dicho Anarchy, que lo ha probado, funciona. No obstante, sería bueno que lo afináramos entre todos para conseguir la mejor calibración :)


Por cierto, contestación de GPH en referencia a la táctil:


Hello,

We will announce a general guide for touch screen support soon.
Thank you for your patience.

Y yo digo que ni paciencia ni puñetas, aquí a ansiosos no nos gana nadie [wei]

Edit_1: Actualizado con las correcciones de rlyeh

Propeller

Puck2099
07/11/2007, 15:29
A mi ya me lo pasaste, pero nuevamente gracias ;)

headoverheels
07/11/2007, 15:58
Bueno, para ahorrar laburo a la gente, y dado que yo he tenido que hacerlo ya para una cosa que estoy programando, os pongo aquí el código que he usado para acceder a la táctil (sin misterios, es como el que ya existe, modificado e interfaceado) listo para usar en cualquier aplicación.

Gracias por el curro!


Y yo digo que ni paciencia ni puñetas, aquí a ansiosos no nos gana nadie [wei]
Ansiosos? Como los de UPS no me traigan la blanquita hoy les quemo los almacenes :mad:

Puck2099
07/11/2007, 16:01
Ansiosos? Como los de UPS no me traigan la blanquita hoy les quemo los almacenes :mad:

Yo tengo a los de SEUR en "reparto" desde las 11:37 de la mañana y aquí estoy con un sueño que me caigo, deseando echarme la siesta y esperando a ver si se digna a aparecer el mensajero...

X-Code
07/11/2007, 16:08
Muchas thankyous amigo Propeller :brindis: ... Ahora solo necesito encontrar la forma de conseguir la pasta para mi F-200... Si es que hay que j*derse con la "faenita" que me estan haciendo entre Mastercard y el banco xD

Eso si, dejando a la blanquita de lado, mi pedido de botones a HG para mi recreativa ha llegado absolutamente puntual via UPS

headoverheels
08/11/2007, 08:51
Paeryn ha publicado una versión de sus librerías SDL con soporte para la tactil, las tenéis en http://paeryn.myby.co.uk/


Eso si, dejando a la blanquita de lado, mi pedido de botones a HG para mi recreativa ha llegado absolutamente puntual via UPS
Pues como vea a los de UPS :ametra:
Después de estar ayer todo el **** día esperando en casa el paquete, veo que en la web han cambiado el estado a "destinatario no disponible". ¿A donde **** han ido a llevar mi pedido? :mad:

Rivroner
08/11/2007, 09:40
Pues a mí los de Seur me dicen en la web que pasaron ayer a las 18 horas de la tarde pero yo estaba en casa y no oí el timbre O_o

La verdad es que estaba echando un vicio "a toda tralla" en mi cuarto pero no sé, ¡¡¡hay que tocar el timbre más veces mamomes :D !!!

A ver si hoy cuando pasan estoy en casa porque tengo muchas cosas que hacer :(

rlyeh
08/11/2007, 10:35
valoresTactil *vT;
vT = (valoresTactil*)malloc(sizeof(vT));


estas dos lineas ponlas en abrirtactil() por dios xD !

y haz un free en cerrartactil()

Rarok
08/11/2007, 12:42
Pues a mí los de Seur me dicen en la web que pasaron ayer a las 18 horas de la tarde pero yo estaba en casa y no oí el timbre O_o

La verdad es que estaba echando un vicio "a toda tralla" en mi cuarto pero no sé, ¡¡¡hay que tocar el timbre más veces mamomes :D !!!

A ver si hoy cuando pasan estoy en casa porque tengo muchas cosas que hacer :(

Yo me pasé ayer toda la tarde sin lavarme hasta que me la trajeron, es que tengo una maldición, si espero un paquete y me ducho (aunque sea una ducha de 5 minutos) van a llamar mientras tanto y no voy a oír el timbre... SIEMPRE ME PASA ESO, pero por suerte ayer estuve en plan guarro. Y por cierto, tampoco nada de ver la TV escuchar música... XDDD

Rivroner
08/11/2007, 12:48
Yo me pasé ayer toda la tarde sin lavarme hasta que me la trajeron, es que tengo una maldición, si espero un paquete y me ducho (aunque sea una ducha de 5 minutos) van a llamar mientras tanto y no voy a oír el timbre... SIEMPRE ME PASA ESO, pero por suerte ayer estuve en plan guarro. Y por cierto, tampoco nada de ver la TV escuchar música... XDDD

Sí, voy a tener que hacer eso, estaré meditando hasta que vengan :D

Propeller
08/11/2007, 13:00
valoresTactil *vT;
vT = (valoresTactil*)malloc(sizeof(vT));


estas dos lineas ponlas en abrirtactil() por dios xD !

La segunda si, la primera la muevo afuera, que si no se me pierde el puntero en cuanto termine abrirTactil() ;)

De todas formas, menuda cagada que hice al cortar el código en funciones. Es lo que tiene ir tan rápido :p



y haz un free en cerrartactil()

Yatta.

Gracias por tu aportación :)

Propeller

Puck2099
08/11/2007, 14:37
Propeller, Paeryn dice haber podido acceder a la configuración de calibración de GPH. Luego le echo un vistazo a su código y veo si puedo modificar el tuyo con los añadidos :)

Propeller
08/11/2007, 15:19
Propeller, Paeryn dice haber podido acceder a la configuración de calibración de GPH. Luego le echo un vistazo a su código y veo si puedo modificar el tuyo con los añadidos :)

Ah, fenomenal :)

Espero poder meterle mano a la consola el Sábado, que sólo sé que funciona el código porque Anarchy lo ha probado :p

De todas formas, necesito acceder a información sin cocinar. Ya progresaré en esto cuando tenga la consola, pero parece que no voy a tener problemas puesto que el módulo que dá soporte a la pantalla táctil es GPL (wm97xx: Wolfson WM9705/WM9712 Touchscreen Controller, hecho por un empleado de Wolfson Micro).

Propeller

joanvr
08/11/2007, 15:33
Propeller, Paeryn dice haber podido acceder a la configuración de calibración de GPH. Luego le echo un vistazo a su código y veo si puedo modificar el tuyo con los añadidos :)


static int ts_cal[7] = {6203, 0, -1501397, 0, -4200, 16132680, 65536};

static void read_calibration()
{
struct stat sbuf;
int pcal_fd;
char pcalbuf[200];
int index;
char *tokptr;
char *calfile = "/etc/pointercal";

if (stat(calfile,&sbuf) == 0) {
pcal_fd = open(calfile,O_RDONLY);
read(pcal_fd,pcalbuf, 200);
ts_cal[0] = atoi(strtok(pcalbuf," "));
index = 1;
while (index < 7) {
tokptr = strtok(NULL," ");
if (*tokptr != '\0') {
ts_cal[index] = atoi(tokptr);
index++;
}
}
close(pcal_fd);
};
}

/*...

Y luego m&#225;s adelante los usa as&#237;:

...*/

if (ts_cal[6] == 65536) { // This seems to be what the F200 uses
dx = (ts_cal[2] + ts_cal[0] * (int)ts_event->x) >> 16;
dy = (ts_cal[5] + ts_cal[4] * (int)ts_event->y) >> 16;
} else {
dx = (ts_cal[2] + ts_cal[0] * (int)ts_event->x) / ts_cal[6];
dy = (ts_cal[5] + ts_cal[4] * (int)ts_event->y) / ts_cal[6];
}


Aqui esta el codigo que lee la calibraci&#243;n. Es bastante sencillo. Solo hacia falta saber donde estaba el fichero y que formato tenia. Bien por Paeryn (o quien lo haya pillado). Segun lo entiendo mi explicacion es as&#237;:

ts_cal[2] contiene el offset X.
ts_cal[5] contiene el offset Y.
ts_cal[0] contiene la relacion entre las coordenadas de la pantalla / coordenadas de la t&#225;ctil en el eje X.
ts_cal[4] contiene la relacion entre las coordenadas de la pantalla / coordenadas de la t&#225;ctil en el eje Y.

Por defecto parece que ts_cal[6] vale 65536, lo que indica que todos los valores anteriores estan en punto fijo de 16 bits de precisi&#243;n (2^16 = 65536), pero por si las moscas cambiasen eso m&#225;s adelante usa el else y hace la division en lugar del shift.

Puck2099
08/11/2007, 22:55
Bueno, adjunto los archivos de Propeller modificados con el código de Paeryn.

Puck2099
08/11/2007, 23:02
Por cierto, acabo de probar un programilla de prueba que me he hecho con esta interfaz y ya no se descalibra la táctil al volver al menú principal :brindis:

joanvr
09/11/2007, 00:37
Weno, aqui cuelgo una liberia para usar la t&#225;ctil con algunas peque&#241;as mejoras respecto a las anteriores. He tomado un poco de todo lo que hemos visto estos dias... Aunque he rehecho casi todo.

Hay los dos archivos de la libreria: touchscreen.h touchscreen.c y un main.c con un mini-programa de ejemplo que lo usa.
Tambien he incluido el .gpe compilado del programita. Se sale del programa dando 10 toquecitos a la pantalla (as&#237; simplificaba el ejemplo y me centraba en la t&#225;ctil).

Esta todo comentado (quiz&#225;s demasiado xD), as&#237; que echenle un ojo aunque no dominen del tema :P

Miren, critiquen y sobretodo, mejorenlo! :D

BuD
09/11/2007, 08:59
Por cierto, acabo de probar un programilla de prueba que me he hecho con esta interfaz y ya no se descalibra la t&#225;ctil al volver al men&#250; principal :brindis:

&#191;Porque deber&#237;a descalibrarse? Antes lo hacia?


Weno, aqui cuelgo una liberia para usar la t&#225;ctil con algunas peque&#241;as mejoras respecto a las anteriores. He tomado un poco de todo lo que hemos visto estos dias... Aunque he rehecho casi todo.

Hay los dos archivos de la libreria: touchscreen.h touchscreen.c y un main.c con un mini-programa de ejemplo que lo usa.
Tambien he incluido el .gpe compilado del programita. Se sale del programa dando 10 toquecitos a la pantalla (as&#237; simplificaba el ejemplo y me centraba en la t&#225;ctil).

Esta todo comentado (quiz&#225;s demasiado xD), as&#237; que echenle un ojo aunque no dominen del tema :P

Miren, critiquen y sobretodo, mejorenlo! :D

Juer, que mal te vendes, jomio...
En que ha mejorado en esta versi&#243;n? Al final le metistes aliasing? Cu&#233;ntame porque la calibraci&#243;n es m&#225;s que perfecta ahora. Va va, di! :D

joanvr
09/11/2007, 10:39
¿Porque debería descalibrarse? Antes lo hacia?
Juer, que mal te vendes, jomio...
En que ha mejorado en esta versión? Al final le metistes aliasing? Cuéntame porque la calibración es más que perfecta ahora. Va va, di! :D

Jaja,

Las mejoras:
- Ahora el valor devuelto es la media de los dos últimos (Si los hubiese, si es el primer toque evidentemente no puede hacerlo). Con eso pretendo ganar precisión, ya que oscilaba bastante el puntero. Ahora ha mejorado un poco, aunque sigue haciendolo un poco. Habria que probar de hacer la media de los últimos 4 por ejemplo, pero entonces habria que guardar más datos, ahora mismo ocupa lo mismo que si no lo hiciese.
- He modificado la lectura de los datos de calibrado. Creo que ahora es más sencillo y se entiende mejor (probablemente también sea más rápido, pero como no es algo que se tenga que hacer a cada frame no afectaria al rendimiento).
- He añadido la información de "NewPress" directamente en la estructura. Debido al padding a 4 bytes que hubiese hecho antes sigue ocupando lo mismo, y tienes esa información extra ahí que solo son dos operaciones de bits, por lo que no creo que afecte al rendimiento.

Espero que les sirva.

Puck2099
09/11/2007, 11:01
¿Porque debería descalibrarse? Antes lo hacia?

Sí, al menos el programa de pruebas aquel y no sé si la primera versión del Scummvm también te dejaban descalibrada la táctil al salir...

rlyeh
09/11/2007, 12:33
juanis el SDK oficial de la DS toma 4 muestras para que no tiemble el puntero con los datos.
tambi&#233;n hace autocalibracion con cada vsync en una interrupcion (pero no creo que haga falta realmente aqui a menos que al puntero se le vaya la pinza por las buenas...)

joanvr
09/11/2007, 13:26
juanis el SDK oficial de la DS toma 4 muestras para que no tiemble el puntero con los datos.
también hace autocalibracion con cada vsync en una interrupcion (pero no creo que haga falta realmente aqui a menos que al puntero se le vaya la pinza por las buenas...)

En el SDK Homebrew tmb tomaba 4 muestras. Lo que pasa es que para solo 2 era imediato y 4 es "algo" más largo. XD Voy a probarlo a ver q tal...

Propeller
09/11/2007, 13:34
Ma&#241;ana podr&#233; echarle el guante a una F-200, as&#237; que por fin podr&#233; probar todo esto y ayudar "en serio" con las calibraciones :)

Propeller

joanvr
09/11/2007, 15:26
Aqui os dejo el codigo nuevo que hace la media de samples anteriores. En el touchscreen.h hay un define (SAMPLES_TOUCHSCREEN) del número de samples que quieres usar. Cualquier valor deberia funcionar, pero es recomendable usar multiplos de 2 para temas de eficencia. Esta puesto a 4 en el codigo.

También estan incluidos 5 ejecutables .gpe con distinto número de samples (1, 2, 4, 8 y 16). La version de 16 es la más precisa para posiciones estáticas, pero en movimiento va con algo de retraso. Inversamente la de 1 sola muestra se le va bastante la olla pero es más rápida en los movimientos. 4 u 8 creo que es lo ideal. Podriais probarlo en vuestras gp2x-f200 y ver cual os va mejor? No sea que mi gp2x-f200 vaya "distinto" a las otras...

Gracias :)

Puck2099
09/11/2007, 15:58
Aqui os dejo el codigo nuevo que hace la media de samples anteriores. En el touchscreen.h hay un define (SAMPLES_TOUCHSCREEN) del número de samples que quieres usar. Cualquier valor deberia funcionar, pero es recomendable usar multiplos de 2 para temas de eficencia. Esta puesto a 4 en el codigo.

También estan incluidos 5 ejecutables .gpe con distinto número de samples (1, 2, 4, 8 y 16). La version de 16 es la más precisa para posiciones estáticas, pero en movimiento va con algo de retraso. Inversamente la de 1 sola muestra se le va bastante la olla pero es más rápida en los movimientos. 4 u 8 creo que es lo ideal. Podriais probarlo en vuestras gp2x-f200 y ver cual os va mejor? No sea que mi gp2x-f200 vaya "distinto" a las otras...

Gracias :)

Sí, efectivamente los que mejor van son 4 u 8, quizá quedándome con 8 pues tampoco se nota mucho el "retraso".

De todos modos, es increible como se le va la pinza a la táctil aun con esa resolución, el valor horizontal debe oscilar como 20 o 30 píxeles, ¿no?

joanvr
10/11/2007, 14:08
He probado una nueva idea:

En lugar de hacer la media de los últimos X valores, leer X valores de la táctil a cada vez que quires leer los valores y hacer la media. Aunque se soluciona el tema de retraso con respecto la posición real, y la sensibilidad es muy buena, los fps caen una mala cosa... Supongo que sera lento de leer tantos samples de golpe...

Así que por ahora la mejor solución parece ser hacer la media de los últimos valores, entre 4 y 8 lo ideal... A lo mejor con un juego real, que vaya a menos fps que la demo que colgué, no se le iria tanto la olla.

Puck, tu que estas implementando la táctil en el fenix, usas un sistema parecido al último sistema que he colgado? Podrias mirar si tambien se le va mucho la olla con un programa que vaya a una cantidad de fps normales?

Puck2099
10/11/2007, 14:12
Puck, tu que estas implementando la táctil en el fenix, usas un sistema parecido al último sistema que he colgado? Podrias mirar si tambien se le va mucho la olla con un programa que vaya a una cantidad de fps normales?

Pues yo de momento lo tengo implementado con el último interfaz que pegué aquí, con una sola medida, pero tenía pensado cambiarlo a algo similar a lo que has propuesto ahora, es decir, hacer 4 mediciones, comprobar que no se van de rango y la media entre ellas.

Con el Whendown de Chipan que consta de "toques" a lo Ouendan parece ir bastante bien con una sola medida, luego pruebo a meter las 4 medidas y te digo.

joanvr
10/11/2007, 14:15
Pues yo de momento lo tengo implementado con el &#250;ltimo interfaz que pegu&#233; aqu&#237;, con una sola medida, pero ten&#237;a pensado cambiarlo a algo similar a lo que has propuesto ahora, es decir, hacer 4 mediciones, comprobar que no se van de rango y la media entre ellas.

Con el Whendown de Chipan que consta de "toques" a lo Ouendan parece ir bastante bien con una sola medida, luego pruebo a meter las 4 medidas y te digo.

Si, la primera medida (un toque) suele ser bastante preciso, solo se le va la olla si lees de forma exaustiva la pantalla t&#225;ctil. En el Rhythm Mayhem nos va tambien muy bien para los toques, aunque para los de arrastrar si lo pones en el centro no hay problema, si se te va un poco puede dar problemas... Tendremos que hacer una logica m&#225;s permisiva que te permita un fotograma o dos de error...

Respeto a lo de hacer 4 mediciones supongo que te refieres a hacer 4 reads por cada update... Y a mi en el programa ese de emplo que no hace nada m&#225;s me caen los fps una burrada al leer valores cuando esta la tactil presionada.

Puck2099
10/11/2007, 14:18
Si, la primera medida (un toque) suele ser bastante preciso, solo se le va la olla si lees de forma exaustiva la pantalla táctil. En el Rhythm Mayhem nos va tambien muy bien para los toques, aunque para los de arrastrar si lo pones en el centro no hay problema, si se te va un poco puede dar problemas... Tendremos que hacer una logica más permisiva que te permita un fotograma o dos de error...

Respeto a lo de hacer 4 mediciones supongo que te refieres a hacer 4 reads por cada update... Y a mi en el programa ese de emplo que no hace nada más me caen los fps una burrada al leer valores cuando esta la tactil presionada.

Por cierto, mírate el video del Exult con la táctil, ahí también uso una lectura y los "arrastres" van bastante bien :)

joanvr
10/11/2007, 14:30
Por cierto, mírate el video del Exult con la táctil, ahí también uso una lectura y los "arrastres" van bastante bien :)

Así pues el problema si que sea de intentar leer muchos samples por segundo... Voy a ponerle un delay al programita de ejemplo a ver si mejora...

< - >
Edit: Pues si, mejora bastante... He probado con el de 4 mediciones y se queda ahí quieto y estable como un campeón XD

Puck2099
10/11/2007, 14:32
Edit: Pues si, mejora bastante... He probado con el de 4 mediciones y se queda ahí quieto y estable como un campeón XD

¿No te dan unos fps parecidos haciendo 4 lecturas por toque que con el delay?

joanvr
10/11/2007, 14:35
¿No te dan unos fps parecidos haciendo 4 lecturas por toque que con el delay?

Dan algunos más con el Delay, aunque el problema es que (a no ser que lo hagas como otro thread) mientras estas leyendo la táctil no haces nada más, y entonces pierdes tiempo de cáclulo para el juego solo para esperar a que la táctil te de nuevos valores.
En un juego "de verdad" no hace falta el delay, pues el juego en si ya hará la misma "función".

Puck2099
13/11/2007, 22:18
Dan algunos más con el Delay, aunque el problema es que (a no ser que lo hagas como otro thread) mientras estas leyendo la táctil no haces nada más, y entonces pierdes tiempo de cáclulo para el juego solo para esperar a que la táctil te de nuevos valores.
En un juego "de verdad" no hace falta el delay, pues el juego en si ya hará la misma "función".

joanvr, con lo de las 4 medidas y la media que haces en el código que posteaste, ¿se nota mejora respecto a una sola media cuando usas los delays?

Es que no sé si me vale la pena implementar algo similar...

BuD
14/11/2007, 00:01
joanvr, con lo de las 4 medidas y la media que haces en el código que posteaste, ¿se nota mejora respecto a una sola media cuando usas los delays?

Es que no sé si me vale la pena implementar algo similar...

Jaja, di la verdad! Te da pereza... xDDD
Si que se nota si, que estuvimos joanvr y yo prueba que te prueba el día que lo programo. Venga, curratelo, que es trivial programar eso. xD

Puck2099
14/11/2007, 00:03
Jaja, di la verdad! Te da pereza... xDDD
Si que se nota si, que estuvimos joanvr y yo prueba que te prueba el día que lo programo. Venga, curratelo, que es trivial programar eso. xD

Sí, estoy en ello, pero es que como dices da mazo pereza y tengo poco tiempo :D

Os robaré algo de código [wei5]

joanvr
14/11/2007, 02:27
Sí, estoy en ello, pero es que como dices da mazo pereza y tengo poco tiempo :D

Os robaré algo de código [wei5]

Puedes tomarlo todo, que tira perfecto, y luego me pones en agradecimientos xDDD :brindis:

Puck2099
14/11/2007, 14:43
Puedes tomarlo todo, que tira perfecto, y luego me pones en agradecimientos xDDD :brindis:

Ya, pero tendría que cambiar las llamadas al interfaz en mi código y ya está metido con mi interfaz en 3 programas (además que con C++ da errores raros tu código)... :p

Al final he incorporado partes de tu código al "mio" y ya está. En los créditos os pondré a todos de los que he tomado cachos para hacer la "amalgama" :D

joanvr
14/11/2007, 14:48
Ya, pero tendría que cambiar las llamadas al interfaz en mi código y ya está metido con mi interfaz en 3 programas (además que con C++ da errores raros tu código)... :p

Al final he incorporado partes de tu código al "mio" y ya está. En los créditos os pondré a todos de los que he tomado cachos para hacer la "amalgama" :D

que errores da en c++? Porque yo estoy usando casi ese mismo codigo (con algunas modificaciones) en el rhythm mayhem que esta en c++ y va bien :S

Puck2099
14/11/2007, 14:51
que errores da en c++? Porque yo estoy usando casi ese mismo codigo (con algunas modificaciones) en el rhythm mayhem que esta en c++ y va bien :S

Pues en el Exult me saltaban errores de referencias al OldIndex y OldTouchScreen que ya estaban referenciadas según el g++ en un string.h del directorio de la toolchain :confused:

Lógicamente eso era imposible y cambiándole el nombre a esas variables me daba los mismos errores con el nuevo nombre...

joanvr
14/11/2007, 15:13
Pues en el Exult me saltaban errores de referencias al OldIndex y OldTouchScreen que ya estaban referenciadas según el g++ en un string.h del directorio de la toolchain :confused:

Lógicamente eso era imposible y cambiándole el nombre a esas variables me daba los mismos errores con el nuevo nombre...

Pues q raro... misterios del compilador... xD

Theck
27/11/2007, 22:59
Wenas, he cogido el código del primer post del hilo y tengo un problema.

En la función abrirTactil de controles.c, concretamente en la línea "fd=open("/dev/touchscreen/wm97xx", O_RDONLY | O_NOCTTY);" me salta un error al compilar: "controles.c `O_NOCTTY' undeclared (first use this function)".

Lo lógico es pensar que no tengo en los directorios el directorio del include que contiene esta constante, así que he buscado y veo que es fcntl.h donde está definida y que esta está en un par de directorios del SDK oficial para windows.

La cosa es que aunque incluya directamente estos directorios sigue sin funcionar, me sigue dando este error.

¿Me falta alguna librería que no venía con el oficial?

Propeller
27/11/2007, 23:37
Wenas, he cogido el código del primer post del hilo y tengo un problema.

En la función abrirTactil de controles.c, concretamente en la línea "fd=open("/dev/touchscreen/wm97xx", O_RDONLY | O_NOCTTY);" me salta un error al compilar: "controles.c `O_NOCTTY' undeclared (first use this function)".

Lo lógico es pensar que no tengo en los directorios el directorio del include que contiene esta constante, así que he buscado y veo que es fcntl.h donde está definida y que esta está en un par de directorios del SDK oficial para windows.

La cosa es que aunque incluya directamente estos directorios sigue sin funcionar, me sigue dando este error.

¿Me falta alguna librería que no venía con el oficial?

Pega el Makefile, a ver qué falta.

Propeller

Theck
27/11/2007, 23:47
al final he quitado la constante que me hac&#237;a petar, la de O_NOCTTY y no peta, pero ahora me da otro error, me dice " [Linker error] undefined reference to `WinMain@16' " cosa que en el curro no me pasa :S

Os pongo aqu&#237; el makefile que crea el devc++:


# Project: fpst2x
# Makefile created by Dev-C++ 4.9.9.2

CPP = E:\programacion\GP2X\GP2XSDK\bin\g++.exe
CC = E:\programacion\GP2X\GP2XSDK\bin\gcc.exe
OBJ = gp2x/data.o gp2x/draw.o gp2x/extra.o gp2x/font.o gp2x/game.o gp2x/main.o gp2x/maps.o gp2x/model.o gp2x/sprites.o gp2x/yeti.o gp2x/controles.o
LINKOBJ = gp2x/data.o gp2x/draw.o gp2x/extra.o gp2x/font.o gp2x/game.o gp2x/main.o gp2x/maps.o gp2x/model.o gp2x/sprites.o gp2x/yeti.o gp2x/controles.o
LIBS = -L"E:/programacion/GP2X/GP2XSDK/lib" -L"E:/programacion/GP2X/GP2XSDK/Tools/lib" -lSDL
INCS = -I"E:/programacion/GP2X/GP2XSDK/include" -I"E:/programacion/GP2X/GP2XSDK/include/SDL" -I"E:/programacion/GP2X/GP2XSDK/include/GP2X" -I"E:/programacion/GP2X/GP2XSDK/Tools/include" -I"E:/programacion/GP2X/GP2XSDK/Tools/include/SDL"
CXXINCS = -I"E:/programacion/GP2X/GP2XSDK/include" -I"E:/programacion/GP2X/GP2XSDK/include/GP2X" -I"E:/programacion/GP2X/GP2XSDK/include/SDL" -I"E:/programacion/GP2X/GP2XSDK/include/c++"
BIN = fpst2x.gpe
CXXFLAGS = $(CXXINCS) -DGP2X
CFLAGS = $(INCS) -D_REENTRANT -DGP2X
RM = rm -f
MKDIR = cygwin-mkdir -p

.PHONY: all all-before all-after clean clean-custom

all: all-before fpst2x.gpe all-after

all-before:
$(MKDIR) gp2x


clean: clean-custom
${RM} $(OBJ) $(BIN)

$(BIN): $(OBJ)
$(CPP) $(LINKOBJ) -o $@ $(LIBS)

gp2x/data.o: data.c
$(CPP) -c data.c -o gp2x/data.o $(CXXFLAGS)

gp2x/draw.o: draw.c
$(CPP) -c draw.c -o gp2x/draw.o $(CXXFLAGS)

gp2x/extra.o: extra.c
$(CPP) -c extra.c -o gp2x/extra.o $(CXXFLAGS)

gp2x/font.o: font.c
$(CPP) -c font.c -o gp2x/font.o $(CXXFLAGS)

gp2x/game.o: game.c
$(CPP) -c game.c -o gp2x/game.o $(CXXFLAGS)

gp2x/main.o: main.c
$(CPP) -c main.c -o gp2x/main.o $(CXXFLAGS)

gp2x/maps.o: maps.c
$(CPP) -c maps.c -o gp2x/maps.o $(CXXFLAGS)

gp2x/model.o: model.c
$(CPP) -c model.c -o gp2x/model.o $(CXXFLAGS)

gp2x/sprites.o: sprites.c
$(CPP) -c sprites.c -o gp2x/sprites.o $(CXXFLAGS)

gp2x/yeti.o: yeti.c
$(CPP) -c yeti.c -o gp2x/yeti.o $(CXXFLAGS)

gp2x/controles.o: controles.c
$(CPP) -c controles.c -o gp2x/controles.o $(CXXFLAGS)




EDIT: Por cierto, hay l&#237;neas de c&#243;digo con comentarios para la posteridad:

eventoTactil eT; // tel&#233;fono, mi casa, etc.

joanvr
28/11/2007, 00:34
Te recomiendo usar la última versión de codigo subida (en el último post) que tiene mejoras sustanciales como para tenerse en cuenta.

Theck
28/11/2007, 12:58
Me da el mismo error que le daba a Puck, me dice " multiple definition of `OldIndex' " y " multiple definition of `OldTouchScreen' " :S

< - >
Vale, ya est&#225;, al cambiar el nombre me ha compilado todo bien, al contrario que a puck no me he dado problemas con eso.

Eso si, me he cargado la carpeta onde crea los .o y toda la pesca para obligarle a volver a crearlo todo, a ver si era por eso que no te dejaba Puck.


Un par de chorradas m&#225;s y os ense&#241;o que chorrada he hecho :D

joanvr
28/11/2007, 16:42
Un par de chorradas más y os enseño que chorrada he hecho :D

Impaciente estoy por ver cualquier chorrada táctil :)

BuD
28/11/2007, 22:40
Impaciente estoy por ver cualquier chorrada táctil :)
Yeti3D manejado por tactil.

Theck
29/11/2007, 11:31
Nada, esto vuelve a fallar, os pego el resultado de la compilaci&#243;n a ver si sab&#233;is porque me pasa lo mismo que a puck y si hay alguna soluci&#243;n:

Compilador: gp2x
Building Makefile: "D:\programacion\gp\yeti3d\Source\Makefile.gp2x"
Ejecutando make clean
rm -f gp2x/data.o gp2x/draw.o gp2x/extra.o gp2x/font.o gp2x/game.o gp2x/main.o gp2x/maps.o gp2x/model.o gp2x/sprites.o gp2x/yeti.o gp2x/touchscreen.o fpst2x.gpe

cygwin-mkdir -p gp2x

g++.exe -c data.c -o gp2x/data.o -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/backward" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6" -I"D:/programacion/gp/GP2XSDK/include/SDL_plusplus" -I"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/include" -I"D:/programacion/gp/GP2XSDK/Tools/include" -I"D:/programacion/gp/GP2XSDK/Tools/include/SDL" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/arm-gp2x-linux" -DGP2X -fexpensive-optimizations -O3

g++.exe -c draw.c -o gp2x/draw.o -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/backward" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6" -I"D:/programacion/gp/GP2XSDK/include/SDL_plusplus" -I"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/include" -I"D:/programacion/gp/GP2XSDK/Tools/include" -I"D:/programacion/gp/GP2XSDK/Tools/include/SDL" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/arm-gp2x-linux" -DGP2X -fexpensive-optimizations -O3

g++.exe -c extra.c -o gp2x/extra.o -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/backward" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6" -I"D:/programacion/gp/GP2XSDK/include/SDL_plusplus" -I"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/include" -I"D:/programacion/gp/GP2XSDK/Tools/include" -I"D:/programacion/gp/GP2XSDK/Tools/include/SDL" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/arm-gp2x-linux" -DGP2X -fexpensive-optimizations -O3

g++.exe -c font.c -o gp2x/font.o -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/backward" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6" -I"D:/programacion/gp/GP2XSDK/include/SDL_plusplus" -I"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/include" -I"D:/programacion/gp/GP2XSDK/Tools/include" -I"D:/programacion/gp/GP2XSDK/Tools/include/SDL" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/arm-gp2x-linux" -DGP2X -fexpensive-optimizations -O3

g++.exe -c game.c -o gp2x/game.o -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/backward" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6" -I"D:/programacion/gp/GP2XSDK/include/SDL_plusplus" -I"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/include" -I"D:/programacion/gp/GP2XSDK/Tools/include" -I"D:/programacion/gp/GP2XSDK/Tools/include/SDL" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/arm-gp2x-linux" -DGP2X -fexpensive-optimizations -O3

g++.exe -c main.c -o gp2x/main.o -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/backward" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6" -I"D:/programacion/gp/GP2XSDK/include/SDL_plusplus" -I"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/include" -I"D:/programacion/gp/GP2XSDK/Tools/include" -I"D:/programacion/gp/GP2XSDK/Tools/include/SDL" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/arm-gp2x-linux" -DGP2X -fexpensive-optimizations -O3

g++.exe -c maps.c -o gp2x/maps.o -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/backward" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6" -I"D:/programacion/gp/GP2XSDK/include/SDL_plusplus" -I"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/include" -I"D:/programacion/gp/GP2XSDK/Tools/include" -I"D:/programacion/gp/GP2XSDK/Tools/include/SDL" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/arm-gp2x-linux" -DGP2X -fexpensive-optimizations -O3

g++.exe -c model.c -o gp2x/model.o -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/backward" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6" -I"D:/programacion/gp/GP2XSDK/include/SDL_plusplus" -I"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/include" -I"D:/programacion/gp/GP2XSDK/Tools/include" -I"D:/programacion/gp/GP2XSDK/Tools/include/SDL" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/arm-gp2x-linux" -DGP2X -fexpensive-optimizations -O3

g++.exe -c sprites.c -o gp2x/sprites.o -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/backward" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6" -I"D:/programacion/gp/GP2XSDK/include/SDL_plusplus" -I"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/include" -I"D:/programacion/gp/GP2XSDK/Tools/include" -I"D:/programacion/gp/GP2XSDK/Tools/include/SDL" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/arm-gp2x-linux" -DGP2X -fexpensive-optimizations -O3

g++.exe -c yeti.c -o gp2x/yeti.o -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/backward" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6" -I"D:/programacion/gp/GP2XSDK/include/SDL_plusplus" -I"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/include" -I"D:/programacion/gp/GP2XSDK/Tools/include" -I"D:/programacion/gp/GP2XSDK/Tools/include/SDL" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/arm-gp2x-linux" -DGP2X -fexpensive-optimizations -O3

g++.exe -c touchscreen.c -o gp2x/touchscreen.o -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/backward" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6" -I"D:/programacion/gp/GP2XSDK/include/SDL_plusplus" -I"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/include" -I"D:/programacion/gp/GP2XSDK/Tools/include" -I"D:/programacion/gp/GP2XSDK/Tools/include/SDL" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/arm-gp2x-linux" -DGP2X -fexpensive-optimizations -O3

g++.exe gp2x/data.o gp2x/draw.o gp2x/extra.o gp2x/font.o gp2x/game.o gp2x/main.o gp2x/maps.o gp2x/model.o gp2x/sprites.o gp2x/yeti.o gp2x/touchscreen.o -o fpst2x.gpe -L"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/lib" -lSDL

gp2x/touchscreen.o:(.bss+0xc): multiple definition of `t_OldIndex'
gp2x/main.o:(.bss+0x89848): first defined here
gp2x/touchscreen.o:(.bss+0x10): multiple definition of `t_OldTouchScreen'
gp2x/main.o:(.bss+0x8984c): first defined here
collect2: ld returned 1 exit status
make.exe: *** [fpst2x.gpe] Error 1

Ejecuci&#243;n Terminada


< - >
Por lo que he ido leyendo por el intenn&#233; puede ser que haya alg&#250;n include c&#237;clico, yo no se encontrarlo, joanvc o puck, sab&#233;is si hay alguno que pueda ser el culpable?

BuD
29/11/2007, 20:37
Nada, esto vuelve a fallar, os pego el resultado de la compilación a ver si sabéis porque me pasa lo mismo que a puck y si hay alguna solución:

Compilador: gp2x
Building Makefile: "D:\programacion\gp\yeti3d\Source\Makefile.gp2x"
Ejecutando make clean
rm -f gp2x/data.o gp2x/draw.o gp2x/extra.o gp2x/font.o gp2x/game.o gp2x/main.o gp2x/maps.o gp2x/model.o gp2x/sprites.o gp2x/yeti.o gp2x/touchscreen.o fpst2x.gpe

cygwin-mkdir -p gp2x

g++.exe -c data.c -o gp2x/data.o -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/backward" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6" -I"D:/programacion/gp/GP2XSDK/include/SDL_plusplus" -I"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/include" -I"D:/programacion/gp/GP2XSDK/Tools/include" -I"D:/programacion/gp/GP2XSDK/Tools/include/SDL" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/arm-gp2x-linux" -DGP2X -fexpensive-optimizations -O3

g++.exe -c draw.c -o gp2x/draw.o -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/backward" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6" -I"D:/programacion/gp/GP2XSDK/include/SDL_plusplus" -I"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/include" -I"D:/programacion/gp/GP2XSDK/Tools/include" -I"D:/programacion/gp/GP2XSDK/Tools/include/SDL" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/arm-gp2x-linux" -DGP2X -fexpensive-optimizations -O3

g++.exe -c extra.c -o gp2x/extra.o -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/backward" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6" -I"D:/programacion/gp/GP2XSDK/include/SDL_plusplus" -I"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/include" -I"D:/programacion/gp/GP2XSDK/Tools/include" -I"D:/programacion/gp/GP2XSDK/Tools/include/SDL" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/arm-gp2x-linux" -DGP2X -fexpensive-optimizations -O3

g++.exe -c font.c -o gp2x/font.o -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/backward" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6" -I"D:/programacion/gp/GP2XSDK/include/SDL_plusplus" -I"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/include" -I"D:/programacion/gp/GP2XSDK/Tools/include" -I"D:/programacion/gp/GP2XSDK/Tools/include/SDL" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/arm-gp2x-linux" -DGP2X -fexpensive-optimizations -O3

g++.exe -c game.c -o gp2x/game.o -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/backward" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6" -I"D:/programacion/gp/GP2XSDK/include/SDL_plusplus" -I"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/include" -I"D:/programacion/gp/GP2XSDK/Tools/include" -I"D:/programacion/gp/GP2XSDK/Tools/include/SDL" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/arm-gp2x-linux" -DGP2X -fexpensive-optimizations -O3

g++.exe -c main.c -o gp2x/main.o -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/backward" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6" -I"D:/programacion/gp/GP2XSDK/include/SDL_plusplus" -I"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/include" -I"D:/programacion/gp/GP2XSDK/Tools/include" -I"D:/programacion/gp/GP2XSDK/Tools/include/SDL" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/arm-gp2x-linux" -DGP2X -fexpensive-optimizations -O3

g++.exe -c maps.c -o gp2x/maps.o -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/backward" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6" -I"D:/programacion/gp/GP2XSDK/include/SDL_plusplus" -I"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/include" -I"D:/programacion/gp/GP2XSDK/Tools/include" -I"D:/programacion/gp/GP2XSDK/Tools/include/SDL" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/arm-gp2x-linux" -DGP2X -fexpensive-optimizations -O3

g++.exe -c model.c -o gp2x/model.o -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/backward" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6" -I"D:/programacion/gp/GP2XSDK/include/SDL_plusplus" -I"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/include" -I"D:/programacion/gp/GP2XSDK/Tools/include" -I"D:/programacion/gp/GP2XSDK/Tools/include/SDL" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/arm-gp2x-linux" -DGP2X -fexpensive-optimizations -O3

g++.exe -c sprites.c -o gp2x/sprites.o -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/backward" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6" -I"D:/programacion/gp/GP2XSDK/include/SDL_plusplus" -I"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/include" -I"D:/programacion/gp/GP2XSDK/Tools/include" -I"D:/programacion/gp/GP2XSDK/Tools/include/SDL" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/arm-gp2x-linux" -DGP2X -fexpensive-optimizations -O3

g++.exe -c yeti.c -o gp2x/yeti.o -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/backward" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6" -I"D:/programacion/gp/GP2XSDK/include/SDL_plusplus" -I"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/include" -I"D:/programacion/gp/GP2XSDK/Tools/include" -I"D:/programacion/gp/GP2XSDK/Tools/include/SDL" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/arm-gp2x-linux" -DGP2X -fexpensive-optimizations -O3

g++.exe -c touchscreen.c -o gp2x/touchscreen.o -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/backward" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6" -I"D:/programacion/gp/GP2XSDK/include/SDL_plusplus" -I"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/include" -I"D:/programacion/gp/GP2XSDK/Tools/include" -I"D:/programacion/gp/GP2XSDK/Tools/include/SDL" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++" -I"D:/programacion/gp/GP2XSDK/Tools/include/c++/3.4.6/arm-gp2x-linux" -DGP2X -fexpensive-optimizations -O3

g++.exe gp2x/data.o gp2x/draw.o gp2x/extra.o gp2x/font.o gp2x/game.o gp2x/main.o gp2x/maps.o gp2x/model.o gp2x/sprites.o gp2x/yeti.o gp2x/touchscreen.o -o fpst2x.gpe -L"D:/programacion/gp/GP2XSDK/Tools/arm-gp2x-linux/lib" -lSDL

gp2x/touchscreen.o:(.bss+0xc): multiple definition of `t_OldIndex'
gp2x/main.o:(.bss+0x89848): first defined here
gp2x/touchscreen.o:(.bss+0x10): multiple definition of `t_OldTouchScreen'
gp2x/main.o:(.bss+0x8984c): first defined here
collect2: ld returned 1 exit status
make.exe: *** [fpst2x.gpe] Error 1

Ejecución Terminada


< - >
Por lo que he ido leyendo por el intenné puede ser que haya algún include cíclico, yo no se encontrarlo, joanvc o puck, sabéis si hay alguno que pueda ser el culpable?

joanvc? xD

No has visto el fallo? Es facil de ver :rolleyes: ... Toma una nueva revisión.

BuD
29/11/2007, 20:42
revs. 1

Theck
29/11/2007, 21:20
Bueno, ahora no peta por ah&#237;, pero volvemos al famoso problema con vista de el [Linker error] undefined reference to `WinMain@16'

Aprovecho porque hay otros 2 puntos que me fallan pero que hab&#237;a comentado para poder ir tirando:

struct timeval stamp; <-- si dejo esta declaraci&#243;n, peta con "field `stamp' has incomplete type "

Si en "devTouchScreen = open("/dev/touchscreen/wm97xx", O_RDONLY | O_NOCTTY);" dejo el O_NOCTTY peta porque esa constante no est&#225; definida en mis archivos de inclusi&#243;n fcntl.h. &#191;eso es normal?

BuD
29/11/2007, 21:31
Bueno, ahora no peta por ahí, pero volvemos al famoso problema con vista de el [Linker error] undefined reference to `WinMain@16'

Aprovecho porque hay otros 2 puntos que me fallan pero que había comentado para poder ir tirando:

struct timeval stamp; <-- si dejo esta declaración, peta con "field `stamp' has incomplete type "

Si en "devTouchScreen = open("/dev/touchscreen/wm97xx", O_RDONLY | O_NOCTTY);" dejo el O_NOCTTY peta porque esa constante no está definida en mis archivos de inclusión fcntl.h. ¿eso es normal?

WinMain??? Estas compilando para windows??? :loco:
Si no compilas para GP2X eso no te funcionara ni de broma.

Theck
29/11/2007, 21:34
No, si ah&#237; est&#225; la co&#241;a, solo me sale eso cuando compilo para GP2X, para windows me compila perfectamente xDDD

EDIT:
Es m&#225;s, tengo el mismo devc++ aqu&#237; que en el curro (copy paste literal) y all&#237; compila. La &#250;nica diferencia es que all&#237; es XP y aqu&#237; vista.

Voy a hacer una prueba, voy a encender el XP y compilar&#233; all&#237; xD

Propeller
29/11/2007, 21:55
A mi me mosquea mucho el g++.exe ese que tienes puesto para compilar. &#191;C&#243;mo sabes que es el compilador cruzado y no el de Windows? No se c&#243;mo ser&#225; en Windows, pero en sistemas Unix normalmente los compiladores para gp2x los solemos llamar arm-linux-loquesea.

Por favor, controla que ese compilador realmente sea el que quieres usar.

Propeller

BuD
29/11/2007, 22:14
A mi me mosquea mucho el g++.exe ese que tienes puesto para compilar. &#191;C&#243;mo sabes que es el compilador cruzado y no el de Windows? No se c&#243;mo ser&#225; en Windows, pero en sistemas Unix normalmente los compiladores para gp2x los solemos llamar arm-linux-loquesea.

Por favor, controla que ese compilador realmente sea el que quieres usar.

Propeller

&#191;Como lo sabe?
Si esta claro, es el compilador para windows. Porque si no le pide una referencia a WinMain?

Propeller
29/11/2007, 22:46
¿Como lo sabe?

Con un "gcc --version", si hay suerte.



Si esta claro, es el compilador para windows. Porque si no le pide una referencia a WinMain?

No jodas ;)

Propeller

BuD
29/11/2007, 22:55
Con un "gcc --version", si hay suerte.




No jodas ;)

Propeller

Curiosamente era una pregunta que la respondia yo mismo. Me parece mas logica mi respuesta que no porque "los compiladores para gp2x los solemos llamar arm-linux-loquesea".

Theck
29/11/2007, 23:01
Esto es lo que me sale:

gcc (GCC) 3.4.2 (mingw-special)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Es lo que debe?

efegea
29/11/2007, 23:06
No, eso es para compilar para windows (mingw)

BuD
29/11/2007, 23:09
Esto es lo que me sale:

gcc (GCC) 3.4.2 (mingw-special)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Es lo que debe?

Esta claro que es para windows, por algo es mingw. Si quieres acabar de comprobarlo te recomiendo que hagas un "gcc --version -v".

El compilador gcc correcto para GP2X deberia salgo tal que:


...
Target: gp2x
Configured with: ../configure --prefix=/usr/local/gp2xdev --target=gp2x
--disable-libmudflap --disable-libssp --disable-libstdcxx-pch --disable-multilib
--disable-nls --disable-shared --enable-c99 --enable-__cxa_atexit
--enable-cxx-flags=-marm -march=armv4t -mtune=arm920t -mno-thumb-interwork
-msoft-float -mlittle-endian --enable-languages=c,c++ --enable-long-long
--enable-symvers=gnu --enable-threads=posix --with-cpu=arm920t --with-float=soft

Propeller
29/11/2007, 23:10
Curiosamente era una pregunta que la respondia yo mismo. Me parece mas logica mi respuesta que no porque "los compiladores para gp2x los solemos llamar arm-linux-loquesea".

Salida de "gcc --version" de mi toolchain:

arm-linux-gcc (GCC) 4.0.2

Quería decir que aunque el comando se llame g++.exe, siempre lo puedes ejecutar con el parámetro --version, y generalmente te suele responder algo del estilo de lo que he puesto ahí.

Propeller

Theck
29/11/2007, 23:15
Respuesta:
D:\programacion\GP2X\GP2XSDK\bin>gcc --version -v
gcc (GCC) 3.4.2 (mingw-special)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

D:\programacion\GP2X\GP2XSDK\bin>g++ --version -v
g++ (GCC) 3.4.2 (mingw-special)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

no ser&#225; que se llama mingw porque es para windows en el sentido de que se ejecuta en windows y no de que compila para windows?

Voy a mirar los otros ejecutables que hay por ah&#237;.

BuD
29/11/2007, 23:17
D:\programacion\GP2X\GP2XSDK\bin>g++ --version -v
g++ (GCC) 3.4.2 (mingw-special)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Error mio, el comando era g++ -v



no ser&#225; que se llama mingw porque es para windows en el sentido de que se ejecuta en windows y no de que compila para windows?
S&#237;, s&#237;. Podria ser. Con el comando que te he puesto antes saldremos de dudas.

Theck
29/11/2007, 23:29
D:\programacion\GP2X\GP2XSDK\bin>g++ -v
Reading specs from ../lib/gcc/mingw32/3.4.2/specs
Configured with: ../gcc/configure --with-gcc --with-gnu-ld --with-gnu-as --host=
mingw32 --target=mingw32 --prefix=/mingw --enable-threads --disable-nls --enable
-languages=c,c++,f77,ada,objc,java --disable-win32-registry --disable-shared --e
nable-sjlj-exceptions --enable-libgcj --disable-java-awt --without-x --enable-ja
va-gc=boehm --disable-libgcj-debug --enable-interpreter --enable-hash-synchroniz
ation --enable-libstdcxx-debug
Thread model: win32
gcc version 3.4.2 (mingw-special)

D:\programacion\GP2X\GP2XSDK\bin>gcc -v
Reading specs from ../lib/gcc/mingw32/3.4.2/specs
Configured with: ../gcc/configure --with-gcc --with-gnu-ld --with-gnu-as --host=
mingw32 --target=mingw32 --prefix=/mingw --enable-threads --disable-nls --enable
-languages=c,c++,f77,ada,objc,java --disable-win32-registry --disable-shared --e
nable-sjlj-exceptions --enable-libgcj --disable-java-awt --without-x --enable-ja
va-gc=boehm --disable-libgcj-debug --enable-interpreter --enable-hash-synchroniz
ation --enable-libstdcxx-debug
Thread model: win32
gcc version 3.4.2 (mingw-special)

efegea
29/11/2007, 23:31
no será que se llama mingw porque es para windows en el sentido de que se ejecuta en windows y no de que compila para windows?

Puede ser que lleves razón, porque a mí me sale:


frajan@melee ~ $ gcc --version
gcc (GCC) 4.1.2 (Gentoo 4.1.2)
Copyright (C) 2006 Free Software Foundation, Inc.
Esto es software libre; vea el código para las condiciones de copia. NO hay
garantía; ni siquiera para MERCANTIBILIDAD o IDONEIDAD PARA UN PROPÓSITO EN
PARTICULAR

BuD
29/11/2007, 23:36
D:\programacion\GP2X\GP2XSDK\bin>gcc -v
Reading specs from ../lib/gcc/mingw32/3.4.2/specs
Configured with: ../gcc/configure --with-gcc --with-gnu-ld --with-gnu-as --host=
mingw32 --target=mingw32 --prefix=/mingw --enable-threads --disable-nls --enable
-languages=c,c++,f77,ada,objc,java --disable-win32-registry --disable-shared --e
nable-sjlj-exceptions --enable-libgcj --disable-java-awt --without-x --enable-ja
va-gc=boehm --disable-libgcj-debug --enable-interpreter --enable-hash-synchroniz
ation --enable-libstdcxx-debug
Thread model: win32
gcc version 3.4.2 (mingw-special)

Bueno eso ya da una idea más clara. Ni un --march=****, y ademas, ¿¿"Thread model: win32"?? Quizas reinstalandote el SDK...

Theck
30/11/2007, 11:18
Bueno, lo redescargu&#233; y si, era cosa de los ejecutables que eran los de otra carpeta.

De todas formas en vista no compila, pero ahora toy en el curro, si eso esta noche ya pegar&#233; el error que da que es otro nuevo.


Por otro lado, BuD, porque en las l&#237;neas que te puse me peta? Las pongo de nuevo para que sea m&#225;s f&#225;cil:

struct timeval stamp; <-- si dejo esta declaraci&#243;n, peta con "field `stamp' has incomplete type "

Si en "devTouchScreen = open("/dev/touchscreen/wm97xx", O_RDONLY | O_NOCTTY);" dejo el O_NOCTTY peta porque esa constante no est&#225; definida en mis archivos de inclusi&#243;n fcntl.h. &#191;eso es normal?

azrael
06/12/2007, 18:54
Volviendo a un tema anterior.
Puede que lo de hacer la media de las 5 &#250;ltimas medidas ya lo hayais solucionado, pero sino aqu&#237; va mi propuesta.
Puede que no sea practica por usar demasiados recursos, pero... que os parece si cog&#233;is X posiciones (las que os apetezcan), calcul&#225;is media y desviaci&#243;n t&#237;pica, desech&#225;is las medidas que se salgan de la desviaci&#243;n t&#237;pica y volv&#233;is a calcular la media.
De esta forma os evitar&#237;ais los errores aleatorios, ya que por lo visto lo que falla es que la t&#225;ctil, de vez en cuando da alguna medida sin sentido.
Otra posibilidad m&#225;s directa es coger la mediana (el valor m&#225;s "centrado" de los que devuelve la t&#225;ctil), pero creo que la precisi&#243;n ser&#237;a mucho peor.

joanvr
06/12/2007, 20:45
Volviendo a un tema anterior.
Puede que lo de hacer la media de las 5 últimas medidas ya lo hayais solucionado, pero sino aquí va mi propuesta.
Puede que no sea practica por usar demasiados recursos, pero... que os parece si cogéis X posiciones (las que os apetezcan), calculáis media y desviación típica, desecháis las medidas que se salgan de la desviación típica y volvéis a calcular la media.
De esta forma os evitaríais los errores aleatorios, ya que por lo visto lo que falla es que la táctil, de vez en cuando da alguna medida sin sentido.
Otra posibilidad más directa es coger la mediana (el valor más "centrado" de los que devuelve la táctil), pero creo que la precisión sería mucho peor.

Hacer la media de 4 u 8 valores es un shift, que es una sola operación muy rápida, una desviación típica no se en como de optimizado se puede hacer, pero es seguro que mucho más costoso, y además ya da una muy buena precisión con la media de los valores.

kounch
19/12/2007, 14:36
Hola
estoy intentando integrar este c&#243;digo que hab&#233;is puesto en el selector (http://gp2x-selector.sourceforge.net/es/index.html), y tengo una duda filos&#243;fica &#191;c&#243;mo deber&#237;a poner en los cr&#233;ditos (y en el c&#243;digo) las atribuciones a los creadores? &#191;Bastar&#237;a con una lista de todos los que hab&#233;is estado aportando mejoras y cambios en este hilo, o ser&#237;a mejor dejarlo de forma m&#225;s gen&#233;rica?

&#191;Habr&#237;a alg&#250;n problema en usarlo porque mi programa se distribuya bajo licencia GPL?

Gracias y un saludo
kounch

Propeller
19/12/2007, 21:16
Hola,

lo que puse yo es GPL, y lo que extendi&#243; Puck2099 tambi&#233;n. Si has pillado el c&#243;digo de joanvr, tendr&#225;s que ponerle a &#233;l en los cr&#233;ditos (est&#225; rescrito todo). Lo que no recuerdo es qu&#233; licencia lleva ese c&#243;digo.

Propeller