“تتطلب التقنيات سريعة التطور دعم البرامج (برامج تشغيل البرامج الثابتة ونماذج التعليمات البرمجية) لتبسيط عملية استيراد التصميم. توضح هذه المقالة كيفية استخدام برامج تشغيل بدون نظام تشغيل (لا يوجد نظام تشغيل) وبرامج تشغيل النظام الأساسي لإنشاء البرامج الثابتة للتطبيق لمحولات الأجهزة التناظرية الدقيقة والمحولات الرقمية إلى التناظرية التي توفر السرعة والطاقة والحجم والدقة أداء عالي المستوى.
“
بقلم: ماهيش فالك ، مهندس برمجيات أول ، الأجهزة التناظرية
تتطلب التقنيات سريعة التطور دعم البرامج (برامج تشغيل البرامج الثابتة ونماذج التعليمات البرمجية) لتبسيط عملية استيراد التصميم. توضح هذه المقالة كيفية استخدام برامج تشغيل بدون نظام تشغيل (لا يوجد نظام تشغيل) وبرامج تشغيل النظام الأساسي لإنشاء البرامج الثابتة للتطبيق لمحولات الأجهزة التناظرية الدقيقة والمحولات الرقمية إلى التناظرية التي توفر السرعة والطاقة والحجم والدقة أداء عالي المستوى.
توفر الأجهزة التناظرية أمثلة على البرامج الثابتة المضمنة بناءً على برامج تشغيل بدون نظام تشغيل لدعم محولات الدقة. يعد برنامج التشغيل no-OS مسؤولاً عن تكوين الجهاز ، والحصول على بيانات المحول ، وإجراء المعايرة ، وما إلى ذلك ، بينما يسهل مثال البرنامج الثابت المستند إلى برنامج التشغيل الذي لا يعمل بنظام التشغيل نقل البيانات إلى المضيف للعرض والتخزين والمعالجة الإضافية.
مقدمة إلى برامج التشغيل التي لا تعمل بنظام التشغيل والنظام الأساسي
كما يوحي الاسم ، تم تصميم برامج التشغيل بدون نظام تشغيل للعمل مع نظام تشغيل عام (أو بدون نظام تشغيل محدد). يعني الاسم أيضًا أنه يمكن استخدام برامج التشغيل هذه على أنظمة BareMetal دون أي دعم لنظام التشغيل. تم تصميم برنامج التشغيل no-OS لتوفير واجهة برمجة تطبيقات عالية المستوى للوصول إلى الواجهة الرقمية لمحول دقيق معين. يستخدم برنامج التشغيل no-OS واجهات API هذه للجهاز للوصول إلى البيانات وتكوينها وقراءتها وكتابتها دون معرفة عناوين التسجيل (خريطة الذاكرة) ومحتوياتها.
يستفيد برنامج التشغيل no-OS من طبقة برنامج تشغيل النظام الأساسي لدعم تعدد إرسال نفس برنامج التشغيل بدون نظام تشغيل عبر العديد من الأنظمة الأساسية للأجهزة / البرامج ، مما يجعل البرامج الثابتة محمولة بشكل كبير. يؤدي استخدام طبقة برنامج تشغيل النظام الأساسي إلى عزل برامج التشغيل التي لا تعمل بنظام التشغيل ، والتي لا تحتاج إلى أن تكون على دراية بالواجهات الخاصة بالمنصة (مثل SPI ، I2C ، GPIO ، وما إلى ذلك) ، لذلك يمكن إعادة استخدام برنامج التشغيل بدون نظام تشغيل عبر منصات متعددة دون تعديل.
الشكل 1. مكدس البرامج الثابتة للمحول الدقيق
استخدم برنامج تشغيل لا يعمل بنظام التشغيل
يوضح الشكل 2 بنية الكود النموذجية لبرنامج تشغيل بدون نظام تشغيل.
الشكل 2. هيكل رمز برنامج التشغيل بدون نظام تشغيل
الشكل 3. تعداد تكوين الجهاز والهيكل وواجهة برمجة التطبيقات
عادةً ما يتم تضمين رمز برنامج التشغيل no-OS للمحولات الدقيقة في ملفين مصدر مكتوبين بلغة البرمجة C: adxxxx.c و adxxxx.h ، حيث يمثل xxxx اسم الجهاز (مثل AD7606 و AD7124 وما إلى ذلك). يحتوي ملف رأس الجهاز (adxxxx.h) على واجهات البرمجة الشائعة للهياكل الخاصة بالجهاز ، والتعداد ، وعناوين التسجيل ، وأقنعة البت ، والتي يمكن استخدامها من خلال تضمين هذا الملف في ملفات المصدر المطلوبة. يحتوي ملف مصدر الجهاز (adxxxx.c) على تطبيقات للواجهات لتهيئة الجهاز وإزالته ، وقراءة / كتابة سجلات الجهاز ، وقراءة البيانات من الجهاز ، والحصول على / تعيين المعلمات الخاصة بالجهاز ، والمزيد.
تم بناء برنامج تشغيل نموذجي لا يعمل بنظام التشغيل حول مجموعة مشتركة من الوظائف:
عناوين التسجيل الخاصة بالجهاز ، ووحدات ماكرو قناع البت ، وتعدادات تكوين الجهاز ، وإعلانات الهياكل لقراءة / كتابة المعلمات الخاصة بالجهاز مثل زيادة العينات ، والكسب ، والجهد المرجعي ، إلخ.
► تهيئة الجهاز المادي / إلغاء تهيئة الجهاز من خلال وظائف تهيئة / إزالة الجهاز لبرنامج التشغيل بدون نظام تشغيل والتهيئة الخاصة بالجهاز وهياكل برنامج التشغيل والوصفات.
► استخدم وظائف القراءة / الكتابة في تسجيل الجهاز للوصول إلى خريطة ذاكرة الجهاز أو تفاصيل التسجيل ، مثل adxxxx_read_register () أو adxxxx_write_register ().
يستخدم رمز برنامج التشغيل no-OS
استخدم عناوين وأقنعة نقطية ومعلمات خاصة بالجهاز لتكوين التعداد والبنى:
كما ذكرنا سابقًا ، يحتوي ملف الرأس adxxxx.h على إعلانات لجميع التعدادات والهياكل الخاصة بالجهاز التي يتم تمريرها إلى وظائف خاصة بالجهاز أو واجهات برمجة التطبيقات لتكوين معلمات الجهاز أو الوصول إليها. يظهر الوضع المحدد في الشكل 3.
تسمح بنية adxxxx_config الموضحة في الشكل 3 للمستخدم بتحديد قناة مُضاعِف إرسال وتعيين معدل زيادة العينات لها. أعضاء هذه البنية (afe_mux_channel و overampling) عبارة عن تعدادات موجودة في نفس ملف الرأس وتحتوي على ثوابت رقمية لجميع القيم الممكنة لهذين الحقلين ، يمكن تحديدها بواسطة المستخدم.
تحصل الوظيفة adxxxx_set_adc_config () المحددة في ملف adxxxx.c على التكوين / المعلمات التي تم تمريرها من قبل المستخدم من خلال بنية التكوين ، وتستدعي أيضًا وظيفة adxxxx_spi_reg_write () لكتابة البيانات في سجل الجهاز ADXXXX_REG_CONFIG من خلال الواجهة الرقمية (SPI في المثال أعلاه).
قم بتهيئة الجهاز باستخدام بنية برنامج التشغيل no-OS ووظيفة التهيئة:
الشكل 4. إعلان عن تهيئة الجهاز وهيكل برنامج التشغيل
بالإضافة إلى تعداد تكوين الجهاز وهيكله ، يوفر برنامج التشغيل no-OS الهيكلين التاليين:
► هيكل تهيئة الجهاز.
► هيكل برنامج تشغيل الجهاز.
تسمح بنية تهيئة الجهاز للمستخدم بتحديد المعلمات والتكوينات الخاصة بالجهاز في كود تطبيق المستخدم. تحتوي بنية التهيئة على هياكل معلمات أخرى خاصة بالجهاز وأعضاء في التعداد. يوضح الشكل 5 تعريف بنية تهيئة الجهاز.
تقوم بنية برنامج تشغيل الجهاز بتحميل معلمات تهيئة الجهاز من خلال وظيفة تهيئة الجهاز adxxxx_init (). تخصص بنية برنامج تشغيل الجهاز الذاكرة من مساحة الكومة في وقت التشغيل (ديناميكيًا). المعلمات المعلنة في هيكل برنامج تشغيل الجهاز وهيكل تهيئة الجهاز متطابقة تقريبًا. هيكل برنامج تشغيل الجهاز هو إصدار وقت التشغيل لهيكل تهيئة الجهاز.
تصف الخطوات التالية وظيفة نموذجية لتهيئة الجهاز وتدفق التهيئة:
► الخطوة 1: قم بإنشاء تعريف (أو مثيل) لهيكل تهيئة الجهاز (على سبيل المثال ، هيكل adxxxx_init_params) في التطبيق لتهيئة معلمات الجهاز الخاصة بالمستخدم ومعلمات برنامج التشغيل المعتمدة على النظام الأساسي. يتم تحديد المعلمات أثناء التجميع.
ملاحظة: تختلف المعلمات المحددة في هيكل التهيئة من جهاز لآخر.
الخطوة 2: قم بإنشاء مثيل مؤشر (متغير) لهيكل برنامج تشغيل الجهاز في كود التطبيق.
يحتاج تطبيق المستخدم إلى إنشاء مثيل مؤشر واحد لهيكل برنامج تشغيل الجهاز. قم بتمرير هذا المثيل إلى جميع واجهات برمجة التطبيقات / وظائف برامج التشغيل التي لا تعمل بنظام التشغيل للوصول إلى المعلمات المحددة للجهاز. يشير مثيل المؤشر المحدد في رمز التطبيق إلى الذاكرة المخصصة ديناميكيًا في الكومة ، والتي تتم من خلال وظائف تهيئة الجهاز مثل adxxxx_init () المحددة في برنامج التشغيل no-OS.
► الخطوة 3: اتصل بوظيفة تهيئة الجهاز لتهيئة الجهاز والأجهزة الطرفية الأخرى الخاصة بالمنصة.
تعمل الوظيفة adxxxx_init () المحددة في برنامج التشغيل no-OS على تهيئة الجهاز باستخدام معلمات خاصة بالمستخدم تم تمريرها في بنية adxxx_init_param. يتم تمرير مثيل مؤشر لهيكل برنامج تشغيل الجهاز ومثيل لهيكل تهيئة الجهاز كمعلمتين إلى وظيفة التهيئة هذه. يمكن لرمز تطبيق المستخدم استدعاء وظيفة adxxxx_init () عدة مرات ، طالما يتم استدعاء وظيفة التهيئة ثم يتم استدعاء وظيفة إزالة الجهاز لتحقيق التوازن.
يوضح الشكل 6 الوصول إلى خريطة الذاكرة (تسجيل المحتويات) من خلال وظائف القراءة / الكتابة في سجل الجهاز
يمكن للمستخدم الوصول إلى محتويات تسجيل الجهاز (على سبيل المثال ، معرّف المنتج ، وقيمة scratchpad ، و OSR ، وما إلى ذلك) من خلال وظائف adxxx_read / write () الخاصة بجهاز التشغيل بدون نظام تشغيل.
في معظم الحالات ، لن يستخدم المستخدمون وظائف الوصول إلى التسجيل مباشرة. يتم استدعاء الوظائف الخاصة بالجهاز من خلال وظائف الوصول إلى السجل مثل adxxxx_spi_reg_read / write (). عندما يكون ذلك ممكنًا ، يوصى باستخدام تكوين الجهاز وواجهات برمجة تطبيقات الحالة للوصول إلى خريطة ذاكرة الجهاز بدلاً من وظائف الوصول المباشر إلى السجل ، حيث يضمن ذلك أن يتم الاحتفاظ بهيكل برنامج تشغيل الجهاز متزامنًا مع التكوين في الجهاز.
سائق منصة
برنامج تشغيل النظام الأساسي هو إحدى طبقات تجريد الأجهزة (HAL) التي تغلف واجهات برمجة التطبيقات الخاصة بالنظام الأساسي. يتم استدعاؤها بواسطة برامج تشغيل الأجهزة التي لا تعمل بنظام التشغيل أو رمز تطبيق المستخدم ، مما يسمح للأخير أن يكون مستقلاً عن النظام الأساسي للأجهزة والبرامج. تقوم برامج تشغيل النظام الأساسي بلف وظائف الأجهزة منخفضة المستوى الخاصة بالمنصة مثل SPI / I2التهيئة والقراءة / الكتابة ، تهيئة GPIO والقراءة / الكتابة ، تهيئة UART والاستقبال / الإرسال ، التأخيرات الخاصة بالمستخدم ، المقاطعات ، إلخ.
الشكل 5. تعريف هيكل بدء الجهاز في تطبيق المستخدم
الشكل 6. الوصول إلى محتويات السجل
يظهر هيكل الملف النموذجي لوحدة برنامج تشغيل النظام الأساسي SPI في الشكل 7.
استخدم برامج تشغيل النظام الأساسي
عادةً ما يتم تضمين رمز برنامج تشغيل النظام الأساسي في ثلاثة ملفات مصدر مكتوبة بلغة البرمجة C / C ++.
1) spi.h: هذا ملف مستقل عن النظام الأساسي يحتوي على هياكل الجهاز والتعدادات المطلوبة لوظيفة SPI. لا تحتوي واجهة برمجة لغة C المحددة في ملف الرأس هذا على تبعيات للنظام الأساسي.
جميع المعلمات المعلنة في التهيئة وهيكل الجهاز مشتركة في واجهة SPI على أي نظام أساسي.
تسمح المعلمات الإضافية * الفارغة المستخدمة في هيكل تهيئة الجهاز للمستخدم بتمرير معلمات إضافية ، والتي يمكن أن تكون خاصة بالنظام الأساسي.
المعلمات المعلنة في هيكل محرك SPI وهيكل تهيئة SPI متطابقة تقريبًا. هيكل برنامج تشغيل SPI هو إصدار وقت التشغيل لهيكل تهيئة SPI.
2) spi.cpp / .c: يحتوي هذا الملف على تطبيقات للوظائف المعلنة في ملف spi.h لتهيئة ملحقات SPI الخاصة بالمنصة وقراءة / كتابة البيانات. يشير مصطلح “النظام الأساسي” بالمعنى الواسع إلى مجموعة أجهزة التحكم الدقيقة (الجهاز المستهدف) والبرامج (مثل RTOS أو Mbed-OS). هذا الملف يعتمد على النظام الأساسي ويحتاج إلى تعديل عند النقل إلى أنظمة أساسية أخرى.
يوضح الشكل 9 تفاصيل واجهات SPI لمنصة Mbed ويوضح كيفية استخدام هذه الواجهات وهياكل تهيئة / برنامج تشغيل الجهاز لتهيئة SPI وقراءة / كتابة البيانات.
الشكل 7. هيكل كود برنامج تشغيل منصة SPI
الشكل 8. تهيئة SPI وهيكل السائق
الشكل 9. SPI API أو الوظيفة ملاحظة: رموز spi_init () المضافة و spi_write_and_read () هي رموز مختصرة ،
تم حذف التفاصيل من أجل التوضيح.
الشكل 10. SPI التهيئة الإضافية وهيكل السائق
3) spi_extra.h: يحتوي هذا الملف على هياكل أو تعدادات إضافية للأجهزة خاصة بمنصة معينة. يسمح لكود تطبيق المستخدم بتوفير التكوين غير المغطى في ملف spi.h العام. على سبيل المثال ، قد تختلف دبابيس SPI حسب النظام الأساسي وبالتالي يمكن إضافتها كجزء من هذه الهياكل الإضافية الخاصة بالمنصة.
برامج تشغيل منصة النقل
يمكن نقل برامج تشغيل النظام الأساسي من نظام أساسي (متحكم دقيق) إلى آخر ؛ من أجل النقل ، عادةً ما يتم إنشاء ملفات .cpp / .c و _extra.h الخاصة بالمنصة. توجد برامج تشغيل النظام الأساسي في طبقة فوق طبقة تجريد الأجهزة الخاصة بالجهاز (HAL) التي يوفرها مورد وحدة التحكم الدقيقة. لذلك ، من أجل نقل برنامج تشغيل النظام الأساسي من نظام أساسي إلى آخر ، يتطلب رمز برنامج تشغيل النظام الأساسي المتعلق بوظائف الاستدعاء أو واجهات برمجة التطبيقات الموجودة في HAL المقدم من البائع بعض التغييرات الطفيفة.
يفرق الشكل 12 بين برنامج تشغيل منصة SPI القائم على Mbed وبرنامج تشغيل النظام الأساسي ADuCM410 SPI.
تتوفر روابط لشفرة مصدر GitHub لمستودع ADI no-OS وبرامج تشغيل النظام الأساسي على صفحات Wiki و GitHub للأجهزة التناظرية.
المساهمة في برنامج التشغيل no-OS
برنامج التشغيل ADI no-OS مفتوح المصدر ويتم استضافته على GitHub. لا يدعم برنامج التشغيل محولات الدقة فحسب ، بل يدعم أيضًا العديد من منتجات ADI الأخرى مثل مقاييس التسارع وأجهزة الإرسال والاستقبال والإلكترونيات الضوئية والمزيد. يمكن لأي شخص مطلع على الكود المصدري المساهمة في برامج التشغيل هذه عن طريق إرسال التغييرات وإنشاء طلبات سحب لمراجعة هذه التغييرات.
هناك العديد من الأمثلة على المشاريع التي يمكن تشغيلها في بيئة Linux و / أو Windows. تم تطوير العديد من الأمثلة على المشاريع بلغة وصف الأجهزة (HDL) لاستخدامها في Xilinx®، شركة انتل®إنه يعمل على FPGAs التي طورتها شركات أخرى بالإضافة إلى المعالجات المستهدفة التي طورها بائعون مختلفون.
للحصول على برامج تشغيل بدون نظام تشغيل (مكتوبة بلغة C) للأنظمة التي لا تحتوي على نظام تشغيل ، قم بزيارة مستودع GitHub للأجهزة التناظرية.
توفر صفحة ويكي الأجهزة التناظرية أمثلة تم تطويرها للمحولات الدقيقة باستخدام الأنظمة الأساسية Mbed و ADuCMxxx.
الشكل 11. تنفيذ تهيئة SPI الخاصة بمنصة Mbed
الشكل 12. الاختلافات بين محركات المنصة
نبذة عن الكاتب
ماهيش فالك هو مهندس برمجيات أول في مجموعة برامج تكنولوجيا المحولات الدقيقة في الأجهزة التناظرية في بنغالور ، الهند. تخرج من جامعة الشلال عام 2011 بدرجة البكالوريوس في الهندسة الكهربائية. معلومات الاتصال:[email protected].