2016-02-25 2 views
0

У меня есть два символа Буферы, по которым я собираю данные.Transmitte Два буфера 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]; 

и один 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++; 

как это, я также собираю данные от другого датчика. После сбора данных я отправляю в uart по dma. Моя проблема заключается в том, что я должен собирать данные в одном буфере, в то время как другие передают и наоборот, но как изменить буфер, так как tx происходит в arond каждые 50 мс и собирает данные каждые 1 мс. My dma config. как указано ниже,

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 это не работает.

+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

Смежные вопросы