السبت، 18 يوليو 2015

الذاكرة في الاردوينو | 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.

هناك 11 تعليقًا:

  1. شكرا على هذه المعلومات القيمة

    ردحذف
  2. شكرا جزيلا على هذه المعلومات

    ردحذف
  3. شكرا جزيلا على هذه المعلومات

    ردحذف
  4. كيف يمكن مسح الاكواد القديمة من ذاكرة الاردوينو حين تكون ممتلئة

    ردحذف
  5. كيف يمكن تصفير الذاكرة أو مسح الأكواد القديمة

    ردحذف
    الردود
    1. اخي العزيز : بعد التحية
      ما الفائدة من مسح الشفرات لبرمجية(الكود)؟ لانك بكل مرة تُحمل فيها برنامج الى لوح الاردوينو سيتم مسح البرنامج الاقدم وافساح كام الذاكرة لبرنامج الجديد وهكذا.

      حذف
  6. شكرا لكل المعلومات القيمه انا جديد بعالم الاوردوينو

    ردحذف

  7. الشيفرة البرمجية تستخدم 1460 بايت (0%) من مساحة البرنامج. أقصى حد 253952 بايت.
    المتغيرات العامة تستخدم 9 بايت من (0%) الذاكرة المتغيرة، تبقى 8183 بايت للمتغيرات الداخلية. القيمة القصوى 8192 بايت.
    ما معنى هذه الرسالة في برنامج الاردوينو وشكرا

    ردحذف