बड़ी मात्रा में पाठ चर के साथ, मैंने उन्हें PROGMEM का उपयोग करके फ्लैश मेमोरी में संग्रहीत करना आवश्यक पाया है । Arduino पर Flash (PROGMEM का उपयोग करके) बनाम SRAM बनाम EEPROM के भंडारण के सकारात्मक और नकारात्मक परिणाम क्या हैं?
बड़ी मात्रा में पाठ चर के साथ, मैंने उन्हें PROGMEM का उपयोग करके फ्लैश मेमोरी में संग्रहीत करना आवश्यक पाया है । Arduino पर Flash (PROGMEM का उपयोग करके) बनाम SRAM बनाम EEPROM के भंडारण के सकारात्मक और नकारात्मक परिणाम क्या हैं?
जवाबों:
यहाँ AtMega328 पर FLASH, EEPROM और SRAM की त्वरित तुलना की गई है, जो वर्तमान Arduino बोर्डों (ड्यूग, लियोनार्डो, पुराने Arduinos और कुछ अन्य संगत बोर्डों को छोड़कर) में से कई में माइक्रोकंट्रोलर है।
PROGMEM
।तो, PROGMEM का उपयोग करने का मुख्य काल्पनिक नकारात्मक परिणाम 10,000 लेखन चक्र की सीमा है। EEPROM का उपयोग करने का मुख्य नकारात्मक परिणाम डेटा को पढ़ने / लिखने / कॉपी करने के लिए कोड की जटिलता है । SRAM, यह क्षमता में बहुत सीमित है ।
प्राथमिक निहितार्थ यह है कि आप PROGMEM में संग्रहीत जानकारी को संशोधित नहीं कर सकते हैं। आपको एक (बहुत छोटा) प्रदर्शन हिट होगा क्योंकि स्ट्रिंग को एक बार में 1 बाइट की प्रतिलिपि बनाने की आवश्यकता होती है।
आपके प्रोग्राम में परिवर्तन करने के लिए FLASH का वियर-आउट एक (प्राथमिक) चिंता का विषय नहीं है, आपको वैसे भी फ़्लैश को फिर से प्रोग्राम करना होगा।
IDE 1.x परिचय के साथ F () मैक्रो शामिल था। इससे PROGMEM में तार रखना आसान हो जाता है।
उपयोग करने के बजाय उदाहरण के लिए: Serial.print ("हैलो वर्ल्ड!");
अब आप उपयोग कर सकते हैं:
Serial.print (एफ ("हैलो वर्ल्ड!");
ध्यान दें, कि एफ () एक फ़ंक्शन नहीं है, यह सिर्फ एक मैक्रो है इसलिए इसका उपयोग कुछ हद तक सीमित है।
PROGMEM का उपयोग अपरिवर्तनीय डेटा के लिए किया जाता है। यदि आप तेजी से बदलते चर रखने जा रहे हैं, तो मैं इसे SRAM में संग्रहीत करूंगा। दूसरी ओर, यदि आप कुछ अपरिवर्तनीय पाठ चर (उदाहरण के लिए प्रदर्शित किए जाने वाले सामान) चाहते हैं, जो कि बहुत बार नहीं आएगा, तो PROGMEM एक महान विचार है।
EEPROM के बारे में - लगातार सामान के लिए इसे बचाने की कोशिश करें। IIRC यह SRAM / PROGMEM पर EEPROM से डेटा लाने के लिए धीमा है। आमतौर पर मैं (और अन्य) EEPROM से SRAM (यहां तक कि आधिकारिक उदाहरण ऐसा करता है) का उपयोग करने से पहले डेटा कॉपी करते हैं।