Estoy configurando un protocolo UART que permite la comunicación entre 2 placas; Una placa maestra y una tabla de esclavos. La comunicación entre ellos será así:
Ejemplo 1:
Maestro [Tx] - GET_VALUE - > [Rx] Slave
Maestro [Rx] < - 0x05 -------- [Tx] Esclavo
Ejemplo 2:
Maestro [Tx] - GET_STATUS ----------- > [Rx] Slave
Maestro [Rx] < - I_AM_BUSY ------------ [Tx] Slave
Ejemplo 3:
Maestro [Tx] - START_OPERATION - > [Rx] Slave
Maestro [Rx] < ---------- ACK ------------ [Tx] Slave
El tamaño de los datos es de 1 byte para la mayoría del flujo de datos entre las dos tarjetas. Es por eso que voy a usar macros para definir estos comandos:
Ejemplo:
#define GET_VALUE 0x05
#define START_OPERATION 0x06
etc ...
Además de estos datos de 1 byte, solo hay un elemento que debe transmitirse entre las dos placas y su tamaño no es 1 byte. De hecho, estoy dispuesto a usar la serialización para transmitir una estructura de datos a través de UART utilizando un búfer FIFO circular
Ejemplo:
Maestro [Tx] - GET_STRUCTURE ------------ > [Rx] Slave
Maestro [Rx] < ---------- ESTRUCTURA ------------ [Tx] Esclavo
typedef struct{
uint8_t var1;
uint8_t var2;
uint8_t var3;
}MyStructTypeDef;
Se transmitirá por UART en este formato "nombre_variable: valorXXX":
var1: 123XXXvar2: 456XXXvar3: 789XXX
XXX es un separador
Mi pregunta es: si el 99% del flujo de datos tiene un tamaño de 1 byte y solo el 1% del flujo de datos no tiene un tamaño de 1 byte, ¿debo usar el búfer circular solo para obtener la estructura? ¿Hay una mejor manera de estandarizar la longitud de los datos pasados sobre uart?