मुझे अपने परिपत्र बफर कोड की दक्षता में सुधार करने में कुछ मदद चाहिए।सी सर्कुलर बफर दक्षता में सुधार
मैंने स्टैक ओवरफ्लो के चारों ओर एक नज़र डाली और पाया कि (लगभग) सर्कुलर बफर पर सभी विषय ऐसे बफर या सर्कुलर बफर के मूल कार्यान्वयन के उपयोग के बारे में हैं। मुझे वास्तव में इसे सुपर कुशल बनाने के बारे में जानकारी चाहिए।
योजना इस बफर का उपयोग एसटीएम 32 एफ 4 माइक्रोकंट्रोलर के साथ करना है जिसमें एक सटीक एफपीयू है। मैं विशेष रूप से लिखने() और 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];
}
'readIndex' का उपयोग नहीं किया जाता है। – valdo
रीडइंडेक्स वास्तव में ऊपर सूचीबद्ध कार्यों में उपयोग नहीं किया जाता है। इसका उपयोग हालांकि() फ़ंक्शन में किया जाता है जो संलग्न रार फ़ाइल में पाया जा सकता है। यहां सूचीबद्ध readn() फ़ंक्शन बफर (यानी दूसरा अंतिम लिखित मान) – Gurba