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

تابع yield وصف Printable ومصفوفات التقابل : مزايا مهمة وغير معروفة في نواة الأردوينو

إن نواة الأردوينو Arduino core، وهي الملفات المصدرية لتوابع وصفوف classes الأردوينو، تملك بعض المزايا التي يمكن استخدامها بكفاءة. وعلى اعتبار أن التوثيق الرسمي للأردوينو لم يذكرها (على الأقل حتى وقت نشر هذه المدونة المصغّرة) فإن هذه المزايا ليست معروفة بشكل كبير لدى مطوري الأردوينو. دعونا نناقش كل ميزة على حدى.

Printable Class : كيف يمكن أن تجعل أي غرض object قابل للطبع

بدايةً، إن التوابع  print() وprintln() والمستخدمة في غرض object مثل Serial من الصف class HardwareSerial هي موروثة inherited من صف يسمى Print (بالواقع ليست كوراثة مباشرة وإنما وراثة عبر صف آخر يدعى stream والذي يرث بدوره الصف Print). لجعل هذين التابعين قابلين على طباعة أي غرض من صف جديد فإن الصف Print يرث صف آخر يدعى Printable والذي يتألف من تابع واحد ووحيد عام public method ويسمى printTo. هذا التابع من النوع virtual وبالتالي يمكن لأي صف جديد يرث هذا الصف أن يكون لديه تعريفه الخاص لهذا التابع. يمكن مراجعة مفهوم الوراثة والتوابع الافتراضية من دروس موقع GeeksforGeeks .

على الجانب الآخر، فإن الصف Print لديه نسخة محمّلة overloaded من التابعين print و println والتي تستخدم printTo.

كتجميع لكل ما سبق سنكتب مثال توضيحي لكيفية الاستفادة من هذه الميزة.

Printable class Arduino example

من المفيد أيضاً معرفة أن هذه الخدعة مستخدمة أيضاً في مكتبة  IPAddress.h من أجل طباعة العنوان وذلك في الملفIPAddress.cpp.

Yield Function: تابع يستمر بالتنفيذ عندما يكون الأردوينو في حالة انتظار

أثناء تصفح الملفات المصدريّة للأردوينو وجدت ملف باسم غريب يسمى hooks.c ويحوي أسطر قليلة جداً بداخلة.

من التعليقات التي في الملف، إن التابع الضعيف yield (أي الذي يمكن إعادة تعريفه في ملف مصدري آخر) يبدو مهيأ ليتم استخدامه في الجدولة scheduling. ولكن من أجل دارات الأردوينو المعتمدة على متحكمات AVR، فإن هذا التابع غير مستخدم سوى في مكان وحيد ضمن تابع delay في ملف wiring.c.

أحد الاستخدامات المفيدة لهذا التابع yield هي من خلال إعادة تعريفه في الكود الرئيسي بحيث يحتوي عمليات حساسة يجب على الأردوينو تنفيذها خلال عملية الانتظار delay أو حتى توصيف مجدول بسيط simple scheduler.

Mapping Arrays: مصفوفات مقابلة لأرجل الأردوينو مع نظيرها الفيزيائي في المتحكم

بسّط فريق الأردوينو الطريقة التي يتم النفاذ فيها على مسجلات وبوابات المتحكم من خلال تعريف مجموعة من المصفوفات في ذاكرة الفلاش (PROGMEM) لتخزين وبشكل دائم مصفوفات تقابل رقم الرجل حسب الأردوينو مع رقمها وعنوانها حسب المتحكم بشكل فيزيائي. هذه المصفوفات توجد في الملف pins_arduino.h.

إن الملف Arduino.h يعرف مجموعة من الماكرو للنفاذ إلى هذه المصفوفات في ذاكرة الفلاش عبر pgm_read_word.

و الآن، كل تابع على حاجة للتعامل مع هذه السجلات registers يمكن ببساطة أن يستدعي هذه الماكرو macros للنفاذ للمصفوفات. مثل: pinMode و digitalWrite و (سمّ التابع الخاص بك) و ….إلخ.

Yahya Tawil

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

اترك تعليقاً

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

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