Segun veo cuando el puntero de la cola alcanza el final del array, este vuelve al comienso del array y siempre que el size(el cual indica si el array esta full) se copiaran datos al inicio del array, pero si el size a alcanzado su limite maximo y el puntero de la cola vuelve al inicio del array y se copian nuevos datos estos destruiran los que habian previamente, por eso es que asegurarse que el size no alcance su valor maximo, porque al copiarse nuevos datos estos sobreescribiran los existentes con la consecuente perdida de estos

El otro puntero el de la cabeza se incrementa cada vez que se lea un dato del array decrementando de esta forma el size.
Bueno este trabalenguas es mas o menos lo que entendi del buffer de anillo (Ring buffer), el cual nunca habia utilizado pero ahora lo probare

El ccs trae un ejemplo EX_SISR.C, sino mal recuerdo

Saludos