Hola a todos, estoy tratando de enviar una trama de datos via serial(uart), tengo campos de un byte, 2 bytes y 4 bytes; estaba pensando que la mejor manera de enviar(y ordenar) la trama es usando estructuras, leyendo en el foro encontré muy valiosa información de los experiementados y conocedores, vi un post de Suky donde explicaba e implementa una estructura de datos y el codigo de envio.
el codigo es este:
union{
UINT8 Buffer[20];
struct{
UINT8 Temperatura;
UINT16 Presion;
UINT32 Contador;
.....
};
}Data;
for(k=0;k<20;k++){WriteUart(Data.Buffer[k]);
pero tengo problemas para almacenar datos en una variable con 4 bytes de tamaño(usando UINT32), sucede que solo almacena 2 bytes y los otros 2 son vistos como nulos (NULL). Solo se me permite almacenar datos en variables de 2 bytes de tamaño que es el caso cuando utilizo UINT16, no entiendo la razon, he realizado varias modificaciones pero todas de ellas sin éxito.
Por si no se me ha entendido aun, pongo este ejemplo(usando como referencia el código compartido por Suky)
si hago
Data.Contador = 'ABCD'; (4 bytes)
solo aparecen DC(en ese orden) , A y B son NULL cada uno.
si declaro en la estructura a Contador como de 2 bytes (UINT16 Contador; ) y escribo
Data.Contador = 'AB'; (2 bytes)
esta vez sí aparecen ambos caracteres. Uso el compilador c30 v3.31 de microchip y capturo en un arreglo de tamaño suficiente el contenido de Buffer, esto lo veo debuggeando y aprecio la cadena completa y cada posicion del arreglo para verificar si se llena correctamente.
Lo que he tenido que hacer es dividir a las variables de 4 bytes en dos de 2bytes, una de ellas como Mas significante y la otra como Menos significante, algo asi como Contador_high y Contador_low, pero es una solucion temporal, estoy buscando la manera de lograr guardar los 4 bytes correctamente. Espero que alguien me pueda ayudar con sugerencias, ideas o en todo caso si estoy haciendo todo mal que me señalen mi error