【问题标题】:Transmitte Two buffers Consequtively连续发送两个缓冲区
【发布时间】:2016-02-25 19:02:12
【问题描述】:

我有两个字符缓冲区,用于收集数据。

TxBuffer[1400];
TxBuffer2[1400]

我的情况是,一个缓冲区将一次通过 uart 传输,而在另一个缓冲区上我将砍伐数据,在传输一个缓冲区后,另一个缓冲区应该传输。 有没有办法做到这一点,而不使用 memset。? 我的代码流程如下。

  1. 将从 buff1 中的传感器收集数据
  2. 此时 buff2 将进行传输
  3. buff2传输后,buff1应该传输
  4. 当 buff1 传输时,会在 buff2 上收集数据。

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

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

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

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];
}

我在从传感器收集数据时设置标志。但它不起作用。

【问题讨论】:

  • 或者有一个二维缓冲区并交换索引。

标签: c buffer uart


【解决方案1】:

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

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;
}

【讨论】:

  • 也许是因为它应该显示您尝试解决它的尝试,以及它失败的原因。
  • thx @Weather Vane,我的错误我没有在这里撕碎我的踪迹。
猜你喜欢
  • 1970-01-01
  • 2015-04-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多