wfi
يغطي lyszt.net wfi وتعليمات RISC-V الأخرى بمزيد من التفصيل.
الوصف
يوقف wfi البرنامج حتى يصل مقاطعة. تشير هذه الأحرف إلى wait for interrupt. البرنامج الذي لا يوجد لديه ما يفعله يبقى خاملاً هنا بدلاً من الدوران عبر التعليمات في حلقة. لا يأخذ معاملات.
wfi
يتوقف المعالج عند wfi ويبدأ من جديد عندما تكون هناك مقاطعة معلّقة وبت تمكينها في mie مضبوطاً. في هذا المحاكي، يحدث ذلك عند الضغط على زر ويكون مقاطعة الزر ممكّنة. يعرض المحاكي حالة انتظار المقاطعة ولا ينفّذ أي تعليمات خلال ذلك الوقت.
ما يحدث بعد ذلك يعتمد على mstatus. إذا كان بت تمكين المقاطعة العام مضبوطاً، فإن المعالج يتلقى المقاطعة بمجرد أن يستيقظ. يكتب الفخ عنوان التعليمة التي تلي wfi في mepc، ويعمل المعالج، ثم يعود mret إلى التعليمة التي تلي wfi. إذا كان بت التمكين العام غير مضبوط، يستيقظ المعالج ويتابع إلى التعليمة التي تلي wfi دون تشغيل معالج.
البرنامج الذي يبقى خاملاً بين ضغطات الأزرار يضبط mtvec وmie وmstatus، ثم يكرر wfi في حلقة.
loop: wfi j loop
مع عدم تمكين أي مقاطعة، ينتظر wfi إلى الأبد، لذا مكّن المقاطعة قبل الوصول إليه. يشغّل csrs بتات التمكين، ويعود mret من المعالج.
مثال
csrsi mstatus, 8 # allow interrupts wfi # idles here until the button is pressed
