2009-11-18 12 views
5

मैं गैर-अस्थिर फ्लैश मेमोरी में संग्रहीत होने के लिए अलार्म इतिहास संरचना विकसित करने की कोशिश कर रहा हूं। फ्लैश मेमोरी में सीमित संख्या में लिखने के चक्र होते हैं इसलिए मुझे प्रत्येक बार संरचना में सभी फ़्लैश पृष्ठों को फिर से लिखने या कतार के सिर/पूंछ में अद्यतन पॉइंटर्स लिखने के बिना संरचना में रिकॉर्ड जोड़ने का एक तरीका चाहिए।अलार्म इतिहास स्टैक या कतार?

अतिरिक्त रूप से उपलब्ध फ्लैश मेमोरी स्पेस का उपयोग करने के बाद, मैं पहले रिकॉर्ड में पहले रिकॉर्ड के साथ शुरू होने वाले फ्लैश में संग्रहीत ओवरराइटिंग रिकॉर्ड शुरू करना चाहता हूं। इससे मुझे लगता है कि एक गोलाकार बफर आइटम जोड़ने के लिए सबसे अच्छा काम करेगा। हालांकि रिकॉर्ड देखते समय मैं संरचना को ढेर की तरह काम करना चाहता हूं। जैसे रिकॉर्ड पिछले-इन-फर्स्ट-आउट में रिवर्स क्रोनोलॉजिकल ऑर्डर में प्रदर्शित किए जाएंगे।

संरचना आकार, सिर, पूंछ, इंडेक्स को तब तक संग्रहित नहीं किया जा सकता जब तक कि वे रिकॉर्ड में संग्रहीत न हों, क्योंकि यदि वे प्रत्येक बार एक निश्चित स्थान पर लिखे गए थे तो यह उस पृष्ठ पर अधिकतम लिखने वाले चक्रों से अधिक होगा जहां वे संग्रहीत किए गए थे ।

तो क्या मुझे एक स्टैक, कतार, या कुछ संकर संरचना का उपयोग करना चाहिए? मुझे फ्लैश में सिर, पूंछ, आकार की जानकारी कैसे स्टोर करनी चाहिए ताकि इसे पावर-अप के बाद फिर से शुरू किया जा सके?

+0

क्या आप सीधे फ्लैश पर काम कर रहे हैं या आप फ्लैश पर फाइल सिस्टम का उपयोग कर रहे हैं? – stefaanv

+0

कोई फ़ाइल सिस्टम नहीं। सीधे फ्लैश करने के लिए लेखन। – mjh2007

उत्तर

4

लुक ring-buffer

मान लिया जाये कि आप काम कर सकते हैं जो पिछले प्रविष्टि (एक समय स्टाम्प आदि से तो एक मार्कर लिखने की जरूरत नहीं है) यह भी सबसे अच्छा पहनने लेवलिंग प्रदर्शन किया है।

2

संपादित करें: ओपी के फ़्लैश नियंत्रक पर लागू नहीं होता है: आपको अपने कोड में wear leveling पर चिंता करने की ज़रूरत नहीं है। फ्लैश मेमोरी कंट्रोलर को दृश्यों के पीछे इसे संभालना चाहिए।

हालांकि, यदि आप अभी भी ऐसा करना चाहते हैं, तो बस एक नियमित परिपत्र बफर, और keep pointers to the head and tail स्टैक का उपयोग करें।

आप डेटा स्टोर करने के लिए फ़्लैश पर कहां प्रबंधित करने के लिए Least Recently Used cache का उपयोग करने पर विचार कर सकते हैं।

+0

यह बिल्कुल लेवलिंग पहन नहीं है। उन्हें लिखने पर जितनी बार संभव हो उतनी बार ध्यान देने की जरूरत है। –

+0

मुझे यकीन है कि फ्लैश मेमोरी कंट्रोलर पहनने के स्तर को प्रदान नहीं करता है। मैं AT45DB642D का उपयोग कर रहा हूँ। – mjh2007

+0

@ mjh2007: आप सही हैं, नियंत्रक के विनिर्देश मैनुअल में कोई विशेष प्रबंधन प्रतीत नहीं होता है। –

0

आप निश्चित रूप से एक अंगूठी बफर चाहते हैं। लेकिन आप सही हैं, मेटा जानकारी थोड़ा सा है ... दिलचस्प।

0

कई अनुभागों पर अपनी प्रविष्टियों को मानचित्र करें। जब अनुभाग पूर्ण हो जाते हैं, तो पहले खंड से शुरू करें ओवरराइट करें। अनुक्रम-संख्या जोड़ें (एनबीआर अनुक्रम संख्या> 2 * प्रविष्टियां), इसलिए रीबूट पर आप जानते हैं कि पहली प्रविष्टि क्या है।

0

आप रिंग-बफर का एक संस्करण कर सकते हैं, जहां पृष्ठ में संग्रहीत पहला तत्व उस पृष्ठ की संख्या है जो पृष्ठ लिखा गया है। यह आपको यह निर्धारित करने की अनुमति देता है कि आपको पहले पृष्ठ को ढूंढकर अगला लिखना चाहिए जहां नंबर पिछले पृष्ठ की तुलना में कम है। यदि वे सभी एक जैसे हैं, तो आप शुरुआत से ही अगले नंबर से शुरू करें।

संबंधित मुद्दे