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

المقالات السابقة في السلسلة: باستخدام الموقتات
يمكن تكوين مؤقتات البرنامج ليتم تشغيلها مرة واحدة ، أي أنها تبدأ ، وبعد ذلك ، بعد فترة زمنية محددة ، قم ببساطة بإنهاء الدورة. أو يمكن ضبط المؤقت لإعادة التشغيل: بعد اكتمال العد ، تتم إعادة تشغيل المؤقت تلقائيًا. قد يختلف وقت التشغيل بعد إعادة التشغيل عن وقت التشغيل الأولي. بالإضافة إلى ذلك ، يمكن اختيار الموقت اختياريًا لأداء وظيفة إنهاء خاصة ، والتي يتم تنفيذها عند اكتمال الموقت (أو في كل مرة) دورة العمل.
إعدادات الموقت
عدد الموقتات
كما هو الحال مع معظم جوانب برنامج Nucleus SE ، يتم التحكم في إعدادات المؤقت بواسطة توجيهات
#define في
nuse_config.h . المعلمة الرئيسية هي
NUSE_TIMER_NUMBER ، والتي تحدد أجهزة ضبط الوقت التي تم تكوينها في التطبيق. بشكل افتراضي ، هذه القيمة هي صفر (أي ، لا يتم استخدام أجهزة ضبط الوقت في التطبيق) ، ويمكن أن تأخذ قيمًا تصل إلى 16. ستؤدي القيمة غير الصحيحة إلى حدوث خطأ في
الترجمة ، والتي سيتم إنشاؤها عن طريق التحقق من الملف
nuse_config_check.h (يتم تضمين هذا الملف في
nuse_config.c و compiles. جنبا إلى جنب مع ذلك) ، والتي سوف تؤدي إلى توجيه
الإرهاب # .
اختيار قيمة غير صفرية هو المنشط المؤقت الرئيسي. يتم استخدام هذه المعلمة عند تعريف بنيات البيانات ، وحجمها يعتمد على قيمتها. بالإضافة إلى ذلك ، تعمل القيمة غير الصفرية على تنشيط إعدادات واجهة برمجة التطبيقات.
تفعيل وظيفة الإنجاز
في Nucleus SE ، حاولت أن أجد الفرصة لجعل الوظيفة اختيارية ، حيث ستوفر الذاكرة. مثال جيد على ذلك هو دعم وظائف إتمام الموقت. إلى جانب حقيقة أن هذه الميزة اختيارية لكل مؤقت ، يمكن تنشيط الآلية (أو لا) للتطبيق بأكمله باستخدام المعلمة
NUSE_TIMER_EXPIRATION_ROUTINE_SUPPORT في
nuse_config.h . يؤدي تعيين هذه المعلمة إلى
FALSE إلى حظر تعريف بنيتين للبيانات في ROM ، والذي سيتم وصفه بالتفصيل في هذه المقالة.
تفعيل API
كل وظيفة من واجهات API (استدعاء الأداة المساعدة) في Nucleus SE لها توجيه تنشيط #define في nuse_config.h. بالنسبة إلى المؤقتات ، تشمل هذه الرموز:
NUSE_TIMER_CONTROL
NUSE_TIMER_GET_REMAINING
NUSE_TIMER_RESET
NUSE_TIMER_INFORMATION
NUSE_TIMER_COUNTبشكل افتراضي ، يتم تعيين جميع المنشطات على
FALSE ، لذلك يتم تعطيل جميع مكالمات الخدمة ، مما يحظر إدراج الكود الذي يقوم بتنفيذها. لإعداد مؤقتات في التطبيق ، تحتاج إلى تحديد مكالمات خدمة API اللازمة وتعيينها على
TRUE .
فيما يلي مقتطف من الشفرة من ملف
nuse_config.h الافتراضي.
#define NUSE_TIMER_NUMBER 0/* 0-16 */ /* */ #define NUSE_TIMER_CONTROL FALSE #define NUSE_TIMER_GET_REMAINING FALSE #define NUSE_TIMER_RESET FALSE #define NUSE_TIMER_INFORMATION FALSE #define NUSE_TIMER_COUNT FALSE
إذا تم تنشيط وظيفة واجهة برمجة التطبيقات المتعلقة
بالموقت ولم يكن للتطبيق أي أجهزة ضبط وقت تم تكوينها (باستثناء وظيفة
NUSE_Timer_Count () ، والتي يتم تمكينها دائمًا) ،
فسيحدث خطأ في
التحويل البرمجي. إذا كان الرمز الخاص بك يستخدم مكالمة API لم يتم تنشيطها ، فسيحدث خطأ في التخطيط لأنه لم يتم تضمين رمز التنفيذ في التطبيق.
المكالمات خدمة الموقت
يدعم Nucleus RTOS ثماني استدعاءات الأداة المساعدة المتعلقة الموقت التي توفر الوظيفة التالية:
- إدارة (بدء / إيقاف) الموقت. يتم تطبيق Nucleus SE في دالة NUSE_Timer_Control () .
- استعادة الوقت المتبقي الموقت. في Nucleus SE ، تم تنفيذه في NUSE_Timer_Get_Remaining () .
- استعادة المؤقت إلى حالته الأصلية (إعادة تعيين). تطبيق Nucleus SE في NUSE_Timer_Reset () .
- توفير معلومات حول جهاز توقيت معين. يتم تطبيق Nucleus SE في NUSE_Timer_Information () .
- تُرجع عدد أجهزة ضبط الوقت المُكوّنة (حاليًا) في التطبيق. يتم تطبيق Nucleus SE في NUSE_Timer_Count () .
- إضافة مؤقت جديد إلى التطبيق (الإنشاء). Nucleus SE غير مطبق.
- إزالة مؤقت من التطبيق. Nucleus SE غير مطبق.
- إرجاع المؤشرات إلى جميع أجهزة ضبط الوقت في التطبيق. Nucleus SE غير مطبق.
سيتم مناقشة تنفيذ كل مكالمة خدمة بالتفصيل أدناه.
خدمات الموقت
العمليات الأساسية التي يمكن تنفيذها مع جهاز ضبط الوقت هي التحكم (البدء والتوقف) وقراءة القيمة الحالية. يوفر Nucleus RTOS و Nucleus SE نداءين أساسيين لواجهة برمجة التطبيقات (API) لهذه العمليات.
التحكم الموقت
تتيح لك مكالمة مساعدة لـ Nucleus RTOS API للتحكم في المؤقت تنشيط وتفعيل الموقت (بدء وإيقاف). Nucleus SE يوفر وظائف مماثلة.
التحدي التحكم الموقت في نواة RTOSنموذج استدعاء الخدمة:
STATUS NU_Control_Timer (NU_TIMER * مؤقت ، تمكين OPTION) ؛خيارات:
الموقت - مؤشر إلى كتلة التحكم الموقت التي يقدمها المستخدم.
التمكين هو الوظيفة المطلوبة ؛ يمكن أن يأخذ القيم
NU_ENABLE_TIMER أو
NU_DISABLE_TIMER .
قيمة الإرجاع:
NU_SUCCESS - تم إكمال المكالمة بنجاح ؛
NU_INAVLID_TIMER - مؤشر مؤقت غير صالح ؛
NU_INAVLID_ENABLE - وظيفة غير صالحة.
التحدي التحكم الموقت في نواة SEتدعم مكالمة API هذه الوظيفة الكاملة لـ Nucleus RTOS API.
نموذج استدعاء الخدمة:
STATUS NUSE_Timer_Control (مؤقت NUSE_TIMER ، تمكين OPTION) ؛خيارات:
مؤقت - مؤشر (معرف) الموقت المستخدمة ؛
التمكين هو الوظيفة المطلوبة ؛ يمكن أن يأخذ القيم
NUSE_ENABLE_TIMER أو
NUSE_DISABLE_TIMER .
قيمة الإرجاع:
NUSE_SUCCESS - تم إكمال المكالمة بنجاح ؛
NUSE_INCALID_TIMER - فهرس مؤقت غير صالح ؛
NUSE_INVALID_ENABLE هي وظيفة غير صالحة.
تنفيذ إدارة المؤقت في Nucleus SEرمز دالة API
NUSE_Timer_Control () (بعد التحقق من المعلمات) بسيط للغاية:
NUSE_CS_Enter(); if (enable == NUSE_ENABLE_TIMER) { NUSE_Timer_Status[timer] = TRUE; if (NUSE_Timer_Expirations_Counter[timer] == 0) { NUSE_Timer_Value[timer] = NUSE_Timer_Initial_Time[timer]; } else { NUSE_Timer_Value[timer] = NUSE_Timer_Reschedule_Time[timer]; } } else /* enable == NUSE_DISABLE_TIMER */ { NUSE_Timer_Status[timer] = FALSE; } NUSE_CS_Exit();
إذا تم تحديد وظيفة
NUSE_DISABLE_TIMER ،
فسيتم تعيين حالة المؤقت (
NUSE_Timer_Status [] المعلمة) على
FALSE ، والذي يتجاهل المؤقت بواسطة معالج المقاطعة.
عند تحديد وظيفة
NUSE_ENABLE_TIMER ، يتم ضبط عداد المؤقت (
NUSE_Timer_Value [] ) على
NUSE_Timer_initial_Time [] ، بشرط ألا يتوقف جهاز ضبط الوقت مطلقًا منذ آخر إعادة تعيين. خلاف ذلك ، يتم تعيين القيمة
NUSE_Timer_Reschedule_Time [] . ثم يتم تعيين حالة المؤقت (المعلمة
NUSE_Timer_Status [] ) إلى
TRUE ، مما يتسبب في معالجة المؤقت بواسطة معالج المقاطعة.
قراءة الموقت
للحصول على الوقت المتبقي للوقت ، تقوم استدعاء خدمة Nucleus RTOS API بإرجاع عدد القياسات إلى أن تنتهي صلاحيتها. Nucleus SE يوفر وظائف مماثلة.
اتصل للحصول على الوقت المتبقي في Nucleus RTOSنموذج استدعاء الخدمة:
STATUS NU_Get_Remaining_Time (NU_TIMER * timer، UNSIGNED * باقي_time) ؛خيارات:
الموقت - مؤشر إلى كتلة التحكم الموقت التي يقدمها المستخدم.
left_time - مؤشر إلى تخزين قيمة الوقت المتبقي ، وهو متغير من النوع غير
مسجل .
قيمة الإرجاع
NU_SUCCESS - تم إكمال المكالمة بنجاح ؛
NU_INVALID_TIMER - مؤشر مؤقت غير صالح.
اتصل للحصول على الوقت المتبقي في Nucleus SEتدعم مكالمة API هذه الوظيفة الكاملة لـ Nucleus RTOS API.
نموذج استدعاء الخدمة:
STATUS NUSE_Timer_Get_Remaining (NUSE_TIMER مؤقت ، U16 * باقي_وقت) ؛خيارات:
مؤقت - مؤشر (معرف) الموقت المستخدمة ؛
left_time - مؤشر إلى تخزين قيمة الوقت المتبقي ، وهو متغير من النوع
U16 .
قيمة الإرجاع:
NUSE_SUCCESS - تم إكمال المكالمة بنجاح ؛
NUSE_INVALID_TIMER - فهرس مؤقت غير صالح ؛
NUSE_INVALID_POINTER - مؤشر فارغ إلى الوقت المتبقي (
NULL ).
تنفيذ مؤقت قراءة في Nucleus SEيعد متغير رمز دالة API
NUSE_Timer_Get_Remaining () (بعد التحقق من المعلمات) بسيطًا للغاية.
يتم الحصول على القيمة
NUSE_Timer_Value [] ثم يتم إرجاعها في القسم الحرج.
خدمات الموقت المساعدة
يحتوي Nucleus RTOS على أربعة مكالمات من واجهة برمجة التطبيقات (API) توفر وظائف إضافية متعلقة بأجهزة ضبط الوقت: إعادة ضبط المؤقت ، الحصول على معلومات المؤقت ، الحصول على عدد المؤقتات في تطبيق ما ، والحصول على مؤشرات لجميع أجهزة ضبط الوقت في تطبيق ما. يتم تنفيذ الوظائف الثلاث الأولى في Nucleus SE.
إعادة تعيين الموقت
استدعاء API هذا يعيد ضبط المؤقت إلى حالته الأصلية غير المستخدمة. يمكن تنشيط الموقت أو إلغاء تنشيطه بعد نهاية هذه المكالمة. لا يمكن استخدامه إلا بعد تعطيل المؤقت (باستخدام
NUSE_Timer_Control () ). في المرة التالية التي يتم فيها تنشيط المؤقت ، سيتم تهيئته باستخدام المعلمة
NUSE_Timer_Initial_Time [] . يتيح لك Nucleus RTOS توفير حالة أولية جديدة وإعادة جدولة الوقت ، وكذلك تحديد وظيفة الإكمال عند إعادة ضبط المؤقت. في Nucleus SE ، يتم تعيين هذه القيم أثناء الإعداد ولا يمكن تغييرها حيث يتم تخزينها في ROM.
اتصل لإعادة ضبط مؤقت في Nucleus RTOSنموذج استدعاء الخدمة:
STATUS NU_Reset_Timer (NU_TIMER * timer ، VOID (* expiration_routine) (غير موقعة) ، UN_IGNED initial_time ، UNSIGNED reschedule_time ، تمكين OPTION) ؛خيارات:
مؤقت - مؤشر إلى مؤقت قابل لإعادة التعيين ؛
expiration_routine - تشير إلى الوظيفة التي سيتم تنفيذها عند انتهاء الحلقة ؛
initial_time - العدد الأولي من علامات التجزئة حتى تنتهي الحلقة ؛
reschedule_time - عدد
علامات التجزئة حتى الانتهاء من الدورات الثانية واللاحقة ؛
تمكين - يمكن أن تأخذ حالة الموقت المطلوبة بعد إعادة
التعيين القيم
NU_ENABLE_TIMER أو
NU_DISABLE_TIMER .
قيمة الإرجاع:
NU_SUCCESS - تم إكمال المكالمة بنجاح ؛
NU_INVALID_TIMER - مؤشر غير صالح إلى وحدة التحكم المؤقت ؛
NU_INVALID_FUNCTION - مؤشر فارغ لوظيفة الإكمال (
NULL ) ؛
NU_INVALID_ENABLE - الحالة المحددة غير صحيحة ؛
NU_NOT_DISABLED - المؤقت يعمل بالفعل (يجب إيقافه قبل استدعاء هذه الوظيفة).
اتصل لإعادة ضبط المؤقت في Nucleus SEتدعم مكالمة خدمة واجهة برمجة التطبيقات (API) هذه إصدارًا مبسطًا من الوظائف الأساسية لـ Nucleus RTOS API.
نموذج استدعاء الخدمة:
STATUS NUSE_Timer_Reset (مؤقت NUSE_TIMER ، تمكين OPTION) ؛خيارات:
الموقت - مؤشر (معرف) الموقت إعادة تعيين.
تمكين - الحالة المطلوبة بعد إعادة
التعيين ، يمكن أن تأخذ القيم
NUSE_ENABLE_TIMER أو
NUSE_DISABLE_TIMER .
قيمة الإرجاع:
NUSE_SUCCESS - تم إكمال المكالمة بنجاح ؛
NUSE_INVALID_TIMER - فهرس مؤقت غير صالح ؛
NUSE_INVALID_ENABLE - الحالة المحددة غير صحيحة ؛
NUSE_NOT_DISABLED - المؤقت يعمل بالفعل (يجب إيقافه قبل استدعاء هذه الوظيفة).
تنفيذ إعادة ضبط مؤقت في Nucleus SEإصدار رمز دالة API
NUSE_Timer_Reset () (بعد التحقق من المعلمات والحالة الحالية) بسيط للغاية:
NUSE_CS_Enter(); NUSE_Init_Timer(timer); if (enable == NUSE_ENABLE_TIMER) { NUSE_Timer_Status[timer] = TRUE; } /* enable == NUSE_DISABLE_TIMER FALSE */ NUSE_CS_Exit();
استدعاء
NUSE_Init_Timer () تهيئة القيمة الزمنية ومسح عداد الإكمال. بعد ذلك ، إذا لزم الأمر ، يتم التحقق من قيمة الحالة المطلوبة وما إذا كان جهاز ضبط الوقت قيد التشغيل.
معلومات الموقت
تتيح لك مكالمة الخدمة هذه الحصول على مجموعة من معلومات المؤقت. يختلف تطبيق Nucleus SE عن Nucleus RTOS في أنه يُرجع معلومات أقل نظرًا لأن تسمية الكائنات غير مدعومة.
اتصل للحصول على معلومات المؤقت في Nucleus RTOSنموذج استدعاء الخدمة:
STATUS NU_Timer_Information (NU_TIMER * timer، CHAR * name، OPTION * enable، expunations * UNSIGNED *، UNSIGNED * id، UNSIGNED * initial_time، UNSIGNED * reschedule_time)؛خيارات:
مؤقت - مؤشر إلى مؤقت حول المعلومات المطلوبة ؛
اسم - مؤشر إلى منطقة 8 أحرف لاسم المؤقت.
تمكين - مؤشر إلى متغير يأخذ الحالة الحالية
لجهاز تنشيط المؤقت:
NU_ENABLE_TIMER أو
NU_DISABLE_TIMER ؛
انتهاء الصلاحية - مؤشر إلى متغير يأخذ عداد عدد مرات إكمال دورة المؤقت منذ إعادة تعيينه الأخير ؛
id - مؤشر إلى متغير يأخذ قيمة المعلمة التي تم تمريرها إلى وظيفة نهاية دورة المؤقت ؛
initial_time - مؤشر إلى متغير يأخذ قيمة يتم فيها تهيئة المؤقت بعد إعادة
التعيين ؛
reschedule_time - مؤشر إلى متغير يأخذ قيمة حيث سيتم تهيئة المؤقت بعد الانتهاء.
قيمة الإرجاع:
NU_SUCCESS - تم إكمال المكالمة بنجاح ؛
NU_INVALID_TIMER - مؤشر مؤقت غير صالح.
اتصل للحصول على معلومات المؤقت في Nucleus SEتدعم مكالمة API هذه الوظيفة الأساسية لـ Nucleus RTOS API.
نموذج استدعاء الخدمة:
STATUS NUSE_Timer_Information (مؤقت NUSE_TIMER ، تمكين OPTION * ، انتهاء صلاحية U8 * ، معرف U8 * ، U16 * initial_time ، U16 * reschedule_time) ؛خيارات:
الموقت - فهرس الموقت حول أي المعلومات المطلوبة ؛
تمكين - مؤشر إلى متغير يأخذ القيمة
TRUE أو
FALSE ، اعتمادًا على ما إذا كان المؤقت قد تم تنشيطه أم لا ؛
انتهاء الصلاحية - مؤشر إلى متغير من النوع
U8 يأخذ قيمة عدد مرات استكمال المؤقت منذ إعادة تعيينه الأخير ؛
معرف - مؤشر إلى متغير من النوع
U8 يأخذ قيمة المعلمة التي تم تمريرها إلى وظيفة إكمال المؤقت (سيعود قيمة فارغة إذا تم تعطيل وظائف الإكمال) ؛
initial_time - مؤشر إلى متغير من النوع
U16 يأخذ قيمة يتم من خلالها تهيئة المؤقت بعد إعادة التعيين ؛
reschedule_time - مؤشر إلى متغير من النوع
U16 ، والذي يأخذ القيمة التي سيتم بها تهيئة المؤقت بعد الانتهاء.
قيمة الإرجاع:
NUSE_SUCCESS - تم إكمال المكالمة بنجاح ؛
NUSE_INVALID_TIMER - فهرس مؤقت غير صالح ؛
NUSE_INVALID_POINTER - معلمة مؤشر واحد أو أكثر غير صحيحة.
تطبيق معلومات المؤقت في Nucleus SEتنفيذ مكالمة واجهة برمجة التطبيقات هذه بسيط جدًا:
NUSE_CS_Enter(); if (NUSE_Timer_Status[timer]) { *enable = NUSE_ENABLE_TIMER; } else { *enable = NUSE_DISABLE_TIMER; } *expirations = NUSE_Timer_Expirations_Counter[timer]; #if NUSE_TIMER_EXPIRATION_ROUTINE_SUPPORT *id = NUSE_Timer_Expiration_Routine_Parameter[timer]; #endif *initial_time = NUSE_Timer_Initial_Time[timer]; *reschedule_time = NUSE_Timer_Reschedule_Time[timer]; NUSE_CS_Exit();
ترجع الدالة حالة المؤقت. لا يتم إرجاع قيمة المعلمة الخاصة بوظيفة الإنهاء إلا إذا تم تنشيط دعمها في التطبيق.
الحصول على عدد من الموقتات
إرجاع استدعاء الأداة المساعدة هذه عدد أجهزة ضبط الوقت التي تم تكوينها في التطبيق. في Nucleus RTOS ، قد تتغير هذه القيمة بمرور الوقت ، وسوف تعرض قيمة الإرجاع العدد الحالي من المؤقتات. في Nucleus SE ، يتم تعيين قيمة الإرجاع أثناء مرحلة التجميع ولا يمكن تغييرها.
استدعاء عداد مؤقت في Nucleus RTOSنموذج استدعاء الخدمة:
UNSIGNED NU_Established_Timers (VOID) ؛المعلمات: لا شيء
قيمة الإرجاع: عدد أجهزة ضبط الوقت التي تم إنشاؤها في النظام.
استدعاء عداد الموقت في نواة SEتدعم مكالمة API هذه الوظيفة الأساسية لـ Nucleus RTOS API.
نموذج استدعاء الخدمة:
U8 NUSE_Timer_Count (باطل) ؛المعلمات: لا شيء
قيمة الإرجاع:
عدد المؤقتات التي تم تكوينها في التطبيق
توقيت تنفيذ عداد
تطبيق استدعاء API هذا بسيط للغاية: يتم
إرجاع قيمة رمز #define
NUSE_TIMER_NUMBER .
هياكل البيانات
تستخدم أجهزة ضبط الوقت خمسة أو سبعة هياكل بيانات (موجودة في ذاكرة الوصول العشوائي أو ذاكرة الوصول العشوائي) والتي (مثل كائنات Nucleus SE الأخرى) عبارة عن مجموعة من الجداول التي يتناسب حجمها ورقمها مع عدد أجهزة ضبط الوقت المكوّنة والمعايير المحددة.
أوصي بشدة ألا يستخدم رمز التطبيق الوصول المباشر إلى هياكل البيانات هذه ، ولكنه يشير إليها من خلال وظائف واجهة برمجة التطبيقات المتوفرة. سيؤدي ذلك إلى تجنب عدم التوافق مع الإصدارات المستقبلية من Nucleus SE والآثار الجانبية غير المرغوب فيها ، بالإضافة إلى تبسيط تطبيقات النقل إلى Nucleus RTOS. فيما يلي نظرة عامة مفصلة على الهياكل لتبسيط فهم مكالمة الخدمة ورمز التصحيح.
ذاكرة الوصول العشوائي البيانات
تحتوي هذه البيانات على البنية التالية:
NUSE_Timer_Status [] عبارة عن صفيف من النوع
U8 يحتوي على إدخال واحد لكل مؤقت تم تكوينه ويخزن حالة المؤقت (قيد التشغيل أو الإيقاف:
TRUE أو
FALSE ).
NUSE_Timer_Value [] عبارة عن صفيف من النوع
U16 يحتوي على إدخال واحد لكل مؤقت تم تكوينه ويخزن القيمة الحالية لعداد المؤقت.
NUSE_Timer_Expirations_Counter [] - صفيف من النوع
U8 ، يحتوي على عداد لعدد الحالات عندما وصلت أجهزة ضبط الوقت إلى نهاية الدورة منذ آخر إعادة تعيين.
تتم تهيئة جميع هياكل البيانات هذه بواسطة الدالة
NUSE_Init_Timer () عند بدء تشغيل Nucleus SE. تحتوي إحدى المقالات التالية على وصف كامل لإجراءات بدء التشغيل الخاصة بـ Nucleus SE.
فيما يلي تعريفات بنيات البيانات هذه في ملف
nuse_init.c :
RAM U8 Timer_Status [NUSE_TIMER_NUMBER] ؛
RAM U16 NUSE_Timer_Value [NUSE_TIMER_NUMBER] ؛
RAM U8 NUSE_Timer_Expirations_Counter [NUSE_TIMER_NUMBER] ؛بيانات ROM
هيكل هذه البيانات:
NUSE_Timer_Initial_Time [] عبارة عن صفيف من النوع
U16 يحتوي على إدخال واحد لكل مؤقت تم تكوينه ويخزن قيمة كل مؤقت.
NUSE_Timer_Reschedule_Time [] عبارة عن صفيف من النوع
U16 يحتوي على إدخال واحد لكل مؤقت تم تكوينه ويخزن القيمة التي سيتم ضبط المؤقت عليها بعد الانتهاء. تشير قيمة الصفر إلى أن المؤقت "لمرة واحدة" ويجب عدم إعادة التشغيل تلقائيًا.
NUSE_Timer_Expiration_Routine_Address [] - صفيف نوع
ADDR يحتوي على عنوان إجراءات انتهاء صلاحية المؤقت. يوجد هذا الصفيف فقط في حالة تنشيط دعم إجراء انتهاء صلاحية المؤقت.
NUSE_Timer_Expiration_Routine_Parameter [] - صفيف من النوع
U8 يحتوي على قيم المعلمة التي يتم تمريرها إلى وظيفة إكمال المؤقت. يوجد هذا الصفيف فقط إذا تم تنشيط دعم وظائف الإكمال.
يتم
تعريف هياكل البيانات هذه
وتهيئتها (بشكل ثابت) في ملف
nuse_config.c ، وبالتالي:
ROM U16 NUSE_Timer_Initial_Time[NUSE_TIMER_NUMBER] = { /* ------ */ }; ROM U16 NUSE_Timer_Reschedule_Time[NUSE_TIMER_NUMBER] = { /* ------ */ }; #if NUSE_TIMER_EXPIRATION_ROUTINE_SUPPORT || NUSE_INCLUDE_EVERYTHING /* */ ROM ADDR NUSE_Timer_Expiration_Routine_Address[NUSE_TIMER_NUMBER] = { /* ------ */ /* NULL */ }; ROM U8 NUSE_Timer_Expiration_Routine_Parameter[NUSE_TIMER_NUMBER] = { /* ------ */ }; #endif
مقدار الذاكرة لجهاز ضبط الوقت
مثل كل الكائنات الأخرى في Nucleus SE ، فإن كمية البيانات اللازمة لأجهزة ضبط الوقت يمكن التنبؤ بها.
يمكن حساب مقدار البيانات في ذاكرة الوصول العشوائي (بالبايت) لجميع أجهزة ضبط الوقت في التطبيق على النحو التالي:
NUSE_TIMER_NUMBER * 4يمكن حساب مقدار البيانات في ROM (بالبايت) لجميع أجهزة ضبط الوقت في التطبيق ، إذا تم تعطيل دعم وظائف الإكمال ، كما يلي:
NUSE_TIMER_NUMBER * 4خلاف ذلك ، فهي تساوي:
NUSE_TIMER_NUMBER * (sizeof (ADDR) + 5)مكالمات API غير المحققة
لا ينفذ Nucleus SE مكالمات API الثلاثة التي يمكن العثور عليها في RTOS.
إنشاء الموقت
مكالمة API هذه تنشئ مؤقتًا. Nucleus SE لا يحتاج إليها ، حيث يتم إنشاء أجهزة ضبط الوقت بشكل ثابت.
نموذج استدعاء الخدمة:
STATUS NU_Create_Timer (NU_TIMER * timer ، CHAR * name ، VOID (* expiration_routine) (UNSIGNED) ، معرف غير موقّع عليه ، Initial__SIGNED UNSIGNED ، UNSIGNED reschedule_time ، تمكين OPTION) ؛خيارات:
الموقت - مؤشر إلى كتلة التحكم الموقت التي يقدمها المستخدم. سيتم استخدامه للتحكم في أجهزة ضبط الوقت في مكالمات API الأخرى ؛
اسم - مؤشر إلى اسم مكون من 7 أحرف الموقت مع صفر إنهاء؛
expiration_routine - تشير إلى الوظيفة التي يجب تنفيذها بعد انتهاء المؤقت ؛
معرف - عنصر بيانات من النوع غير
الموقّع الذي تم تمريره إلى وظيفة الإنهاء: يمكن استخدام هذه المعلمة لتحديد أجهزة ضبط الوقت التي لها نفس وظيفة الإنهاء ؛
initial_time - يشير إلى العدد الأولي من علامات التجزئة قبل انتهاء المؤقت ؛
reschedule_time - يشير إلى عدد
علامات التجزئة حتى الانتهاء من الدورات الثانية واللاحقة ؛ إذا كانت هذه المعلمة تساوي الصفر ، يتوقف المؤقت مرة واحدة فقط ؛
تمكين - يمكن أن تأخذ هذه المعلمة القيم
NU_ENABLE_TIMER و
NU_DISABLE_TIMER ؛
NU_ENABLE_TIMER ينشط جهاز
ضبط الوقت بعد إنشائه ؛
NU_DISABLE_TIMER يترك الموقت تعطيل؛ يجب تنشيط أجهزة ضبط الوقت التي تم إنشاؤها باستخدام المعلمة
NU_DISABLE_TIMER عن طريق استدعاء
NU_Control_Timer .
قيمة الإرجاع:
NU_SUCCESS - تم إكمال المكالمة بنجاح ؛
NU_INVALID_TIMER - مؤشر فارغ إلى وحدة تحكم مؤقت (
NULL ) أو وحدة التحكم قيد الاستخدام بالفعل ؛
NU_INVALID_FUNCTION - مؤشر فارغ لبرنامج الإكمال (
NULL ) ؛
NU_INVALID_ENABLE - معلمة
تمكين غير صالحة ؛
NU_INVALID_OPERATION - المعلمة
initial_time كانت صفر.
حذف الموقت
استدعاء API هذا يحذف مؤقت تم إنشاؤه مسبقًا. Nucleus SE لا يحتاج إليها ، لأن أجهزة ضبط الوقت يتم إنشاؤها بشكل ثابت ولا يمكن حذفها.
نموذج استدعاء الخدمة:
STATUS NU_Delete_Timer (NU_TIMER * timer) ؛خيارات:
مؤقت - مؤشر إلى كتلة التحكم الموقت.
قيمة الإرجاع:
NU_SUCCESS - تم إكمال المكالمة بنجاح ؛
NU_INVALID_TIMER - مؤشر مؤقت غير صالح ؛
NU_NOT_DISABLED - لم يتم تعطيل المؤقت المحدد.
مؤشرات الموقت
تشكل مكالمة واجهة برمجة التطبيقات هذه قائمة متتابعة من المؤشرات لجميع أجهزة ضبط الوقت في النظام. لا يحتاج برنامج Nucleus SE إلى ذلك ، حيث يتم تحديد أجهزة ضبط الوقت من خلال فهرس بسيط ، وليس مؤشر.
نموذج استدعاء الخدمة:
UNSIGNED NU_Timer_Pointers (NU_TIMER ** pointer_list ، UNSIGNED maximum_pointers) ؛خيارات:
pointer_list - مؤشر إلى مجموعة من المؤشرات
NU_TIMER ؛ سيتم ملؤها مع مؤشرات إلى أجهزة ضبط الوقت تكوينها في النظام ؛
maximum_pointers - الحد الأقصى لعدد المؤشرات في الصفيف.
قيمة الإرجاع:
عدد مؤشرات
NU_TIMER الموضوعة في الصفيف.
نواة RTOS متوافق
كما هو الحال مع جميع الكائنات الأخرى Nucleus SE ، كان هدفي هو زيادة توافق كود التطبيق مع Nucleus RTOS. الموقتات ليست استثناءً ، ومن وجهة نظر المستخدم ، يتم تنفيذها بالطريقة نفسها المطبقة في Nucleus RTOS.
يوجد أيضًا عدم توافق معين ، اعتبرته مقبولًا ، نظرًا لأن النتيجة ستكون أكثر قابلية للفهم وأكثر فعالية من حيث مقدار الذاكرة المطلوبة. خلاف ذلك ، يمكن نقل مكالمات API Nucleus RTOS مباشرة تقريبًا إلى Nucleus SE.معرفات الكائنات
في Nucleus RTOS ، يتم وصف جميع الكائنات بواسطة بنية بيانات - كتلة تحكم لها نوع بيانات محدد. مؤشر وحدة التحكم هذه هو معرف مؤقت. قررت أنه في Nucleus SE ، هناك حاجة إلى نهج مختلف للاستخدام الفعال للذاكرة: يتم وصف جميع الكائنات kernel بواسطة مجموعة من الجداول في RAM و / أو ROM. يتم تحديد حجم هذه الجداول حسب عدد الكائنات التي تم تكوينها من كل نوع. معرف كائن معين هو الفهرس في هذا الجدول. لذلك عرّفت NUSE_TIMER بأنه مكافئ U8، متغير (وليس مؤشر) من هذا النوع بمثابة معرف الموقت. يسهل التعامل مع عدم التوافق البسيط هذا إذا تم نقل الكود من Nucleus SE إلى Nucleus RTOS والعكس. بشكل عام ، لا يتم تنفيذ أي عمليات على معرفات الكائنات بخلاف الحركة والتخزين.Nucleus RTOS كما يدعم توقيت التسمية. يتم استخدام هذه الأسماء فقط لتصحيح الأخطاء. لقد استبعدتهم من Nucleus SE لحفظ الذاكرة.حجم الموقت
في Nucleus RTOS ، يتم تطبيق أجهزة ضبط الوقت باستخدام عدادات 32 بت. قررت خفض هذه القيمة إلى 16 بت في Nucleus SE. وقد أدى ذلك إلى تحسينات كبيرة في كفاءة الذاكرة ووقت التشغيل. يمكن تعديل Nucleus SE إذا كان التطبيق يتطلب وقت تشغيل أطول.وظائف الانتهاء
يقوم Nucleus SE بتنفيذ وظائف الإنهاء بطريقة مماثلة لـ Nucleus RTOS ، فقط يمكن إيقاف تشغيلها تمامًا (مما يسمح لك بحفظ الذاكرة) ، ويتم تحديدها أيضًا بشكل ثابت. لا يمكن تغيير وظيفة النهاية عند إعادة ضبط المؤقت.مكالمات API غير المحققة
يدعم Nucleus RTOS ثمانية مكالمات خدمة مؤقت. من هذه ، ثلاثة لا تنفذ في Nucleus SE. يمكن العثور على وصف تفصيلي لهذه المكالمات ، وكذلك أسباب هذا القرار ، في وقت سابق من هذه المقالة ، في قسم "مكالمات API غير المحققة".المادة التالية سوف تدرس الانقطاعات.