تدوينات مصغرةلغة سي و متحكمات

معرفة معلومات دقيقة عن استهلاك الذاكرة في المتحكمات من ملف map.

يحوي الملف map. المولّد من GCC-toolchain معظم المعلومات التفصيلية اللازمة لمعرفة استهلاك الذاكرة في المتحكمات. فالرموز symbols والتي تشمل التوابع والمتحولات مذكورة في هذا الملف إلى جانب عنوان الذاكرة وحجمها وفي أي قسم section من الذاكرة تقع.

نستطيع أن نجد في هذا الملف على سبيل المثال:

  •  memory configuration أو خريطة الذاكرة memory map
  • المنطقة المستهلكة من منطقة الذاكرة المعرّفة في linker script .ld مثلاً في الاقتباس التالي تعريف للقسم bss. يُعرّف السكربت linker script كيفيّة تنظيم وتقسيم الذاكرة ويمكن تعريف متحولات يمكن استخدامها في الكود مثل __bss_start__
يعني الكود السابق أن يضع الرّابط قيمة عدّاد البرامج Programme Counter PC في المتحول __bss_start__  ثم يضع المتحولات ليضع أخيراً قيمة العدّاد في المتحول __bss_end__ . سوف نجد ذلك في الملف map. ولكن سنجد العنوان مع المتحول.
  • حتى لو لم تطلب من الرّابط linker أن يضع قيمة عدّاد البرامج في رمز فإنه بالإمكان معرفة حجم منطقة من الذاكرة باعتبار أن الملف map. يقدم بالإضافة إلى حجم الرمز إلى أي منطقة ينتمي.

بناءً على النقط أعلاه وجدت أن الملف map. يحوي الكثير من المعلومات التي يمكن الاستفادة منها لذلك قمت بإنشاء سكربت بايثون يقوم بمسح الملف map. ويستخلص المعلومات المفيدة حول كميّة استهلاك الذاكرة. بدأت الفكرة معي عندما كنت أبحث عن أحجام التوابع باستخدام الأداة nm وشعرت حينها أن المعلومات الأكثر يمكن الحصول عليها في map.

إن السكربت يقوم بالبحث عن معلومات تتعلق بكمية استهلاك الذاكرة وعلى المستخدم تعديل الملف “map_settings.txt” المرفق كالتالي:

  • رابط المسار إلى الملف map
  • الأقسام التي لديها رمز بداية ونهاية واضحين مثل  __bss_start__
  • الأقسام التي ليس لها رمز بداية واضح، ولهذا يجب ذكر اسم القسم الذي يليها.
الاقتباس السابق من linker script . إن الرمز eh_frame يجعل السكربت البايثون يعلم مكان نهاية القسم rodata.

تشغيل السكربت

لتحميل السكربت من المستودع في Github.

ملاحظة: هناك أدوات تحليل أكثر قوّة مثل MapViewer و AMAP .

 

AD Space

Yahya Tawil

مهندس نظم مضمّنة مهتم بالعتاد مفتوح المصدر وولد في نفس العام الذي ولد فيه نظام تشغيل لينكس. يحيى هو مدير التحرير في عتاديات ويؤمن بأهمية المحتوى المكتوب المجاني والنوعي والعملي. خبرته في مجال النظم المضمّنة تتركز في كتابة البرامج المضمنة وتصميم الدارات المطبوعة والنظرية وإنشاء المحتوى.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

هذا الموقع يستخدم Akismet للحدّ من التعليقات المزعجة والغير مرغوبة. تعرّف على كيفية معالجة بيانات تعليقك.