Estoy leyendo el envío de datos a un PIC32MX7xx usando UART. Los marcos de datos tienen 6 bytes de longitud, sin excepción.
El problema al que me estoy enfrentando es que cuando hay 6 bytes en espera de lectura y envío otros 6 bytes demasiado rápido, el PIC se bloquea.
Estoy leyendo los bytes en paquetes de 6 y los estoy escribiendo en un búfer para colocarlos en una red CAN (pero eso no es importante).
typedef struct {
WORD id;
DWORD data;
} WiFiRXPacket;
BYTE *WiFiRXTemp = NULL;
WiFiRXPacket* WiFiRXBuffer = NULL;
int RXelements = 0;
int RXallocated = 0;
void TCPReceiving()
{
int dataAmount = 0;
int i = 0;
int j = 0;
dataAmount = DataRdyUART1();
if(dataAmount != 0)
{
WiFiRXTemp = (BYTE *) malloc(6 * sizeof(BYTE));
if(WiFiRXTemp)
{
while(i<6)
{
WiFiRXTemp[i] = getcUART1();
i++;
}
WiFiRXPacket packet;
packet.id = ((WORD)WiFiRXTemp[j]) << 8;
packet.id += ((WORD)WiFiRXTemp[j + 1]);
if (packet.id != 0)
{
packet.data = ((DWORD)WiFiRXTemp[j + 2]) << 24;
packet.data += ((DWORD)WiFiRXTemp[j + 3]) << 16;
packet.data += ((DWORD)WiFiRXTemp[j + 4]) << 8;
packet.data += ((DWORD)WiFiRXTemp[j + 5]);
PutInTXBuffer(packet.id, (QWORD)packet.data); // Send the received command back for confirmation
}
}
}
free(WiFiRXTemp); // Deallocate the buffers memory
WiFiRXTemp = NULL; // Re-initialize the buffer
}
¿Alguien tiene una idea de por qué sucede esto?