Escribo un programa para recibir datos de Uart ISI, mi paquete de datos es algo así como:
El primer byte de 2 bytes contiene el ID del dispositivo y el tipo de comando. Los datos contienen algunos bytes que pueden tener una longitud diferente, de 1 byte a 15 bytes como máximo, y el último byte que representa el paquete está terminado.
El código ISI de Uart es:
volatile char UartFlag=Fulse;
volatile unsigned char count=0;
unsigned char coder[13];
ISR (USART_RX_vect)
{
coder[count]=UDR0;
if (coder[count] == 20)
UartFlag=True;
else
count++;
}
Que reciba cada byte y guarde en coder
. Como ve cuando recibe el número 20
, deje de recibir el proceso por UartFlag=True;
y en main
llame a una función DoSomthing();
para hacer algo con coder
como se muestra a continuación:
while (1)
{
if (UartFlag)
{
DoSomthing();
count=0;
UartFlag=Fulse;
}
}
Pero tengo el problema de que en algún momento la sección de Datos tiene 20
en sus bytes y su ventaja es que no obtengo el paquete Correcto . Intento poner
(el último byte = 0 en lugar de 20) pero tal vez tenga el mismo error. Data
Estoy buscando la mejor manera de encontrar la longitud dinámica del paquete. ¿Cuál es la mejor manera de encontrar la longitud dinámica del paquete?
Una forma en que tal vez se trabaje es poner la longitud de datos en el primer byte de la sección %code% , pero agrega un proceso adicional en el dispositivo remitente.