आनुभविक परिणाम!
जबकि अन्य उत्तर विचारशील और सुविचारित हैं, वे सभी अधूरे हैं या केवल अनुमान हैं। जहां दस्तावेज अस्पष्ट है, हमें प्रयोग करना चाहिए और हमें हर मामले का परीक्षण करना चाहिए।
यह प्रश्न एक निर्णायक उत्तर के योग्य है, तो आइए एक AVR को बाहर निकालें और कुछ बिट्स सेट करना शुरू करें!
प्रक्रिया
परीक्षण करने के लिए, मैंने थोड़ा Arduino (ATMEGA328P) प्रोग्राम बनाया जो होगा ...
- एक ISR सेटअप जो कभी नहीं लौटेगा (
while (1)
)
- ISR को एक ऐसे स्रोत को सौंपा जिसे मैं सॉफ्टवेयर में ट्रिगर कर सकता हूं (
INT0
कम होता जा रहा है)
- विकलांग व्यवधान
- सक्षम किया गया और व्यवधान को ट्रिगर किया गया ताकि यह लंबित हो
मैंने एक परीक्षण बिस्तर का उपयोग किया था जो कि व्यवधान सक्षम होने के बाद एकल निर्देश में एक एलईडी चालू करेगा। परीक्षण बिस्तर में इंटरप्ट को सक्षम करने और एलईडी की जांच करने के विभिन्न तरीकों की कोशिश करके, मैं बता सकता हूं कि सक्षम करने के बाद निर्देश निष्पादित किया गया था या नहीं।
अगर एलईडी पर नहीं आया था, तो मुझे पता है कि ISR निष्पादित (और लॉक) बाधित होने के तुरंत बाद सक्षम थे।
अगर एलईडी पर आया था, तो मुझे पता है कि अगले निर्देश को आईएसआर के बुलाए जाने से पहले निष्पादित करने की अनुमति दी गई थी।
परिणाम
SEI
निर्देश (बेस केस)
कोड:
sei
परिणाम: पर एलईडी। अनुदेश का पालन किया गया।
OUT
अनुदेश
कोड:
in r16,0x3f // Get SREG
ori r16,128 // Set I bit
out 0x3f,r16 // Save back to SREG
परिणाम:
नेतृत्व। अनुदेश का पालन किया गया।
ST
अनुदेश
कोड:
clr r29 // Clear Y high byte
ldi r28,0x5f // Set Y low byte to point to SREG
ld r16, Y // Get SREG
ori r16,128 // Set I bit
st Y,r16 // Put SREG
परिणाम:
नेतृत्व। अनुदेश का पालन किया गया।
निष्कर्ष!
प्रश्न: क्या एसईआई निर्देश या स्थिति रजिस्टर की प्रतीक्षा है?
एक: ऐसा लगता है कि बदलते I
में बिट SREG
से एक है 0
एक करने के लिए 1
निम्नलिखित अनुदेश अगले निष्पादित करने के लिए भले ही एक लंबित बाधा है, क्या अनुदेश बिट सेट करने के लिए प्रयोग किया जाता है की परवाह किए बिना अनुमति देगा।
टिप्पणियाँ
यह वास्तव में बहुत सारी जटिलताओं के साथ एक बहुत ही दिलचस्प सवाल में बदल गया। यदि आप रुचि रखते हैं, तो वह विवरण ...
http://wp.josh.com/2016/01/05/different-ways-to-set-i-bit-in-avr-sreg-besides-sei/