المدير التنفيذي الدوري
يُعدّ النظام التنفيذي الدوري [ 1 ] [ 2 ] بديلاً لنظام التشغيل في الوقت الحقيقي . وهو شكل من أشكال تعدد المهام التعاوني ، حيث توجد مهمة واحدة فقط . تُنفَّذ هذه المهمة عادةً كحلقة لا نهائية في الدالة الرئيسية main() ، كما هو الحال في لغة C.
تعتمد الخطة الأساسية على تكرار سلسلة من الأنشطة بتردد محدد ( يُعرف أيضًا باسم التنفيذ الدوري المُفعّل زمنيًا). على سبيل المثال، لنفترض نظامًا مُدمجًا مُصممًا لمراقبة مستشعر درجة الحرارة وتحديث شاشة LCD . قد تحتاج شاشة LCD إلى الكتابة عليها عشرين مرة في الثانية (أي كل 50 مللي ثانية). إذا كان يجب قراءة بيانات مستشعر درجة الحرارة كل 100 مللي ثانية لأسباب أخرى، فيمكننا إنشاء حلقة تكرارية بالشكل التالي:
int main ( void ) { while ( 1 ) { // صُممت هذه الحلقة لتستغرق 100 مللي ثانية، أي أن // مجموع كل خطوة يساوي 100 مللي ثانية. // بما أن هذا كود تجريبي ولا نعرف المدة التي تستغرقها // tempRead أو lcdWrite للتنفيذ، فإننا نفترض // أنهما تستغرقان وقتًا صفريًا. // ونتيجة لذلك، فإن التأخيرات هي المسؤولة عن جدولة المهام / توقيتها.// قراءة درجة الحرارة مرة واحدة لكل دورة (كل 100 مللي ثانية) currTemp = tempRead ();// اكتب إلى شاشة LCD مرتين في كل دورة (كل 50 مللي ثانية) lcdWrite ( currTemp ); delay ( 50 ); lcdWrite ( currTemp ); delay ( 50 );// الآن، انقضت 100 مللي ثانية (التأخير(50) + التأخير(50) + قراءة درجة الحرارة + كتابة شاشة LCD + كتابة شاشة LCD) // لذا نكرر الدورة. } }تُسمى الدورة الخارجية التي تبلغ مدتها 100 مللي ثانية بالدورة الرئيسية. وفي هذه الحالة، توجد أيضًا دورة داخلية ثانوية مدتها 50 مللي ثانية. في هذا المثال الأول، لا يكون التمييز بين الدورات الخارجية والداخلية واضحًا. يمكننا استخدام آلية عدّ لتوضيح الدورتين الرئيسية والثانوية.
int main ( void ) { unsigned int i = 0 ; while ( 1 ) { // صُممت هذه الحلقة لتستغرق 50 مللي ثانية. // بما أن هذا كود تجريبي ولا نعرف المدة التي تستغرقها // tempRead أو lcdWrite للتنفيذ، نفترض // أنهما تستغرقان وقتًا صفريًا. // بما أننا نريد تنفيذ tempRead كل 100 مللي ثانية فقط، نستخدم // عبارة if للتحقق مما إذا كان العداد فرديًا أم زوجيًا، // ونقرر ما إذا كنا سننفذ tempRead.// قراءة درجة الحرارة كل دورة ثانية (كل 100 مللي ثانية) إذا كان ( ( i % 2 ) == 0 ) { currTemp = tempRead (); }// اكتب إلى شاشة LCD مرة واحدة لكل دورة (كل 50 مللي ثانية) lcdWrite ( currTemp ); delay ( 50 );i ++ ; // لقد مرّ الآن 50 مللي ثانية، لذا نكرر الدورة. } }انظر أيضاً
- أردوينو - مثال شائع على هذا النموذج
- حلقة الأحداث
- الاستباق (الحوسبة)
مراجع
- ↑ بروس باول دوغلاس (2003). أنماط تصميم الوقت الحقيقي: بنية قوية قابلة للتوسع لأنظمة الوقت الحقيقي . شركة أديسون-ويسلي لونغمان للنشر، الصفحات 232-237 . ISBN 0201699567.
- ↑ لابلانت، فيليب أ.؛ أوفاسكا، سيبو ج. (2012). تصميم وتحليل الأنظمة في الوقت الحقيقي ( الطبعة الرابعة). هوبوكين، نيوجيرسي: جون وايلي وأولاده، الصفحات 84-85 ، 100-102 . ISBN 978-0-470-76864-8أُرشف من المصدر الأصلي بتاريخ 14 فبراير 2016. تم الاطلاع عليه بتاريخ 13 فبراير 2016 .
- تقنية نظام التشغيل
- الحوسبة المتزامنة
