Estoy construyendo un marco para un sistema de adquisición de datos donde el controlador envía datos (entero/flotante) a la GUI. Realicé algunos trabajos preliminares sobre tipos de datos y compiladores y descubrí que cada número entero/flotante ocupa 2/4 bytes cada uno.
Mi duda es cómo agrupar este byte entero/flotante en uno y mostrarlos como el valor entero/flotante real en la GUI.
Esta es una parte de la programación de GUI en la que confío, pero toda la comunicación de datos enviaba datos en bytes y luego los aporreaba y los mostraba como float/int.
por ejemplo, caso:
Necesito más claridad en el paso 4 .
Entonces, si necesitamos un número flotante/entero en la GUI, ¿cómo debemos agrupar los datos provenientes de los puertos de comunicación (USB/uart)?
Esto sería útil para construir mi comprensión y despejar mis dudas, si sugiere sus opiniones.
La forma en que se representan los tipos de valor en la memoria depende de la arquitectura (little/big endian, por ejemplo) y de los estándares que cumple.
Ejemplo: El estándar IEEE para aritmética de punto flotante (IEEE 754) es un estándar técnico para el cálculo de punto flotante establecido en 1985.
Desde la perspectiva de un microcontrolador, la forma más sencilla de enviar este tipo de datos es simplemente enviarlos en esta representación nativa (en la memoria) mediante punteros o uniones.
En el lado de la PC/GUI, puede tener recursos/bibliotecas adicionales que lo ayuden con la secuencia de bytes para escribir conversiones. Independientemente de cómo realice la conversión, solo tiene que asegurarse de que utiliza las mismas reglas/estándar.
Tomemos un entero sin signo de 16 bits ´i´ con el valor asignado de 1000 por ejemplo:
i = 1000
La representación little endian sería
0xE8 0x03
en memoria. Entonces, cuando desee enviar este valor como un flujo de bytes en serie, simplemente convierta 'i' en 'byte' y envíe dos bytes a partir de esa dirección.
Su software GUI podría realizar la conversión en la otra dirección, dado que utiliza el mismo estándar para la representación de tipos. Si usa big endian, es posible que primero deba intercambiar el orden de los bytes.
por cierto: ¿A qué tipo de GUI/lenguaje te refieres? Por ejemplo, C#/.NET proporciona amplios mecanismos para conversiones de tipo utilizando la clase BitConverter.
EDITAR Dado que el autor mencionó que usa C #, aquí hay información adicional:
tenga en cuenta que C # en sí mismo no define el endianness. Endianness se decide por hardware. Sin embargo, la mayoría de las plataformas que usan .NET son LITTLE endian. Si quiere estar seguro, puede verificar el endianness del sistema con el campo ´BitConverter.IsLittleEndian´ para decirle cómo se comportará.
Suponiendo que su microcontrolador usa little endian (como todos los (?) controladores atmel, por ejemplo), podría convertir los bytes dados del ejemplo int sin firmar de 16 bits anterior usando:
UInt16 value = BitConverter.ToUInt16(new byte[] { 0xE8, 0x03 }, 0);
De lo contrario, es posible que primero deba revertir el orden de los bytes.
es posible que desee considerar los números de punto fijo de muchas maneras según los datos que espera tratar en su aplicación
consulte esta aplicación de biblioteca https://www.allegro.cc/manual/4/api/fixed-point-math-routines/
otra forma es usar el punto flotante IEEE
No hay nada como "conversión" porque "byte" no es una representación numérica.
Hex, int, float son representaciones. Por lo tanto, 4 bytes se pueden representar como:
Por lo tanto, si tiene un flotador de 4 bytes y envía esos cuatro bytes. Luego los vuelves a armar y listo. No hay necesidad de convertir nada. 4 bytes son 4 bytes.
Pero, debe decirle a su compilador que la variable que contiene los 4 bytes debe interpretarse en un flotante. (No especificó qué idioma está usando. Por lo tanto, asumiré "C"). Tienes que hacer un casting para flotar en tu variable.
Puede enviar cualquier tipo de datos a través de la línea serie. Al recibir los datos, todos serán un montón de bits empaquetados en paquetes (según el protocolo). La tarea del software en el lado receptor es interpretar correctamente los datos recibidos.
Obviamente, además de los datos, necesita enviar información sobre el tipo de datos. Por ejemplo: si se recibe el byte A, el siguiente byte será el byte B (datos) y luego se recibirá el byte C (datos)...
Ignacio Vázquez-Abrams
Blup1980
connor lobo
union
. Desea unir una matriz de caracteres y su flotador.Novato91