连续发送两个缓冲区

Transmitte Two buffers Consequtively

我有两个字符缓冲区,我正在其上收集数据。

TxBuffer[1400];
TxBuffer2[1400]

我的情况是,一个缓冲区将通过 uart 一次传输,另一个缓冲区我将砍伐数据,在一个缓冲区传输后,另一个缓冲区应该传输。 有什么办法可以不使用 memset 吗? 我的代码流程如下。

  1. 将从 buff1 中的传感器收集数据
  2. 此时buff2会传输
  3. buff2发送完后,buff1应该发送
  4. buff1传输时,buff2会收集数据。

根据上面的内容,我想添加我尝试过的内容,如下所示。 我在一个缓冲区中使用了 2 个指向特定地址偏移量的字符指针,如下所示。

 unsigned char *block1_ptr = &TxBuffer[Sensor1_Data];
 unsigned char *block2_ptr = &TxBuffer[Sensor1_Data +700];

一个 1ms 我正在将我的数据从传感器收集到这个缓冲区。如下。

Sensor1_dataptr =  Sensor1_GetData();
*block1_ptr = Sensor1_dataptr->datax0;
block1_ptr++;
*block1_ptr = Sensor1_dataptr->datax1;
block1_ptr++;
*block1_ptr = Sensor1_dataptr->datay0;
block1_ptr++;
*block1_ptr = Sensor1_dataptr->datay1;
block1_ptr++;
*block1_ptr = Sensor1_dataptr->dataz0;
block1_ptr++;
*block1_ptr = Sensor1_dataptr->dataz1;
block1_ptr++;

像这样我也从其他传感器收集数据。收集数据后,我通过 dma 发送到 uart。 我的问题是,我必须在一个缓冲区中收集数据,而另一个缓冲区正在传输,反之亦然,但是如何更改缓冲区,因为 tx 每 50 毫秒发生一次,每 1 毫秒收集一次数据。 我的 DMA 配置。如下,

dmaconfig->source = &TxBuffer[Sensor1_Data];
dmaconfig->destination = &UCA0TXBUF;
dmaconfig->size = 1400;
DMAInit(dmaconfig);
DMA_TRIGGER();

我已经试过有一个标志,当 dma 与 Tx 完成时,该标志将重置。我也保持一个条件如下

if(flag == set)
{
  Transmit_buff = &TxBuffer[1400];
}else{ 
   &TxBuffer[1400];
}

我在从 sensors.But 收集数据时设置标志,但它不起作用。

您可以使用缓冲区指针,交换它们而不是复制数据,也许像这样

int main(void) {

    char Buff1[180];
    char Buff2[180];
    char *prxbuf = Buff1;
    char *ptxbuf = Buff2;
    char *temp;

    while (1) {

        // receive using prxbuf
        // transmit using ptxbuf

        // swap the buffer pointers
        temp = prxbuf;
        prxbuf = ptxbuf;
        ptxbuf = temp;
    }
    return 0;
}