[Jde-dev] uso de arrays en interfaces ICE

Javier Vazquez javiervazper en yahoo.es
Dom Mayo 2 10:16:30 CEST 2010


Hola de nuevo.

Pues justo ahora lo saco. Dejando el atributuencia de enteros, faltaba llamar al m�todo "resize", antes de empezar a asignar valores:

       laserData->distanceData.resize(sizeof(int)*NUM_LASER);

      laserData->distanceData[0]=0;
....

As� ya funciona!!

Un saludo,
Javier.






________________________________
De: Javier Vazquez <javiervazper en yahoo.es>
Para: jde-developers <Jde-developers en gsyc.es>
Enviado: dom,2 mayo, 2010 00:50
Asunto: uso de arrays en interfaces ICE


Hola,

tengo una duda con la que me he atascado desde hace varios d�as y no se c�mo continuar. Necesito definir una interfaz con una operaci�n de devuelva un array de un n�mero de posiciones constantes.

Inicialmente pens� en declarar una clase, con un atributo aaray para que la operaci�n devuelva dicho objeto. La declaraci�n siguiente, parece no estar soportada por el traductor de ICE:


module jderobot{  

    /* laser information */
  class LaserData
  {
    int distanceData[10];
  };


  /** 
   * Interface to the Gazebo laser sensor.
   */
  interface Laser
  {
     idempotent     LaserData getLaserData();
  };

}; //module

A continuaci�n, fij�ndome en c�digo hecho de JDE5.0, he visto que se utiliza " sequence<int> IntSeq;" para el tipo del atributo que devuelve un array (por ejemplo, la imagen. Redefin� mi atributo distanceData de esta forma, esto es: " IntSeq distanceData;" y obtengo el c�digo cpp.

Sin embargo, ahora no soy capaz de usarlo. He probado a asignar valores de varias formas pero siempre me da un "Segmentation Fault" en tiempo de ejecuci�n (por que compilar, compila bien). Este es uno de los muchas pruebas b�sicas que he realizado pero nada:

....
               int a[2];
                a[0]=0;
                a[1]=1;

                memcpy(&(laserData->distanceData),a,sizeof(a));
                printf("data 0: %d\ndata 1: %d\n%d\n%d\n",laserData->distanceData[0],a[1],sizeof(a),sizeof(&(laserData->distanceData))); 
...

�Alguien tiene alguna idea? 

Veo que David usa una clase "pipeline" para instanciar un buffer y luego lo copia con memcpy. No obstante, yo siempre quiero trabajar con un array de 180 posiciones.

Gracias de antemano,
Javier.


      
------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://gsyc.escet.urjc.es/pipermail/jde-developers/attachments/20100502/6bcfd84d/attachment.htm 


More information about the Jde-developers mailing list