الحقيقة الكاملة عن RTOS. المادة رقم 7. Nucleus SE: مقدمة



في الجزء المتبقي من سلسلة "الحقيقة الكاملة عن RTOS" ، سوف نفحص بالتفصيل كيفية تنفيذ ونشر نظام RTOS. للقيام بذلك ، سننظر في RTOS محددة: Nucleus SE. حتى إذا كنت لن تستخدم هذا النواة المعينة أو النواة الأخرى المتعلقة بها ، فإن فهم كيفية عملها سيوفر أساسًا جيدًا للعمل مع أي RTOS.

لفهم سبب تصميم Nucleus SE بهذه الطريقة ، من المهم تسليط الضوء على المهام والأهداف الأساسية التي اتبعتها في بداية هذا المشروع.

المقالات السابقة في السلسلة:
المادة رقم 6. خدمات RTOS الأخرى
المادة رقم 5. تفاعل المهام والمزامنة
المادة رقم 4. المهام وتبديل السياق والمقاطعات
المادة رقم 3. المهام والتخطيط
المادة رقم 2. RTOS: البنية ووضع الوقت الحقيقي
المادة رقم 1. RTOS: مقدمة.


البساطة

يجب أن يكون رمز Kernel بسيطًا ومباشرًا ومعلقًا جيدًا وموثقًا. تم تصميم Nucleus SE في المقام الأول للاستخدام التعليمي.

الحجم

يجب أن يكون هذا عبارة عن نواة صغيرة قابلة للتطوير بشكل جيد (نظرًا لأن الذاكرة ، وخاصة الذاكرة التشغيلية (RAM) ، قد تكون قليلة).

وظائف

يجب أن تتمتع النواة بمستوى عالٍ من الوظائف التي تدعم خدمات RTOS القياسية.

دعم 8/16 بت

يجب أن يدعم معماريات 8 و 16 بت: استخدم البيانات بحجم البايت قدر الإمكان ؛ لا ينبغي أن تتطلب هياكل البيانات أساليب معالجة غريبة ؛ لا ينبغي نسخ البيانات المستمرة إلى ذاكرة الوصول العشوائي دون داع.

المستقبل

يجب أن يكون هناك مسار تطوير من Nucleus SE إلى Nucleus RTOS. يجب أن يكون المستخدمون قادرين على نقل التعليمات البرمجية بسهولة بين النوى. والأهم من ذلك ، يجب أيضًا نقل معرفتهم. تنفذ Nucleus SE API بفعالية مجموعة فرعية من Nucleus RTOS API.

التكلفة

يجب أن يكون نموذج العمل جذابًا لجميع المستخدمين المحتملين: مطورو أجهزة 8/16 بت ، لأولئك الذين يستخدمون RTOS لأول مرة ، والذين يدرسون للتو التكنولوجيا نفسها. وبالتالي ، فإن Nucleus SE متاح مجانًا ومجاني تمامًا للاستخدام للأغراض التجارية والتعليمية ؛ يمكن استخدام الكود وتعديله.

الجمهور المستهدف Nucleus SE

نتيجة هذا النهج هي نواة يمكن أن تكون مفيدة لثلاثة أنواع من المطورين:

  • مبرمجو الأجهزة 8/16 بت الذين يحتاجون إلى نواة بسيطة أو برنامج جدولة المهام. يعد هذا جذابًا بشكل خاص إذا كان المطورون مهتمين باكتساب مهارات معينة لاستخدام RTOS أو عند تطوير نظام يستخدم أجهزة 32 بت أخرى حيث يمكن أن يكون Nucleus RTOS خيارًا جيدًا.
  • مطورو التطبيقات المضمنون الذين يستخدمون أجهزة 32 بت حيث تعقيد البرامج لا يستحق تكلفة نظام RTOS التجاري التقليدي. يمكن أن يكون استخدام Nucleus SE مفيدًا وسيسمح بالتطوير (حتى Nucleus RTOS) إذا زاد تعقيد التطبيق.
  • يمكن للطلاب في عملية التعلم استخدام Nucleus SE كقاعدة لتعلم RTOS. ستصبح المهارات المكتسبة مفيدة في وقت لاحق عندما يبدأون في العمل.

قرارات التصميم والمفاضلات

من أجل تحقيق الأهداف المذكورة أعلاه ، يجب اتخاذ العديد من قرارات التصميم المدروسة بعناية. سيتم وصف التفاصيل لاحقًا عندما نفكر في وظائف محددة ، ولكن هنا ملخص موجز للنقاط الرئيسية.

التكوين الثابت

Nucleus SE عبارة عن RTOS ثابت ، مما يعني أن جميع قرارات التكوين يتم اتخاذها في وقت الإنشاء ، وليس ديناميكيًا في وقت التشغيل. هذا له العديد من المزايا ، بما في ذلك تبسيط بنية البيانات وتقليل حجم التعليمات البرمجية ، لذلك ليست هناك حاجة لاستدعاء وظائف إنشاء وحذف API. بالنسبة لمعظم التطبيقات ، لا يلزم إنشاء كائن ديناميكي.

عدد الأشياء

عدد العناصر من كل نوع محدود في تطبيق يستند إلى Nucleus SE. يمكن أن يكون من واحد إلى ستة عشر مهمة ومن صفر إلى ستة عشر نوعًا مختلفًا من كائن kernel. هذا يبسط عنونة الكائنات (انظر أدناه). هذا التقييد ليس صعبًا بالنسبة للتطبيقات الصغيرة التي تهدف إليها النواة.

معالجة الكائنات

تتم معالجة الكائنات باستخدام "فهرس" ، يمكن أن يتراوح من صفر إلى خمسة عشر. بالمقارنة مع الاستخدام المعتاد للمؤشرات ، يمكن أن يكون هذا أكثر كفاءة في المعالجات الأصغر ويسمح بذاكرة أقل: يتطلب الفهرس 4 بتات فقط من الذاكرة ؛ العنوان هو 16-32 بت.

مخطط

ينتمي المجدول إلى منطقة بنية kernel التي تم تبسيطها. بدلاً من توفير آلية مرنة مع سياسات جدولة مختلفة ، تتوفر أربعة أنواع جدولة منفصلة في النواة ؛ يتم تحديد المجدول المحدد للتطبيق أثناء التكوين.

وظائف محدودة

لا يتم تنفيذ بعض الميزات المتوفرة في Nucleus RTOS في Nucleus SE. في بعض الحالات ، يتم ذلك من أجل البساطة. في حالات أخرى ، يؤدي الفقدان الطفيف للوظائف في إحدى المناطق إلى تسهيل تنفيذ الوظائف الأخرى. يتم تسليط الضوء على أوجه عدم التوافق هذه في المقالات ذات الصلة في السلسلة.

استخدام الذاكرة

نظرًا لأن Nucleus SE يجب أن يدعم تطبيقات الذاكرة المحدودة ، فقد تم إيلاء اهتمام خاص لاستخدام الذاكرة. كان من المفترض استخدام ROM وذاكرة الوصول العشوائي "الكلاسيكية": تم استخدام ROM للتعليمات البرمجية والبيانات المستمرة ؛ ذاكرة الوصول العشوائي - لتخزين المتغيرات ، المكدس ، وما إلى ذلك. على الرغم من أن الهدف المحدد قد يكون له مخطط مختلف ، فإن رمز Nucleus SE مرن للغاية ؛ تُستخدم تعريفات (# تعريفات) ROM وذاكرة الوصول العشوائي (RAM) لبادئة جميع هياكل المتغيرات والبيانات للإشارة إلى موقعها. يمكن تحقيق ذلك باستخدام الأدوات.

كان المطلب الرئيسي هو تجنب النسخ غير الضروري للبيانات من ROM إلى ذاكرة الوصول العشوائي ، لأن ذاكرة الوصول العشوائي قد لا تكون كافية. يتم وصف الآلية التي يتم من خلالها تحقيق ذلك في قسم هياكل البيانات في المقالة التالية.

تنفيذ API

يتم تنفيذ واجهة برمجة التطبيقات لـ Nucleus SE بالطريقة التقليدية: تقوم وظيفة لغة C بتنفيذ كل استدعاء API. يتم تجميع هذه المكالمات منطقيا. على الرغم من أن مكالمات API في Nucleus SE ليست هي نفسها تمامًا كما هو الحال في Nucleus RTOS ، تتم محاكاة الوظائف العامة بشكل كامل ، كما أن التعيين بين واجهات برمجة التطبيقات سهل. سيتم تضمين تفاصيل واجهة برمجة تطبيقات Nucleus RTOS.

أقسام حرجة

يتضمن رمز العديد من استدعاءات وظائف API تسلسلات من التعليمات التي تعالج بيانات kernel. بشكل عام ، قد تكون البيانات في حالة غير صالحة أثناء تنفيذ هذه التعليمات ، لذلك يجب توخي الحذر لتجنب الانقطاع. أو قد يُمنع تشغيل التعليمات البرمجية من مهمة أخرى أو معالج المقاطعة إذا كان بإمكانه الوصول إلى هذه البيانات (غير الصالحة حاليًا). تسمى تسلسلات التعليمات هذه الأقسام الحرجة.

يتم تعريف زوج من وحدات الماكرو يسمى NUSE_CS_Enter () و NUSE_CS_Exit (). تستخدم جميع رموز وظائف Nucleus SE API لتوسيع القسم الحرج ، وبالتالي:

NUSE_CS_Enter () ،
<رمز غير قابل للمقاطعة>
NUSE_CS_Exit () ،

عادةً ، سيتم توسيع وحدات الماكرو هذه إلى تعليمات تعطيل تعليمات المقاطعة وإرشادات تمكين المقاطعة على التوالي. يجب التحقق من ذلك إذا تم تنفيذ Nucleus SE على بنية معالج مختلفة. سيتم وصف المزيد من المعلومات حول ترقية Nucleus SE في المقالة التالية.

قابلية التوسع

مثل جميع أجهزة RTOS الحديثة ، فإن Nucleus SE قابلة للتطوير. للتأكد من تضمين مكونات RTOS المستخدمة فقط ، يتم تقديم جميع وظائف واجهة برمجة التطبيقات في شكل مكتبة. وهكذا ، أثناء الربط ، يتم استخراج الوظائف المشار إليها وتضمينها في الصورة النهائية للتطبيق. يستخدم Nucleus RTOS هذا النهج لكل من النواة وجميع مكونات نظام التشغيل الأخرى. تستخدم Nucleus SE تقنية مختلفة.

بدلاً من الاعتماد على المكتبة في صندوق الأدوات المحدد ، تحتوي جميع ملفات المصدر في توزيع Nucleus SE على توجيهات ترجمة شرطية. لتهيئة Nucleus SE للبرنامج ، يحتاج المطور إلى تثبيت العديد من الأحرف #define (المزيد عن هذا في المقالة التالية). يحدد هذا وظائف API التي يتم تجميعها وبالتالي يتم تضمينها في البرنامج.

يعزز Nucleus SE هذا النهج من خلال تقديم كائن أسميه "قابلية التوسع القصوى". يمكن تشغيل وإيقاف العديد من جوانب وظائف kernel ، أو تكوينها بطرق أخرى باستخدام أحرف #define متشابهة. وبالتالي ، المطور لديه تحكم نقطة في استخدام الذاكرة.

أي API؟

يحتوي Nucleus SE على واجهة برمجة تطبيقات خاصة به ، والتي سيتم وصفها بالتفصيل في المقالات المستقبلية. بالنسبة للعديد من المستخدمين ، يكفي تضمين هذه المكالمات لوظائف API في الرمز.

قد يفضل بعض المستخدمين استخدام واجهة برمجة تطبيقات مختلفة: إما قياسية أو واحدة مألوفة لديهم. واجهة برمجة تطبيقات Nucleus SE مرنة للغاية وتسمح لك بإنشاء غلاف يحول واجهة إلى واجهة برمجة تطبيقات أخرى.

أحد الأهداف الرئيسية لتطوير Nucleus SE هو درجة عالية من التوافق على مستوى المستخدم مع Nucleus RTOS. على الرغم من اختلاف واجهات برمجة التطبيقات ، فقد تم تصميمها لتكون سهلة المطابقة. سيكون الغلاف متاحًا لتسهيل استخدام واجهة برمجة تطبيقات Nucleus RTOS على Nucleus SE.

في المقالة التالية ، سنستمر في مراجعة Nucleus SE والتركيز على الهيكل الداخلي ونشر نظام RTOS.

Source: https://habr.com/ru/post/ar418601/


All Articles