Errores Mnemonic

Started by laghengar, June 05, 2013, 01:04:24 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

laghengar

Holas, me podríais contar, aunque sea un poquillo, de que va el :

ERROR: Runtime error in PROC_RUEDA(65539) - Mnemonic 0xAD0 not implemented

Me salta en el códico cuando uso cos() o sin(), he hecho varias pruebas hasta dar con que el código sólo corre cuando elimino estás funciones.

Las uso así, no le veo a la línea nada de raro, así que no se que pasa.                 x=coche4ruedas[n_coche]._id.x+(cos(angulocoche)*x0);

Con la línea así no hay problema.                                                                            x=coche4ruedas[n_coche]._id.x+x0;

En un principio pense que pisaba algo de memoria, pero para nada me lo parece, la x es la variable local del proceso.
Luego que tal vez alguna incompatibilidad entre operaciones float y byte (byte x0), pero al cambiarlo y poniendo int x0 me ocurre lo mismo.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

SplinterGU

ya me fijo que puede ser... gracias!
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

podes poner todos los tipos de cada variable?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Erkosone

Curioso bug si.. haber si se descubre la causa, sin y cos con de las imprescindibles.

laghengar

Quote from: SplinterGU on June 05, 2013, 01:56:37 AM
podes poner todos los tipos de cada variable?

Te comento ahora sin problema :)

global
struct coche4ruedas[0]

    struct rueda[3]
        byte x0,y0;     //centro de gravedad de la rueda
        int _id;            //identificador de la rueda
    end

    byte x0,y0;         //centro de gravedad del coche
    int _id;                //identificador del coche
end

process proc_rueda(byte n_coche,byte x0,byte y0)
private

int angulocoche;

begin
    angulocoche=coche4ruedas[n_coche]._id.angle;
    x=coche4ruedas[n_coche]._id.x+(cos(angulocoche)*x0);
    y=coche4ruedas[n_coche]._id.y+(sin(angulocoche)*y0);
....
end
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

SplinterGU

lo revisare, se que significa el opcode, pero me extraña que se genere eso.

supongo que estas con la ultima version, cierto?

gracias.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

laghengar

#6
Versión 21 de Noviembre de 2012, supongo que es la última. Por cierto, estoy usando la IDE de bennupack que viene el notepad++ adaptado, no se si tendrá algo que ver, aunque creo que no.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

laghengar

#7
Soy el único que tiene este problema :( ?

He estado haciendo diferentes pruebas y he visto que solo falla cuando haces una operación con arrays. Curiosamente con una variable, que pertenece a un proceso, no falla.
UHHHHHHHHHHHHHHHLALAAAAAAAAAA. Tenía el array como un conjunto de bytes, al cambiarlo a integer ya no me salta el error ¿?
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

Drumpi

Por curiosidad ¿qué módulo matemático estás usando? ¿mod_math o mod_mathi?
Es posible que tengas problemas por usar mod_math, cuyas funciones trigonométricas usan floats. Mod_mathi funciona como se hacía antes, con enteros. A ver si es un bug de conversión de datos.
Sólo por probar.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

laghengar

Si, uso el mod_math, no conozco el mathi XD. Pues tiene toda la pinta, desde que me di cuenta de que cambiando los datos por los que opera por integer, ya no salta ese error.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

SplinterGU

me podes mandar el programita por mail, asi lo reviso en algun momento? me olvide completamente de esto... disculpas.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

laghengar

No tengo tu correo Splinter  :-[ . Dejo el código aquí, ok?


import "mod_grproc"
import "mod_key"
import "mod_map"
import "mod_math"
import "mod_proc"
import "mod_say"
import "mod_video"

GLOBAL
int       fpg_sprites;
struct  coche4ruedas[0]
    struct   rueda[3]
        byte x0,y0;
        int    _id;
    end
    byte x0,y0; //centro de gravedad
    int _id;
end

BEGIN
set_mode(640,480,32,MODE_FULLSCREEN);
set_fps(60,0);

fpg_sprites=load_fpg("FPG\sprites.fpg");
coche4ruedas[0]._id=proc_coche(0,320,240);

repeat
    frame;

until(key(_esc))
let_me_alone();
exit("",0);
END

/////////////////////
PROCESS proc_coche(byte n,x,y);

BEGIN
file=fpg_sprites;
graph=1;

coche4ruedas[0].rueda[0].x0=12;
coche4ruedas[0].rueda[0].y0=0;
coche4ruedas[0].rueda[1].x0=12;
coche4ruedas[0].rueda[1].y0=30;
coche4ruedas[0].rueda[2].x0=37;
coche4ruedas[0].rueda[2].y0=0;
coche4ruedas[0].rueda[3].x0=37;
coche4ruedas[0].rueda[3].y0=30;
coche4ruedas[0].x0=25;
coche4ruedas[0].y0=15;
angle=45000;
say("Se ha rellenado la estructura del primer coche");

frame;
crearuedas(4,0);//numero de ruedas a crear, numero del coche al que crear las ruedas

loop
    frame;
end
END
////////////////////////
FUNCTION crearuedas(byte numruedasacrear,byte numcocheaponerruedas)

PRIVATE
byte turno;
begin

for(turno=0;turno<numruedasacrear;turno++)
    coche4ruedas[numcocheaponerruedas].rueda[turno]._id=proc_rueda(numcocheaponerruedas,coche4ruedas[numcocheaponerruedas].rueda[turno].x0,coche4ruedas[numcocheaponerruedas].rueda[turno].y0);
end
END

////////////////////////////////
PROCESS proc_rueda(byte n_coche,byte x0,byte y0)
PRIVATE
angulocoche;
begin
file=fpg_sprites;
graph=2;
say("Se crea el proceso de la rueda");

loop
    angulocoche=coche4ruedas[n_coche]._id.angle;
    say(angulocoche);
    say("Ángulo del coche tomado");
    x=coche4ruedas[n_coche]._id.x+(cos(angulocoche)*x0);
    say("x calculada");
    y=coche4ruedas[n_coche]._id.y+(sin(angulocoche)*y0);
    say("se calculan las coordenadas de la rueda");
    frame;
end
END
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

SplinterGU

el problema no esta en la estructura, sino en los parametros de la funcion... no estaba soportado pasar de byte a float (necesario para la multiplicacion con COS y SIN).

este codigo tambien falla


import "mod_math";
import "mod_say";

local
float x, y;
byte z;

BEGIN
    z = 255;
    x = 10.0 * z;
    say(x);
END


ya lo solucione, ahora lo commiteo, pero no puedo generar binarios, tengo roto el entorno por culpa de la libpng, hasta no solucionar (genericamente) el tema de la deteccion no puedo generar binarios, si quieres generarlos tu, adelante.

sino, reemplaza los bytes por int en los parametros de la funcion y ahi funcionara.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

laghengar

Perfecto, así haré. De lo demás no se de qué me hablas :(, me centraré en utilizar int y listo.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O