الذاكرة في الاردوينو | Memory of ARDUINO


هذا الشرح لا يشمل لوح الاردوينو (Due) لان له تصميم مختلف.

في البداية هنالك ثلاث انواع من الذاكر في المتحكمات الدقيقة المستخدمة في الواح الاردوينو الأساسية (avr-based Arduino boards).






1| ذاكرة تخزين البرنامج (Flash Memory) وهي المكان الذي يخزن فيه السكيتش .
2| الذاكرة الوصول العشوائية SRAM (Static Random Access Memory) وهي مكان صنع السكيتش ومعالجة المتغيرات اثناء العمل.
3| الذاكرة الجانبية EEPROM (Electrically Erasable Programmable Read-Only Memoryهي المكان الذي تخزن فيه المعلومات على المدى الطويل.

النوع الأول ذاكرة تخزين البرنامج (Flash memory) و النوع الثالث الذاكرة الجانبة(EEPROM) هي من النوع الغير متطاير(تبقى ثابتة)(non-volatile) بمعني ان المعلومات المخزنة تبقى محفوظه بعد إطفاء الجهاز. اما النوع الثاني في القائمة أعلاه وهو ذاكرة الوصول العشوائية (SRAM) هي من النوع المتطاير (غير الثابت) التي تفقد بعد إطفاء الجهاز.






الرقاقة ATmega328 المثبته على لوح الاردوينو Uno تتضمن على القدر التالي من الذاكرة:
Flash  32k bytes (of which .5k is used for the bootloader)
SRAM   2k bytes
EEPROM 1k byte

الرقاقة ATmega2560المثبته في لوح الاردوينو Mega2560 تتضمن مساحه تخزين اكبر كما موضح ادناه:
Flash  256k bytes (of which 8k is used for the bootloader)
SRAM   8k bytes
EEPROM 4k byte

ملاحظة عدم توفر ذاكرة وصول عشوائية في لوح من النوع Uno.مع ذلك من السهل استخدامه من خلال وجود السترينج في السكيتش على سبيل المثال:

char message[] = "I support the ARDUINO I R A Q ";
يضع 33 بايت في ذاكرة الوصول العشوائية (لكل عنصر بايت واحد، إضافة الى الترمنيتر '\0'
لا يبدو هذا بكثير لكنه لا يأخذ الكثير ليصل الى 2048 وخصوصا اذا كان لديل الكثير من النصوص لأرسالها الى شاشه عرض او جداول بحث كبيره. 
إذا استنزفت الذاكرة العشوائية SRAM فبرنامج يكون معرض للفشل الغير متوقع حيث  يظهر لك انه تم رفع البرنامج بنجاح لكنه لا يعمل او لا يعمل بالشكل الصحيح. إذا حصل هذا عليك بتقليل او تقصير السترينج او تقليل بنيه أي معلومات أخرى في السكيتش (من دون تغيير الكود البرمجي).
بعد ذلك إذا عمل البرنامج بشكل صحيح إذاً كنت قد استنفذت الذاكرة العشوائية في السابق وقمت بمعالجتها الان.
هنالك بعض الأمور التي يمكنك عملها لتتغلب على هذه المشكلة.
   إذا كان سكيتشك متواصل مع برنامج يشتغل على حاسوب (مكتبي او محمول) يمكنك محاول نقل البيانات والحسابات الى الحاسوب وبذلك تقليل الحمل عن لوح الاردوينو.
إذا كان لديك جداول بحث او مصفوفات كبيرة الحجم، استخدم نوع البيانات الصغيرة الضرورية لخزن القيم التي تحتاجها: كمثال (Int تأخذ اثنان بايت بينماbyte تأخذ واحد فقط (محصورة فقط على قيم قليله).
إذا كنت لا تحتاج الي تعديل البيانات عند عمل السكيتش بأمكانك تخزينها في ذاكرة البرنامج (فلاش ميموري) بدلاً عن الذاكرة العشوائية (SRAM) ولعمل ذلك استخدم PROGMEM.
المصادر:arduino iraq-image sorce



حجم الخط
+
16
-
تباعد السطور
+
2
-