در این پست قصد داریم تا در مورد انواع حافظه در آردوینو و نحوه استفاده از آن صحبت کنیم.
حافظه در آردوینو:
به طور کلی حافظه در میکروکنترلر هایی که در آردوینو از آنها استفاده شده است، به سه قسمت تقسیم می شوند:
- حافظه ی فلش (فضای برنامه). این حافظه جایی است که کدهای نوشه شده ی ما در آن قرار می گیرند.
- SRAM (حافظه ی ثابت با دسترسی متغیر). این حافظه محل قرار گیری متغیرهایی است که کدهای ما ایجاد می کنند، و از آن استفاده می کنند.
- EEPROM این حافظه برای ذخیره ی اطلاعات به مدت طولانی استفاده می شود.
حافظه ی فلش و EEPROM ثابت هستند. و بعد از خاموش شدن میکرو از بین نمی روند. ولی حافظه ی SRAM بعد از خاموش شدن میکرو پاک می شود.
نکته: حافظه FLASH (PROGMEM) تنها در زمان پروگرام کردن میکرو قابل تغییر است. شما نمی توانید بعد از شروع به کار میکرو آنرا تغییر دهید.
مقدار حافظه برای چند نمونه از میکروهایی که در بوردهای آردوینو استفاده شده است، به شرح زیر است:
ATMega168 |
ATMega328P |
ATmega1280 |
ATmega2560 |
|
---|---|---|---|---|
Flash (1 kByte used for bootloader) |
16 kBytes | 32 kBytes | 128 kBytes | 256 kBytes |
SRAM | 1024 bytes | 2048 bytes | 8 kBytes | 8 kBytes |
EEPROM | 512 bytes | 1024 bytes | 4 kBytes | 4 kBytes |
نکته ای که در جدول بالا باید به آن توجه کرد، این است که حاظه ی برنامه یا FLASH بسیار بیشتر از حافظه ی SRAM است. وقتی شما متغییر از جنس CHAR ایجاد می کنید. و برای مثال در داخل آن جمله ای را قرار می دهید:
char message[] = "I support the Cape Wind project.";
شما مقدار 33 بایت از حافظه را به این متغیر اختصاص داده اید. توجه داشته باشید که بایت NULL هم در آخر جمله قرار می گیرد. این مقدار حافظه در مقابل 1024 بایت حافظه ی SRAM چیزی نیست، ولی اگر شما برنامه ای با حجم بالا بنویسید. مثلا کار کردن با نمایشگرها و یا تبدیل ESP8266 به سرور که کدهای زیادی به صورت HTML و CSS و … را در متغیر ثابتی قرار می دهید. در آن زمان حافظه ی SRAM بسیار کوچک است.
راه حل این مشکل استفاده از PROGMEM است. در ورژن 1.0 نرم افزار آردوینو از دستور ()F برای نوشتن یک استرینگ در حافظه فلش استفاده می شود:
Serial.println(F("This string will be stored in flash memory"));
دیدگاه ها :