سؤال

أريد أن أعرف الفرق بين نظام المقاطعة في FIQ و IRQ في أي المعالجات الدقيقة، على سبيل المثال: ARM926EJ.

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

المحلول

ميزة لوحدة المعالجة المركزية الذراع الحديثة (وبعض الآخرين).

من براءة الاختراع:

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

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

نصائح أخرى

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

إلى حد ما، هذا يجعل التمييز بين أوضاع المقاطعة الزائدة والعديد من النظم لا تستخدم nFIQ على الإطلاق، أو استخدمها بطريقة مماثلة لغير غير ممكن (NMI) مقاطعة وجدت على معالجات أخرى (على الرغم من FIQ هو برنامج linsable على معظم معالجات الذراع).

فلماذا تستدعي الذراع "سريع"؟

  1. وضع FIQ لديه سجلات مصرفية مخصصة خاصة به، r8-r14. وبعد R14 هو سجل الرابط الذي يحمل عنوان المرسل (+4) من FIQ. ولكن إذا كان معالج FIQ الخاص بك قادرا على المكتوبة بحيث يستخدمه فقط r8-r13, ، يمكن أن يستفيد من هذه السجلات المصرفية بطريقتين:
    • أحدهما هو أنه لا يتحمل النفقات العامة لدفع وتفريغ أي سجلات تستخدمها روتين خدمة المقاطعة (ISR). هذا يمكن أن يوفر عددا كبيرا من الدورات على كل من الدخول والخروج إلى ISR.
    • أيضا، يمكن أن يعتمد المعالج على القيم المستمرة في السجلات من مكالمة واحدة إلى التالي، بحيث على سبيل المثال r8 يمكن استخدامه كمؤشر إلى جهاز الأجهزة ويمكن أن يعتمد المعالج على نفس القيمة قيد التشغيل r8 في المرة القادمة التي يطلق عليها.
  2. موقع FIQ في نهاية جدول ناقلات الاستثناء (0x1Cيعني أنه إذا تم وضع رمز معالج FIQ مباشرة في نهاية جدول المتجهات، فلن يلزم فرع - يمكن أن ينفذ الرمز مباشرة من 0x1C. وبعد هذا يحفظ بضع دورات عند الدخول إلى ISR.
  3. FIQ لها أولوية أعلى من IRQ. هذا يعني أنه عندما يأخذ الأساسية استثناء FIQ، فإنه يخفي تلقائيا IRQS. لا يمكن ل IRQ مقاطعة معالج FIQ. العكس ليس صحيحا - لا يقنع IRQ Fyqs ولذا يمكن لمعالج FIQ (إذا تم استخدامه) مقاطعة IRQ. بالإضافة إلى ذلك، في حالة حدوث كل من طلبات IRQ و FIQ في نفس الوقت، ستعامل النواة مع FIQ أولا.

فلماذا لا تستخدم العديد من الأنظمة FIQ؟

  1. لا يمكن كتابة رمز معالج FIQ عادة في C - يجب كتابته مباشرة في لغة التجميع. إذا كنت تهتم بأداء ISR بما فيه الكفاية في استخدام Fiq، فمن المحتمل أن لا ترغب في ترك بعض الدورات على الطاولة حسب الترميز في أي حال، ولكن الأهم من الأهم من الأهم من ذلك أن برنامج التحويل البرمجي C لن ينتج التعليمات البرمجية التي تتبع تقييد باستخدام السجلات فقط r8-r13. وبعد رمز الناتج عن مترجم C متوافق مع الذراع ATPCS سيؤدي معيار استدعاء الإجراء بدلا من ذلك إلى استخدام السجلات r0-r3 لقيم خدش ولن تنتج الصحيح cpsr استعادة رمز الإرجاع في نهاية الوظيفة.
  2. جميع أجهزة تحكم المقاطعة عادة ما تكون على دبوس IRQ. من المنطقي باستخدام FIQ فقط إذا كان لديك مصدر مقاطع ذو رأس أولوية واحدة متصلة بإدخال NFIQ والعديد من الأنظمة ليس لديك مصدر أولوية واحدة بشكل دائم. لا توجد قيمة تتوصل بمصادر متعددة إلى FIQ ثم إتاحة أولويات البرامج بينهما حيث يزيل هذا أيضا جميع المزايا التي تحتوي عليها FIQ على IRQ.

Fiq. أو المقاطعة السريعة غالبا ما يشار إليها باسم DMA لينة في بعض مراجع الذراع.
ملامح Fiq. نكون،

  1. وضع منفصل مع السجل المصرفي بما في ذلك مكدس، سجل الرابط و R8-R12.
  2. منفصلة FIQ تمكين / تعطيل بت.
  3. ذيل جدول المتجهات (وهو دائما في ذاكرة التخزين المؤقت ومطبقة من قبل MMU).

الميزة الأخيرة تعطي أيضا ميزة طفيفة على إيقاع التي يجب أن فرع.

عرض السرعة في "C"

نقل البعض عن صعوبة الترميز في المجمع لمعالجة FIQ. gcc لديه التعليقات التوضيحية لرمز أ Fiq. معالج. هنا مثال،

void  __attribute__ ((interrupt ("FIQ"))) fiq_handler(void)
{
    /* registers set previously by FIQ setup. */
    register volatile char *src asm ("r8");  /* A source buffer to transfer. */
    register char *uart asm ("r9");          /* pointer to uart tx register. */
    register int size asm ("r10");           /* Size of buffer remaining. */
    if(size--) {
        *uart = *src++;
    }
}

هذا يترجم إلى مجمع جيد تقريبا تقريبا،

00000000 <fiq_handler>:
   0:   e35a0000        cmp     sl, #0
   4:   e52d3004        push    {r3}            ; use r11, r12, etc as scratch.
   8:   15d83000        ldrbne  r3, [r8]
   c:   15c93000        strbne  r3, [r9]
  10:   e49d3004        pop     {r3}            ; same thing.
  14:   e25ef004        subs    pc, lr, #4

مجمع روتين في 0x1c قد تبدو وكأنها،

   tst     r10, #0    ; counter zero?
   ldrbne  r11, [r8]  ; get character.
   subne   r10, #1    ; decrement count
   strbne  r11, [r9]  ; write to uart
   subs    pc, lr, #4 ; return from FIQ.

حقيقي UART. ربما لديه بت جاهز، ولكن الكود لجعل سرعة عالية DMA لينة مع FIQ سيكون فقط 10-20 التعليمات. يحتاج القانون الرئيسي إلى استطلاع FIQ r10 لتحديد متى يتم الانتهاء من المخزن المؤقت. الرئيسية (رمز غير المقاطعة) قد نقل وإعداد البنك المصرفية Fiq. سجلات باستخدام msr تعليمات للتبديل إلى Fiq. وضع ونقل R0-R7 غير المصرفية إلى سجلات R8-R13 المصرفية.

عادة ما تكون الكمون في مقاطعة RTOS سيكون 500-1000 تعليمات. ل Linux، ربما 2000-10000 تعليمات. DMA الحقيقي هو الأفضل دائما، ومع ذلك، لمقاطعات بسيطة عالية التردد (مثل نقل المخزن المؤقت)، Fiq. يمكن أن توفر حل.

كما Fiq. يدور حول السرعة، يجب أن لا تنظر في ذلك إذا لم تكن آمنا في الترميز في المجمع (أو على استعداد لتخصيص الوقت). سيكون المجمع الذي كتبه مبرمج تشغيل بلا حدود أسرع من مترجم. وجود مساعدة دول مجلس التعاون الخليجي يمكن أن تساعد المبتدئ.

وقت الإستجابة

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

ضعف

ال Fiq. ليست قابلة للتطوير. من أجل استخدام متعددة FIQ المصادر، يجب مشاركة السجلات المصرفية بين إجراءات المقاطعة. أيضا، يجب إضافة التعليمات البرمجية لتحديد ما تسبب المقاطعة / FIQ. ال Fiq. عموما أ خدعة واحدة المهر.

إذا كانت المقاطعة الخاصة بك معقدة للغاية (برنامج تشغيل الشبكة، USB، وما إلى ذلك)، فمن المحتمل أن يكون FIQ من معنى القليل. هذا هو أساسا نفس البيان بمقدار المقاطعات. ال مصرفي سجل السجلات 6 متغيرات مجانية لاستخدامها أبدا تحميل من الذاكرة. وبعد التسجيل أسرع من الذاكرة. السجلات أسرع من ذاكرة التخزين المؤقت L2. السجلات أسرع من ذاكرة التخزين المؤقت L1. السجلات سريعة. إذا لم تتمكن من كتابة روتين يعمل مع 6 متغيرات، ثم Fiq. غير مناسب. ملاحظة: يمكنك مزدوج التشغيل مع بعض التسجيل التحولات و تدوير التي هي مجانية على الذراع، إذا كنت تستخدم قيم 16 بت.

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

ملخص

لا تتجه صديقي Fiq.. وبعد إنه مبرمجات النظام خدعة واحدة ضد الأجهزة الغبية. انها ليست للجميع، ولكن لديها مكانها. عندما فشلت جميع المحاولات الأخرى للحد من الكمون وزيادة تردد خدمة ISR، فإن Fiq. يمكن أن يكون خيارك الوحيد (أو فريق أفضل للأجهزة).

من الممكن أيضا استخدام ك هلع المقاطعة في بعض التطبيقات الحرجة السلامة.

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

FIQ هي أولوية أعلى، ويمكن تقديمها أثناء التعامل مع IRQ آخر. يتم التعامل مع أكثر الموارد (الموارد) الأكثر أهمية بواسطة FIQ، يتم التعامل مع الباقي من قبل IRQ.

سبب آخر في حالة FIQ، هناك حاجة إلى عدد أقل من السجل لدفع في المكدس، وضع FIQ يحتوي على R8 إلى سجلات R14_FIQ

انا اؤمن ان هذا ما تبحث عنه:

http://newsgroup.derkeiler.com/archive/comp/comp.sys.arm/2005-09/masg00084.html

في الأساس، ستكون FIQ ذات أولوية قصوى مع مصادر IRQ ذات الأولوية المتعددة والأولوية.

لا يوجد أي سحر حول FIQ. FIQ فقط يمكن أن تقاطع أي IRQ الأخرى التي يتم تقديمها، وهذا هو السبب في أنه يسمى "سريع". يتفاعل النظام بشكل أسرع على هذه المقاطعات ولكن الباقي هو نفسه.

FIQs هي أولوية أعلى، بلا شك، النقاط المتبقية أنا لست متأكدا ... ستدعم FiQs معالجة قناة عالية السرعة (أو)، حيث يلزم إجراء عمليات بيانات عالية السرعة، ونحن نستخدم Fiqs ويتم استخدام IRQs عموما معالجة المقاطعة العادية وبعد

ذلك يعتمد كيف نقوم بتصميم معالجات المقاطعة، حيث أن FIQ في النهاية قد لا تحتاج إلى تعليمات فرع واحدة، كما أنه يحتوي على مجموعة فريدة من سجلات R8-R14 هذه المرة القادمة التي نعود فيها إلى مقاطعة FIQ التي لا نحتاج إلى دفعها / منبوذ كومة. فكورسي يحفظ بعض الدورات، ولكن مرة أخرى ليس من الحكمة أن يكون لديك المزيد من المعالجين الذين يخدمون FIQ ويحتوي على Fiq يواجهون أولوية أكبر ولكن ليس أي سبب ليقول إنه يتعامل مع المقاطعة بشكل أسرع، وكلاهما تعمل IRQ / FIQ على نفس تردد وحدة المعالجة المركزية لذلك يجب أن تعمل بنفس السرعة.

قد يكون هذا خطأ. كل ما أعرفه هو أن Fiq تقف لطلب المقاطعة بسرعة وأن IRQ تقف طلب المقاطعة. انطلاقا من هذه الأسماء، سوف أخمن أن يتم التعامل مع FIQ (ألقيت؟) أسرع من IRQ. ربما يكون له علاقة بتصميم المعالج حيث تقاطع FIQ العملية بشكل أسرع من IRQ. أعتذر إذا كنت مخطئا، لكنني عادة ما أفعل برمجة أعلى مستوى أعلى، وأنا فقط أظن الآن.

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