الحقيقة كاملة حول RTOS. المادة رقم 27. وقت النظام

تم تقديم مفهوم الوقت في سياق RTOS في إحدى المقالات السابقة ، إلى جانب فكرة الوظائف ذات الصلة بالوقت المتوفرة في RTOS.



المقالات السابقة في السلسلة:
المادة رقم 26. القنوات: الخدمات المساعدة وهياكل البيانات
المادة رقم 25. قنوات البيانات: مقدمة والخدمات الأساسية
المادة رقم 24. قوائم الانتظار: الخدمات المساعدة وهياكل البيانات
المادة رقم 23. قوائم الانتظار: مقدمة والخدمات الأساسية
المادة رقم 22. صناديق البريد: الخدمات المساعدة وهياكل البيانات
المادة رقم 21 صناديق البريد: مقدمة والخدمات الأساسية
المادة رقم 20. Semaphores: الخدمات المساعدة وهياكل البيانات
المادة رقم 19. الإشارات: مقدمة والخدمات الأساسية
المادة رقم 18. مجموعات علم الحدث: خدمات المساعدة وهياكل البيانات
المادة رقم 17. مجموعات علم الحدث: مقدمة والخدمات الأساسية
المادة رقم 16. إشارات
المادة رقم 15. أقسام الذاكرة: الخدمات وهياكل البيانات
المادة رقم 14. أقسام الذاكرة: مقدمة والخدمات الأساسية
المادة رقم 13. بنيات بيانات المهمة ومكالمات API غير المدعومة
المادة رقم 12. خدمات للعمل مع المهام
المادة رقم 11. المهام: التكوين ومقدمة ل API
المادة رقم 10. المجدول: ميزات متقدمة والحفاظ على السياق
المادة رقم 9. المجدول: التنفيذ
المادة رقم 8. نواة SE: التصميم الداخلي والنشر
المادة رقم 7. نواة SE: مقدمة
المادة رقم 6. خدمات RTOS الأخرى
المادة رقم 5. مهمة التفاعل والتزامن
المادة رقم 4. المهام ، تبديل السياق ، و المقاطعات
المادة رقم 3. المهام والتخطيط
المادة رقم 2. RTOS: هيكل ووضع في الوقت الحقيقي
المادة رقم 1. RTOS: مقدمة.

وضع علامة الموقت


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

الموقت المقاطعة معالجة


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

وظائف متعلقة بالوقت


يحتوي Nucleus RTOS و Nucleus SE على عدة آليات متعلقة بالوقت:

  • ساعة تحديد النظام (ساعة تحديد الوقت) : عداد بسيط يتم زيادته باستخدام معالج مقاطعة مؤقت. يحتوي كل من Nucleus RTOS و Nucleus SE على عداد 32 بت ، وتتمتع المهام بآليات لقراءة قيمته وكتابتها. في Nucleus SE ، يكون توقيت الساعة اختياريًا.
  • مؤقتات التطبيق : يدعم كل من Nucleus RTOS و Nucleus SE كائنات مؤقت. ستتم مناقشة استخدامها وتطبيقها في Nucleus SE بمزيد من التفاصيل في المقالة التالية.
  • جدولة شريحة الوقت : في Nucleus RTOS ، يتم تقديم المهام التي لها نفس الأولوية باستخدام خوارزمية Round-robin ، لكن يمكنك أيضًا استخدام تشريح الوقت. في Nucleus SE ، يكون برنامج جدولة تقطيع الوقت اختياريًا ؛ وقد نوقش هذا بالتفصيل في المقالات السابقة ( عرض عام لجدولة TS (شريحة الوقت) و TS في Nucleus SE ).
  • تعليق مهمة (نوم المهمة) : يمكن للمهمة أن تتوقف مؤقتًا ("تغفو") لفترة زمنية محددة. لقد سبق وصف هذه الآلية بالتفصيل سابقًا .
  • مهلات استدعاء API : في كل من Nucleus RTOS و Nucleus SE ، تسمح لك بعض مكالمات API بإيقاف مهمة أثناء انتظار توفر مورد. قد يكون التوقف مؤقتًا غير محدد ، أو في حالة Nucleus RTOS ، قد تتم الإشارة إلى فترة مهلة اختيارية (فترة انتظار). Nucleus SE لا يدعم مهلات استدعاء API.

دقة


والآن يجدر الحديث باختصار عن دقة مؤقت النظام.

تعتمد دقة وظائف الوقت بشكل مباشر على تردد مولد الساعة. على سبيل المثال ، إذا وصلت نبضات كل 10 ميلي ثانية ، وكانت مهمة التطبيق تحتاج إلى تأخير قدره 100 ميلي ثانية ، فمن الواضح أنها تحتاج إلى 10 نبضات. ومع ذلك ، لا يُعرف متى تم تلقي الدافع السابق: فقد كان من الممكن أن يحدث قبل حوالي 10 ميلي ثانية تقريبًا. لذلك ، يمكن أن يستغرق تأخير 100 ميلي ثانية ما يصل إلى 110 ميلي ثانية.

طريقة واضحة لحل هذه المشكلة هي زيادة وتيرة المولد. إذا اتبعت النبضات بفواصل زمنية تبلغ 1 مللي ثانية ، فلن يستغرق تأخير 100 مللي ثانية أكثر من مائة وواحدة ثانية. عيب هذا الحل هو أن معالج المقاطعة المؤقت سيستغرق 10 مرات أكثر وقت المعالج ، والتي ستكون مفرطة. يجب أن يجد مصمم النظام توازنًا بين الدقة اللازمة لجهاز ضبط الوقت وقوة المعالج المتوفرة.

إعداد وقت النظام


كما هو الحال مع معظم كائنات SE Nucleus ، يتم التحكم في إعدادات وقت النظام في الغالب بواسطة توجيهات #define في ملف nuse_config.h . المعلمة الرئيسية هي NUSE_SYSTEM_TIME_SUPPORT ، التي تنشط آلية دعم وقت النظام. لا تحتاج إلى تحديد عدد الكائنات: يتم تنشيط وقت النظام أم لا.

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

تفعيل API


كل وظيفة من واجهات API (استدعاء الأداة المساعدة) في Nucleus SE لها توجيه تنشيط #define في ملف nuse_config.h. بالنسبة إلى وقت النظام ، تكون هذه الرموز:
NUSE_CLOCK_SET
NUSE_CLOCK_RETRIEVE

بشكل افتراضي ، يتم ضبطها على FALSE ، لذلك يتم تعطيل جميع مكالمات الخدمة ، مما يحظر إدراج الكود الذي يقوم بتنفيذها. لتكوين وقت النظام في التطبيق ، تحتاج إلى تحديد مكالمات خدمة API اللازمة وتعيينها على TRUE .

فيما يلي مقتطف من الشفرة من ملف nuse_config.h الافتراضي.

#define NUSE_SYSTEM_TIME_SUPPORT FALSE /*    */ #define NUSE_CLOCK_SET FALSE /*   */ #define NUSE_CLOCK_RETRIEVE FALSE /*    */ 

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

نظام المكالمات فائدة الوقت


يدعم Nucleus RTOS اتصالين للأداة المساعدة يتصلان بوقت النظام ويوفران الوظائف التالية:

  • تحديد قيمة وقت النظام. يتم تطبيق Nucleus SE في دالة NUSE_Clock_Set () .
  • الحصول على قيمة وقت النظام. يتم تطبيق Nucleus SE في دالة NUSE_Clock_Retrieve () .

النظر في تنفيذ كل من هذه المكالمات بمزيد من التفصيل.

خدمة المكالمات لضبط والحصول على وقت النظام


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

يعتمد تفسير قيمة وقت النظام على التطبيق ، نظرًا لأنه يمثل أساسًا عدد "دورات الساعة" التي حدثت منذ إعادة تعيين العداد الأخيرة. لاستخدام هذه المعلومات ، يجب أن يكون تردد المولد معروفًا.

وقت الإعداد


يمكن لأي مهمة ضبط وقت النظام عن طريق استدعاء وظيفة API هذه.

اتصل لضبط وقت النظام في Nucleus RTOS

نموذج استدعاء الخدمة:
VOID NU_Set_Clock (UNSIGNED new_value) ؛

خيارات:
new_value - القيمة التي سيتم تخصيصها لوقت النظام

قيمة الإرجاع: لا شيء.

استدعاء لضبط وقت النظام في Nucleus SE
تدعم مكالمة API هذه الوظيفة الأساسية لـ Nucleus RTOS API.

نموذج استدعاء الخدمة:
void NUSE_Clock_Set (U32 new_value) ؛

خيارات:
new_value - القيمة التي سيتم تخصيصها لوقت النظام

قيمة الإرجاع: لا شيء

تنفيذ الوقت المحدد في Nucleus SE
الكود بسيط جدا تتم كتابة القيمة المتوفرة إلى NUSE_Tick_Clock داخل القسم الحرج.

الحصول على وقت النظام


يمكن للمهمة الحصول على قيمة وقت النظام باستخدام وظيفة API هذه.

اتصل للحصول على وقت النظام في Nucleus RTOS

نموذج استدعاء الخدمة:
غير موقعة NU_Retrieve_Clock (VOID) ؛

المعلمات: لا شيء

قيمة الإرجاع: القيمة الحالية لوقت النظام

الاتصال للحصول على وقت النظام في Nucleus SE
نموذج استدعاء الخدمة:
U32 NUSE_Clock_Retrieve (باطل)؛

المعلمات: لا شيء

قيمة الإرجاع: القيمة الحالية لوقت النظام

تنفيذ اقتناء الوقت في Nucleus SE
الكود بسيط جدا تقوم الدالة بإرجاع قيمة NUSE_Tick_Clock التي تم الحصول عليها في القسم الحرج.

هياكل البيانات


يستخدم وقت النظام بنية بيانات واحدة (موجودة في ذاكرة الوصول العشوائي) ، وهي كلمة ذات 32 بت.

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

ذاكرة الوصول العشوائي البيانات


هيكل البيانات:
NUSE_Tick_Clock - متغير من النوع U32 ، الذي يخزن عداد ساعة من وقت النظام.

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

بيانات ROM


لا توجد هياكل البيانات المرتبطة وقت النظام في ROM.

مقدار الذاكرة لوقت النظام


مثل كل الكائنات الأخرى في Nucleus SE ، فإن مقدار الذاكرة المطلوب لوقت النظام يمكن التنبؤ به.

مقدار الذاكرة في ROM هو 0.

مقدار الذاكرة في RAM (بالبايت) هو دائمًا 4.

مكالمات API غير المحققة


جميع مكالمات خدمة Nucleus RTOS API في وقت النظام لها مكافئ في Nucleus SE.

متوافق مع Nucleus PLUS


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

في المقالة التالية سننظر في توقيت البرامج.

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


All Articles