我有兩個字符緩衝區,我正在收集數據。發送兩個緩衝區一個字節
TxBuffer[1400];
TxBuffer2[1400]
我有一個的情況是,一個緩衝器將在每次通過UART來發送,而在另一緩衝器我將被砍伐數據,後一個緩衝器傳送的其他緩衝器應該發送。 有沒有辦法做到這一點,而不使用memset。? 我的代碼流如下。
- 的數據將來自傳感器的被收集在BUFF1
- 此時buff2被髮送之後的buff2將被髮送
- ,所述BUFF1應當發送
- 當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每隔50ms發生一次,每隔1ms收集一次數據。 我的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];
}
我設置標誌,而我從傳感器收集數據,但它不工作。
還是有一個二維的緩衝和調劑指標。 –