كيف يمكنك اختبار وحدة معالجة المقاطعة الخاصة بك؟

StackOverflow https://stackoverflow.com/questions/1237368

  •  11-09-2019
  •  | 
  •  

سؤال

لدي وحدة معالجة المقاطعة التي تتحكم في أجهزة تحكم المقاطعة على معالج مضمن. الآن أريد أن أضيف المزيد من الاختبارات إليها. حاليا، لا تعمل الاختبارات فقط إذا كانت التعشيش من المقاطعات تعمل عن طريق إجراء برنامجين من داخل ISR، واحدة ذات أولوية منخفضة وواحدة ذات أولوية عالية. كيف يمكنني اختبار هذه الوحدة أكثر من ذلك؟

هل كانت مفيدة؟

المحلول

أقترح عليك أن تحاول إنشاء محفزات أخرى أيضا.

في كثير من الأحيان، يمكن أن يتم تشغيل مقاطعات الأجهزة أيضا عن طريق البرنامج (الاختبار التلقائي) أو المصحح عن طريق تعيين العلم. أو كقاطعة عبر I / O. أو مقاطعة توقيت. أو يمكنك فقط تعيين بت المقاطعة في وحدة تحكم المقاطعة عبر مصحح الأخطاء أثناء وجودك خطوة واحدة.

يمكنك إضافة بعض عمليات التحقق من بعض الوقت على الأشياء التي ليس من المفترض أن تحدث. أحيانا اخترت تعيين دبابيس الإخراج لمراقبة خارجيا (نيس إذا كان لديك جهاز تحليل الذبذبات أو المنطق ...)

low_prio_isr(void)
{
    LOW_PRIO_ISR=1;
    if (1 == HIGH_PRIO_ISR)
    { this may never happen. dummy statement to allow breakpoint in debugger }

}

high_prio_isr(void)
{
    HIGH_PRIO_ISR=1
} 

عيب مقاطعة البرنامج هو أن هذه اللحظة ثابتة؛ دائما نفس التعليمات. أعتقد أنك ترغب في رؤية أدلة على أنها تعمل دائما؛ خال من الجمود.

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

أعتقد أنه من المفيد تقديم اختبارات لما يلي: - لا ينقطع ISR للمقاطعة ذات الأولوية المنخفضة - لا يتقاطع ISR لنفس المقاطعة الأولوية - تمت مقاطعة ISR للحصول على مقاطعة ذات أولوية أعلى - الحد الأقصى لعدد التعشيش داخل حدود المكدس.

قد تبقى بعض الاختبارات الخاصة بك في التعليمات البرمجية كأداة (حتى تتمكن من مراقبة مثيل مستوى التعشيش الأقصى.

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

تعديلبالطبع، يجب اختبار ISRS على الأجهزة في النظام أيضا. بصرف النظر عن نهج Bit-by-by-STEP، قد ترغب في إثبات: - استقرار النظام في الحد الأقصى للحمل المقاطع (ويفضل عدة مرات الحمل الأقصى المتوقع؛ إذا كان برنامج التشغيل التسلسلي 115kbps الخاص بك يمكن أيضا التعامل مع 2Mbps كن على ما يرام!) - لحظة تصحيح لتمكين / تعطيل ISR، خاصة إذا دخل النظام أيضا وضع السكون - # من المقاطعات. يمكن أن يكون مفاجئا إذا أضفت مفاتيح ميكانيكية، دوارة ميكانيكية (مئات لحظات استراحة / اتصال قبل الوصول إلى موقف ثابت)

نصائح أخرى

أوصي اختبار الأجهزة الحقيقية. المناولة المقاطعة أمر عشوائي بطبيعتها ولا يمكن التنبؤ بها.

استخدم مولد إشارة وإطعام موجة مربعة في دبوس المقاطعة المناسب. استخدم مولدات متعددة (أو واحدة من خلال مخرجات متعددة) لاختبار خطوط IRQ متعددة وتحقق من التعامل مع الأولويات.

تجربة الاتصال بالتردد صعودا وهبوطا على مولدات الإشارات (تختلف الأسعار بينهما)، ونرى ما يحدث. لديك الكثير من التعليمات البرمجية التشخيصية للتحقق من حالة وحدة تحكم المقاطعة في مختلف الدول.

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

أنا لست مطورا مضمنا، لذلك لا أعرف إذا كان هذا ممكنا، ولكن ماذا عن فصل التعليمات البرمجية التي تعالج المقاطعات من آلية تسجيل رد الاتصال؟ هذا من شأنه أن يسمح لك بكتابة محاكاة شفرة شفرة المقاطعة - الأحداث كما تريدها ...

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top