2016-02-25 59 views
0

我有兩個字符緩衝區,我正在收集數據。發送兩個緩衝區一個字節

TxBuffer[1400]; 
TxBuffer2[1400] 

我有一個的情況是,一個緩衝器將在每次通過UART來發送,而在另一緩衝器我將被砍伐數據,後一個緩衝器傳送的其他緩衝器應該發送。 有沒有辦法做到這一點,而不使用memset。? 我的代碼流如下。

  1. 的數據將來自傳感器的被收集在BUFF1
  2. 此時buff2被髮送之後的buff2將被髮送
  3. ,所述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每隔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]; 
} 

我設置標誌,而我從傳感器收集數據,但它不工作。

+0

還是有一個二維的緩衝和調劑指標。 –

回答

0

您可以使用緩衝區指針,並交換它們,而不是複製數據,或許這樣

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

謝謝你的回答,但爲什麼-2點爲我。 – evaet1

+0

也許是因爲它預計會顯示你的解決方案,以及它失敗的原因。 –

+0

thx @Weather Vane,我的錯誤我沒有在這裏撕碎我的蹤跡。 – evaet1