TODOPIC

Lenguajes de programación para PC => Visual Basic => Mensaje iniciado por: gera en 12 de Octubre de 2014, 10:52:19

Título: Pasar estructura por puerto serie en VB2010
Publicado por: gera en 12 de Octubre de 2014, 10:52:19
Hola amigos!! Cómo están?
Estoy necesitando pasar un conjunto de variables desde la PC a un PIC por puerto serial. Usualmente hago esto en C y es muy fácil:
Defino dos estructuras iguales, una en el PIC y otra en la PC:

Código: C
  1. typedef struct {
  2.    int16 calibration_max[8];
  3.    int16 calibration_min[8];
  4.    int16 kp,ki,kd, setpoint;
  5.    int16 track[MAX_SEGMENTS];
  6. } config_t;

Luego, recorro la estructura byte por byte con un puntero char*, y voy enviando esos bytes por el puerto serie. En el PIC, recibo esos bytes y reconstruyo la estructura.

Esta vez opté por programar en Visual Basic porque es más sencillo hacer una GUI. Pero no tengo idea cómo están organizadas las estructuras en la memoria, o cómo recorrerlas con un puntero.

Alguien me puede orientar un poco?
Gracias!!
Título: Re: Pasar estructura por puerto serie en VB2010
Publicado por: gera en 14 de Octubre de 2014, 14:37:58
Estuve investigando y al parecer podría hacerse con Buffer.BlockCopy().
Todavía no lo pruebo, pero la idea es copiar byte por byte los valores de la estructura en un array de bytes, y luego enviar eso por puerto serie.
Sería algo así:

Código: Visual Basic
  1. Dim config As config_t 'creamos la estructura
  2. Dim len As Int = Marshal.SizeOf(config) 'calculamos el tamaño en bytes
  3. Dim buff(len+1) As Byte 'definimos un buffer de tamaño len
  4. Buffer.BlockCopy(config, 0 , buff, 0, len)
  5. buff(len)=vbCr

Cuando lo pruebe les comento cómo me fue.

PD:

Otra opción es la que muestran aquí: http://www.codeproject.com/Articles/8967/Marshaling-Structures
Pero honestamente lo encuentro un poco confuso.