[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