我需要一些帮助来提高我的循环缓冲区代码的效率。
我查看了stackoverflow,发现(几乎)所有关于循环缓冲区的主题都是关于这种缓冲区的使用或循环缓冲区的基本实现。我真的需要有关如何使其超级高效的信息。
计划是将此缓冲器与具有单精度 FPU 的 STM32F4 微控制器一起使用。我计划大量使用 write() 和 readn() 函数。我们实际上是在说每秒几百万次调用,所以在这里减少几个时钟周期,真的会有所作为。
我将在这里放最重要的代码,完整的缓冲区代码可通过http://dl.dropbox.com/u/39710897/circular%20buffer.rar 获得
谁能给我一些关于如何提高这个缓冲区效率的建议?
#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];
}