PROGMEM के उपयोग के निहितार्थ क्या हैं?


12

बड़ी मात्रा में पाठ चर के साथ, मैंने उन्हें PROGMEM का उपयोग करके फ्लैश मेमोरी में संग्रहीत करना आवश्यक पाया है । Arduino पर Flash (PROGMEM का उपयोग करके) बनाम SRAM बनाम EEPROM के भंडारण के सकारात्मक और नकारात्मक परिणाम क्या हैं?

जवाबों:


10

यहाँ AtMega328 पर FLASH, EEPROM और SRAM की त्वरित तुलना की गई है, जो वर्तमान Arduino बोर्डों (ड्यूग, लियोनार्डो, पुराने Arduinos और कुछ अन्य संगत बोर्डों को छोड़कर) में से कई में माइक्रोकंट्रोलर है।

  • फ्लैश: 10,000 लिख / चक्र मिटा। पहुँच तेज़ है, लेकिन SRAM से धीमी है। कोड के माध्यम से पहुँचता है PROGMEM
  • EEPROM: 100,000 लिख / चक्र मिटा। पहुँच नारेबाजी है, मिलीसेकंड में। अपेक्षाकृत जटिल पहुंच प्रक्रिया।
  • SRAM: असीमित लेखन / चक्र मिटाएं। पहुंच बहुत तेज है, 2 घड़ी चक्र। कोड द्वारा सीधी पहुँच।

तो, PROGMEM का उपयोग करने का मुख्य काल्पनिक नकारात्मक परिणाम 10,000 लेखन चक्र की सीमा है। EEPROM का उपयोग करने का मुख्य नकारात्मक परिणाम डेटा को पढ़ने / लिखने / कॉपी करने के लिए कोड की जटिलता है । SRAM, यह क्षमता में बहुत सीमित है


आपको EEPROM के उपयोग के बारे में जानकारी कहाँ से मिल रही है? का एक सा से देख के बारे में , ऐसा लगता है EEPROM की तरह पढ़ता है ~ 5 घड़ी चक्र की तरह कुछ ले। लिखना धीमा है, लेकिन पढ़ना नहीं।
कॉनर वुल्फ

ओपी बहुत सारा सामान स्टोर करना चाहता है ।
अनिंदो घोष

हाँ, लेकिन यह है कि एक बार लिखें, कई, या उलटा पढ़ें? "टेक्स्ट वैरिएबल" संभवत: कुछ ऐसे हैं जो संकलन समय पर निर्दिष्ट होते हैं, डिवाइस पर जलाए जाते हैं, और उसके बाद कभी नहीं बदले जाते हैं (जैसे मेनू पाठ या सोमैट)।
कॉनर वुल्फ

मैंने पढ़ा है की दुकान के रूप में "संकलन / अपलोड करते समय दुकान" सवाल में। यदि एक चर का उपयोग रन टाइम में पढ़ने / लिखने के लिए किया जाता है, तो इसे निश्चित रूप से FLASH में संग्रहीत नहीं किया जाना चाहिए। क्या अतिरिक्त प्रतिबंध नहीं है कि पहले पूरे पृष्ठ को मिटाए बिना FLASH को संशोधित नहीं किया जा सकता है?
माइक्रोथियॉन

... पाठ चर स्ट्रिंग स्थिरांक नहीं।
अनिंदो घोष

2

प्राथमिक निहितार्थ यह है कि आप PROGMEM में संग्रहीत जानकारी को संशोधित नहीं कर सकते हैं। आपको एक (बहुत छोटा) प्रदर्शन हिट होगा क्योंकि स्ट्रिंग को एक बार में 1 बाइट की प्रतिलिपि बनाने की आवश्यकता होती है।

आपके प्रोग्राम में परिवर्तन करने के लिए FLASH का वियर-आउट एक (प्राथमिक) चिंता का विषय नहीं है, आपको वैसे भी फ़्लैश को फिर से प्रोग्राम करना होगा।

IDE 1.x परिचय के साथ F () मैक्रो शामिल था। इससे PROGMEM में तार रखना आसान हो जाता है।

उपयोग करने के बजाय उदाहरण के लिए: Serial.print ("हैलो वर्ल्ड!");

अब आप उपयोग कर सकते हैं:

Serial.print (एफ ("हैलो वर्ल्ड!");

ध्यान दें, कि एफ () एक फ़ंक्शन नहीं है, यह सिर्फ एक मैक्रो है इसलिए इसका उपयोग कुछ हद तक सीमित है।


1

PROGMEM का उपयोग अपरिवर्तनीय डेटा के लिए किया जाता है। यदि आप तेजी से बदलते चर रखने जा रहे हैं, तो मैं इसे SRAM में संग्रहीत करूंगा। दूसरी ओर, यदि आप कुछ अपरिवर्तनीय पाठ चर (उदाहरण के लिए प्रदर्शित किए जाने वाले सामान) चाहते हैं, जो कि बहुत बार नहीं आएगा, तो PROGMEM एक महान विचार है।

EEPROM के बारे में - लगातार सामान के लिए इसे बचाने की कोशिश करें। IIRC यह SRAM / PROGMEM पर EEPROM से डेटा लाने के लिए धीमा है। आमतौर पर मैं (और अन्य) EEPROM से SRAM (यहां तक ​​कि आधिकारिक उदाहरण ऐसा करता है) का उपयोग करने से पहले डेटा कॉपी करते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.