Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Problema con matriz en Cpp
#1

Hola:

Estoy haciendo un programa en Cpp el cual ya compilado se carga en un microcontrolador.

El uC recibirá un pack de datos (22,34,34,176,90,20,60,0) que se definen de la siguiente manera:


#define dato0  recibe[0]
#define dato1  recibe[1]
#define dato2  recibe[2]
#define dato3  recibe[3]
#define dato4  recibe[4]
#define dato5  recibe[5]
#define dato6  recibe[6]
#define dato7  recibe[7]

int8 recibe[8];     // Éste es el Pack

Justo después de recibir el pack, se envía el mismo a una PC vía Serial (RS-232) en modo Bytes
(no string) de la siguiente manera:

putc(recibe[]);

Y en la PC, usando CuteCom en modo HEX como Software Serial, se recibe el pack como:

[0x16][0x22][0x22][0xB0][0x5A][0x14][0x3C][0x00]

Lo cual es correcto.

Pero si en vez de enviar recibe[], mando uno a uno sus componentes:

putc(dato0);
putc(dato1);
putc(dato2);
putc(dato3);
putc(dato4);
putc(dato5);
putc(dato6);
putc(dato7);

Recibo lo siguiente, que no es lo esperado:

[0x16][0x00][0x00][0x00][0x00][0x00][0x00][0x00]
[0x22][0x00][0x00][0x00][0x00][0x00][0x00][0x00]
[0x22][0x00][0x00][0x00][0x00][0x00][0x00][0x00]
[0xB0][0x00][0x00][0x00][0x00][0x00][0x00][0x00]
[0x5A][0x00][0x00][0x00][0x00][0x00][0x00][0x00]
[0x14][0x00][0x00][0x00][0x00][0x00][0x00][0x00]
[0x3C][0x00][0x00][0x00][0x00][0x00][0x00][0x00]
[0x00][0x00][0x00][0x00][0x00][0x00][0x00][0x00]

Lo cual provoca que mi proyecto no funcione, por el "exceso" de datos extras que vienen con
cada dato0,1,...7.

Admito que me cuesta trabajo entender los arreglos, porque tal parece que:

recibe[0] está compuesto por dato0[0], dato0[1], ......dato0[7]
recibe[1] está compuesto por dato1[0], dato1[1], ......dato1[7]

y así todos los demás.

De todos modos mando mi código completo en Cpp por si alguien tiene una idea de cómo solucionarlo.

Gracias.


Archivos adjuntos
.gz 18f14k50_cdc_usb_sc6928.c.tar.gz Tamaño: 3 KB  Descargas: 0

Es mejor saber un poco de todo, que todo de muy poco. Lo primero, garantiza la supervivencia humana.
    ¡Gracias!
#2

Cpp usa column major para almacenar matrices, gambas usa row major. Luego tienes que reconvertir datos , por ejemplo para una matriz de 4x4 o sea 16 elementos:

C:
1  5  9 13
2  6 10 14
3  7 11 15
4  8 12 16

Gambas:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

si sabes las dimensiones de la matriz de antemano, no seria problema recibir datos en una matriz auxiliar y convertirlos.

"Es mejor saber todo de muy poco que muy poco de todo" - anonimo
[-] Los siguientes 1 usuarios dice gracias a tercoide por este post:
  • AlfredoSC
    ¡Gracias!
#3

Gracias Tercoide, porque derivado de la información que me diste, encontré que al transmitir datos tipo Byte (Ejemplo 0xB3. 0xEA), por el SerialPort (Class) solo es posible hacerlo si la variable es tipo arreglo o matriz unidimensional de "n" elementos. Por qué lo pensó así Gambas? Habrá que ver el motivo y la razón.

No obstante si la variable es String simple (como 0x37, 0x20 en ASCII "7" y " ", respectivamente, si se admite como dato simple y/o único, si así se requiere.

Así que con éste conocimiento, tuve que hacer modificaciones en el código que va en el microcontrolador, para que diera tratamiento a los datos que llegan en matriz.

Yo quisiera que tincho tuviese un poco de tiempo para investigar ese comportamiento de SerialPort, porque sigue vigente como paso intermedio para comunicaciones USB, al crear puerto virtual tipo ttyACM0 y luego pasar los datos del Stream SerialPort, al Stream USB.


Saludos.

Es mejor saber un poco de todo, que todo de muy poco. Lo primero, garantiza la supervivencia humana.
    ¡Gracias!


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)