FIFO Buffer (Circular / ring buffer) para almacenamiento de paquetes

0

Estoy desarrollando una red de transmisión de radio simple utilizando placas B-L072Z-LRWAN1. La estructura de la red está formada por:

  1. Una placa que actúa como puerta de enlace (donde se reciben los datos).
  2. Múltiples tableros que actúan como nodos (que envían datos a la puerta de enlace).

La carga útil del paquete enviado por los nodos tiene una longitud de N bytes y quiero almacenar la información de este paquete en caso de que la puerta de enlace deje de funcionar y los nodos no puedan comunicarse con él. Quiero conservar los datos que el nodo no pudo enviar y enviarlos una vez que la puerta de enlace esté activa de nuevo.

Digamos que quiero mantener los últimos M mensajes que el nodo no pudo enviar a la puerta de enlace. El tamaño del búfer debe tener M * N bytes de longitud, pero ¿cómo implemento este tipo de búfer en C?

¡Gracias de antemano!

    

1 respuesta

0
    //pseudo algorithm First In First Out
    int FIFO[16]; // size of 2^N
    int WR_Ptr, RD_Ptr; // Write and read pointer
    int Input, Output;

    // On write event
    FIFO[WR_Ptr] = Input;
    WR_Ptr++; //increment WR pointer
    WR_Ptr &= 15 // apply mask 2^N-1, turn over in circular manner
    if WR_Ptr==RD_Ptr //buffer overrun?
    {
       //handle error
    }

    //On read event
    if WR_Ptr<>RD_Ptr //check if FIFO is not empty
    {
      Output = FIFO[RD_Ptr];
      RD_Ptr++; //increment RD pointer
      RD_Ptr &= 15 // apply mask 2^N-1, turn over in circular manner
    }

//clear FIFO
RD_Ptr = 0;
WR_Ptr = 0;
    
respondido por el Marko Buršič

Lea otras preguntas en las etiquetas