l'amélioration de C tampon circulaire de l'efficacité

J'aimerais un peu d'aide l'amélioration de l'efficacité de mon tampon circulaire de code.

J'ai eu un coup d'oeil autour de stackoverflow et a constaté que (presque) tous les sujets sur la circulaire tampons sur les utilisations d'un tel tampon ou de la base de la mise en œuvre d'un tampon circulaire. J'ai vraiment besoin d'informations sur la façon de le rendre super efficace.

Le plan est d'utiliser ce tampon avec la STM32F4 microcontrôleur qui a un seul precicion FPU.
J'ai l'intention de faire un usage intensif de surtout la write() et readn (). Nous sommes littéralement parlant quelques millions d'appels en voici un deuxième, afin de rasage de quelques cycles d'horloge ici et là va vraiment faire une différence.

Je vais mettre le plus important de bits de code ici, l'intégralité de la mémoire tampon de code est disponible via http://dl.dropbox.com/u/39710897/circular%20buffer.rar

Quelqu'un peut-il me donner quelques conseils sur la façon d'améliorer l'efficacité de ce tampon?

#define BUFF_SIZE 3             //buffer size set at compile time

typedef struct buffer{
    float buff[BUFF_SIZE];
    int readIndex;
    int writeIndex;
}buffer;

/********************************\
* void write(buffer* buffer, float value)
* writes value into the buffer
* @param buffer* buffer
*   pointer to buffer to be used
* @param float value
*   valueto be written in buffer
\********************************/
void write(buffer* buffer,float value){
    buffer->buff[buffer->writeIndex]=value;
    buffer->writeIndex++;
    if(buffer->writeIndex==BUFF_SIZE)
        buffer->writeIndex=0;
}

/********************************\
* float readn(buffer* buffer, int Xn)
* reads specified value from buffer
* @param buffer* buffer
*   pointer to buffer to be read from
* @param int Xn
*   specifies the value to be read from buffer counting backwards from the most recently written value
*   i.e. the most recently writen value can be read with readn(buffer, 0), the value written before that with readn(buffer, 1)
\********************************/
float readn(buffer* buffer, int Xn){
    int tempIndex;

    tempIndex=buffer->writeIndex-(Xn+1);
    while(tempIndex<0){
        tempIndex+=BUFF_SIZE;
    }

    return buffer->buff[tempIndex];
}
readIndex n'est pas utilisé.
readindex est en effet pas utilisé dans les fonctions énumérées ci-dessus. Il est utilisé bien que dans le read (), fonction qui peut être trouvé dans le fichier rar. Le readn() la fonction énumérés ici sert à lire une valeur spécifique de la mémoire tampon (c'est à dire l'avant-dernière valeur écrite)

OriginalL'auteur Gurba | 2012-03-15