Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Datos compuestos

Estas en el tema de Datos compuestos en el foro de C/C++ en Foros del Web. Buenas. Estoy trabajando en un lenguage de programación para FPGAs llamado Impulse C, cuya sintaxis es identica a la de C y me ha surgido ...
  #1 (permalink)  
Antiguo 21/09/2009, 02:53
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Datos compuestos

Buenas.

Estoy trabajando en un lenguage de programación para FPGAs llamado Impulse C, cuya sintaxis es identica a la de C y me ha surgido una duda.

Tengo que envíar por un stream de datos tres valores float pertenecientes a tres arrays de datos. Ahora mismo me han permitido enviar los tres en serie como datos independientes, pero esto genera tres escrituras en el stream de datos, por lo que en versiones futuras deberé unir esto de alguna forma. Había pensado crear un tipo de dato de 96 bits para almacenar los tres valores de 32 concatenados (es decir, unirlos con operaciones lógicas, enviarlos y separarlos en el otro proceso también usando la lógica).

He estado repasando información y manuales, pero no sé exactamente qué buscar ya que siempre que busco cosas de tipos compuestos me salen uniones, estructuras y enumeraciones, pero no exactamente lo que busco, ya que aquí se trabajaría con punteros y accesos a los tipos, pero yo quiero conformar un tipo nuevo. Es decir, coger el primer dato y desplazarlo a la derecha 64 bits, el segundo dato y desplazarlos 32 bits y el tercer dato sin desplazar y hacer un AND para unirlos. En el destino los separaría de forma similar.

De antemano, gracias por la ayuda.
  #2 (permalink)  
Antiguo 22/09/2009, 01:23
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Datos compuestos

Hola,

En C y C++ el operador >> y << (bitwise shift) solo se pueden usar con integers (32 / 64 bits).
Pero dependiendo del significado de stream en Impulse C ... posiblemente te sea de alguna ayuda...

Código C:
Ver original
  1. FILE *stream;
  2.  
  3. typedef struct {
  4.     float a, b, c;
  5. } TDATA;
  6.  
  7. typedef float ADATA[3];
  8.  
  9. TDATA data;
  10. ADATA data2;
  11.  
  12. int main(int argc, char** argv) {
  13.  
  14.     stream = fopen("data.txt", "w");
  15.  
  16.     data.a = 0x10;
  17.     data.b = 0x20;
  18.     data.c = 0x30;
  19.  
  20.     data2[0] = 0x10;
  21.     data2[1] = 0x20;
  22.     data2[2] = 0x30;
  23.  
  24.     fwrite(&data, sizeof(data), 1, stream);
  25.     fwrite(&data2, sizeof(data2), 1, stream);
  26.     fclose(stream);
  27.  
  28.     return (0);
  29. }

Saludos,
  #3 (permalink)  
Antiguo 23/09/2009, 03:24
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Datos compuestos

Muchas gracias.

De momento he hecho una versión con cada una de las dos soluciones que me has propuesto. Como de todas formas, el proyecto se trata de comparar la efectividad de las posibles soluciones (en tiempo, pero también en área del hw que se genera), me vienen bien todas las que se me puedan ocurrir.

Y, por si tienes curiosidad, en tiempo son iguales, pero en área es mejor la segunda solución (la del array), porque las escrituras y las lecturas al stream son mucho más eficientes. Curioso.

Un saludo y gracias de nuevo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:42.