【发布时间】:2016-02-25 19:02:12
【问题描述】:
我有两个字符缓冲区,用于收集数据。
TxBuffer[1400];
TxBuffer2[1400]
我的情况是,一个缓冲区将一次通过 uart 传输,而在另一个缓冲区上我将砍伐数据,在传输一个缓冲区后,另一个缓冲区应该传输。 有没有办法做到这一点,而不使用 memset。? 我的代码流程如下。
- 将从 buff1 中的传感器收集数据
- 此时 buff2 将进行传输
- buff2传输后,buff1应该传输
- 当 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];
}
我在从传感器收集数据时设置标志。但它不起作用。
【问题讨论】:
-
或者有一个二维缓冲区并交换索引。