Ring Buffer Eş zamanlı veri alıp gönderme

Başlatan erenbasturk, 15 Temmuz 2014, 13:40:55

erenbasturk

Merhaba,

Ring Buffer sistemini kullanarak RX buffer'ına gelen verileri aynı şekilde TX buffer'ı üzerinden göndermek istiyorum. Aşağıdaki ring buffer kodlarını kullanarak büyük boyutlu verileri sorunsuz bir şekilde alıyorum. (LPC1768 ve easyweb stack'yle çalışıyorum)

/******************************************************************
 *****                                                        *****
 *****  Name: easyweb.c                                       *****
 *****  Ver.: 1.0                                             *****
 *****  Date: 07/05/2001                                      *****
 *****  Auth: Andreas Dannenberg                              *****
 *****        HTWK Leipzig                                    *****
 *****        university of applied sciences                  *****
 *****        Germany                                         *****
 *****  Func: implements a dynamic HTTP-server by using       *****
 *****        the easyWEB-API                                 *****
 *****                                                        *****
 ******************************************************************/

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#include "lpc17xx.h"
#include "type.h"

#define extern            // Keil: Line added for modular project management
#define BUFFER_SIZE 256

#include "easyweb.h"

#include "EMAC.h"         // Keil: *.c -> *.h    // ethernet packet driver
#include "tcpip.h"        // Keil: *.c -> *.h    // easyWEB TCP/IP stack
#include "webpage.h"                             // webside for our HTTP server (HTML)
#include "tcpip.h"

unsigned char *buffer[BUFFER_SIZE];
int start = 0;
int end=0;
int active=0;
char *gecici;



void PushToQueue(unsigned char *p)
{
    buffer[end] = p;
    end = (end + 1) % BUFFER_SIZE;

    if (active < BUFFER_SIZE)
    {
        active++;
    } else {
        start = (start + 1) % BUFFER_SIZE;
    }
}

char *RetrieveFromQueue(void)
{
    unsigned char *p;

    if (!active) { return NULL; }

    p = buffer[start];
    start = (start + 1) % BUFFER_SIZE;

    active--;
    return p;
}



int main(void)
{ 

  SystemClockUpdate();

  TCPLowLevelInit();
  TCPLocalPort = TCP_PORT_HTTP;     // set port we want to listen to

  while (1)                        
  {
    if (!(SocketStatus & SOCK_ACTIVE))
    { 
      TCPPassiveOpen();   
    }
    DoNetworkStuff();     
		
		tcp_rx_data();

  }
}



void tcp_rx_data(void)
{
	if(SocketStatus & SOCK_CONNECTED)
	{
		if(SocketStatus & SOCK_DATA_AVAILABLE)
		{
				
				PushToQueue(RxTCPBuffer);
				gecici=RetrieveFromQueue();
				TCPReleaseRxBuffer();	
			
		}
	}
}
	

void tcp_tx_data(void)
{
	if(SocketStatus & SOCK_CONNECTED)
	{
		if((SocketStatus & SOCK_TX_BUF_RELEASED) )
		{
		memcpy(TCP_TX_BUF,gecici,MAX_TCP_RX_DATA_SIZE);
		TCPTxDataCount=MAX_TCP_TX_DATA_SIZE;
		TCPTransmitTxBuffer();
		}
		
	}
}


Benim takıldığım nokta algoritmada, nasıl bir yapı oluşturmalıyım'ki ring buffer'a gelen veriler silinmeden gönderme işlemini yapıyım?