Hi,@jingpan
The way it's written in the example, when I write if(emptyBlock < BUFFER_NUMBER), when processing data after sending, the ring buffer pointing to has been received to change, resulting in data distortion, how to avoid this problem?
if(emptyBlock > 0)
{
Recv_Req_Num++;
xfer.data = Buffer + rx_index * BUFFER_SIZE;
xfer.dataSize = BUFFER_SIZE;
xfer_status = SAI_TransferReceiveEDMA(DEMO_SAI, &rxHandle, &xfer);
if (kStatus_Success == xfer_status)
{
rx_index++;
}
if (rx_index == BUFFER_NUMBER)
{
rx_index = 0U;
}
}
if(emptyBlock < BUFFER_NUMBER)
{
//xSemaphoreTake(xSemaphoreSai, 1);
xfer.data = Buffer + tx_index * BUFFER_SIZE;
xfer.dataSize = BUFFER_SIZE;
//-----------------------------------------------------------
/*This is where I'm going to process the data*/
//-----------------------------------------------------------
memset(xfer.data, 0, BUFFER_SIZE);//Run a test. Clear the buffer
for(int i=0; i<BUFFER_SIZE; i++)
{
if(xfer.data[i] != 0)
PRINTF("%d ", i);//Some of the data printed here has been changed
}
xfer_status = SAI_TransferSendEDMA(DEMO_SAI, &txHandle, &xfer);
if (kStatus_Success == xfer_status)
{
tx_index++;
}
if (tx_index == BUFFER_NUMBER)
{
tx_index = 0U;
}
}