सॉफ्टवेयर रुकावट बनाम फ़ंक्शन


10

MCUs के साथ काम करने के लगभग 3 साल बाद भी मुझे नहीं पता है कि सॉफ़्टवेयर का उपयोग क्या बाधित होता है? मैंने एसटीएम 32 के साथ कई काम किए हैं और मैंने कभी सॉफ्टवेयर इंटरप्ट का उपयोग नहीं किया है। वास्तव में यह मेरे लिए एक बड़ा सवाल है:

जब हम किसी कार्य को करने के लिए एक साधारण फ़ंक्शन का उपयोग कर सकते हैं, तो क्या हमें एक सॉफ्टवेयर इंटरप्ट का उपयोग करना चाहिए? एक सॉफ्टवेयर रुकावट और एक फ़ंक्शन के बीच अंतर क्या हैं?

हर बार जब आप चाहें, तो आप एक फ़ंक्शन कह सकते हैं (जो आपने अपनी नौकरी के लिए लिखा है)। एक साधारण फ़ंक्शन के बजाय सॉफ़्टवेयर इंटरप्ट का उपयोग करने के लिए कुछ लाभ होने चाहिए। मुझे यकीन नहीं है, लेकिन मुझे लगता है कि सॉफ्टवेयर में रुकावट के लिए एक लाभ है: आप एक सॉफ्टवेयर रुकावट के लिए प्राथमिकता दे सकते हैं, फिर आप अपने कार्य को तोड़ने वाले हार्डवेयर व्यवधान से बचने के लिए सॉफ़्टवेयर व्यवधान को उच्च प्राथमिकता दे सकते हैं।


1
मुझे लगता है कि व्यवधानों का उपयोग करने का मुख्य उद्देश्य यह है कि आप अन्य महत्वपूर्ण कार्य कर सकते हैं, जबकि कुछ और होने की प्रतीक्षा कर रहे हैं, और जब समय हमेशा स्थिर नहीं होगा। इसके अलावा, मुझे लगता है कि अधिकांश मामलों में मतदान की तुलना में यह थोड़ा तेज है।
MrPhooky

1
@MrPhooky यह हार्डवेयर बाधित है जिसके बारे में आप बात कर रहे हैं। ओपी सॉफ्टवेयर इंटरप्ट के बारे में बात कर रहा है।
ब्रांह

जवाबों:


19

किसी फ़ंक्शन और सॉफ़्टवेयर व्यवधान के बीच मुख्य अंतर वह है जिसे संदर्भ के रूप में जाना जाता है

  • आपके मुख्य कार्यक्रम के संदर्भ में एक फ़ंक्शन चलता है।
  • एक अवरोधक बाधा हैंडलर के संदर्भ में चलता है।

एक सरल प्रणाली पर यह कोई वास्तविक अंतर नहीं हो सकता है, और सॉफ़्टवेयर इंटरप्ट को बस ROM में हार्ड कोडित पुस्तकालय दिनचर्या प्रदान करने के एक सुविधाजनक तरीके के रूप में इस्तेमाल किया जा सकता है - आपको हर दिनचर्या का पता, केवल आईडी कोड और पता की आवश्यकता नहीं है मुख्य प्रवेश बिंदु। यह आपके कोड को अधिक पोर्टेबल बनाता है।

हालाँकि, अधिक जटिल प्रणालियों पर सॉफ्टवेयर का अंतर कर्नेल संदर्भ के रूप में जाना जाने वाला पूरी तरह से अलग वातावरण में चल सकता है । आम तौर पर आपका एप्लिकेशन एक संरक्षित उपयोगकर्ता संदर्भ में चलता है जिसकी संसाधनों तक सीमित पहुंच होती है। केवल जब कर्नेल संदर्भ में चल रहा है तो आप अधिक जटिल कार्य कर सकते हैं - वास्तव में कुछ सिस्टम यहां तक ​​कि सीमाएं जो निर्देश निष्पादित किए जा सकते हैं, इसलिए आपको कर्नेल संदर्भ में कोड को ट्रिगर करने के लिए एक तंत्र की आवश्यकता है - और इसके लिए एक रुकावट का उपयोग किया जाता है।


1
इसके अलावा, व्यवधान मनमाने ढंग से एक प्रोग्राम की प्रगति को रोक सकता है ताकि सिस्टम कुछ और कर सके (जैसे हार्डवेयर इंटरप्ट)। आपके कार्यक्रमों को इसे ध्यान में रखने की आवश्यकता नहीं है, क्योंकि, आपके कार्यक्रम के दृष्टिकोण से, फ़ंक्शन की स्थिति अपरिवर्तित होने पर अपरिवर्तित होती है। पुराने सिस्टम पर, इस प्रकार TSR (टर्मिनेट / स्टे रेजिडेंट) प्रोग्राम टाइमर या घड़ी की बाधा को बंद करके मल्टीटास्किंग का अनुकरण करते हैं। IOPL स्तरों के बिना भी, सिस्टम घड़ी को अद्यतित रखते हुए, कहने का एक लाभ था।
फेयरफॉक्स

4
शायद यह भी ध्यान दें कि उन "सॉफ्टवेयर इंटरप्ट" को "सिंक्रोनस इंटरप्ट" के रूप में भी संदर्भित किया जाता है, क्योंकि एप्लिकेशन कोड ठीक से जानता है कि ऐसा कब और क्यों होता है, "असिंक्रोनस इंटरप्ट" के विपरीत, जो कि, के दृष्टिकोण से हो सकता है। आवेदन, मूल रूप से अनचाही तरीके से किसी भी समय होता है।
जिमीबी

@ हन्नोइंदर: मुझे लगता है कि ओपी कॉर्टेक्स-एम 3 वीथर्ड इंटरप्ट कंट्रोलर के लिए बाधित अनुरोध पोस्ट करने के बारे में बात कर रहा है; यदि उच्च-प्राथमिकता वाले व्यवधान के लिए कोड निम्न-प्राथमिकता वाला होता है, तो अनुरोध कुछ समय बाद तक स्थगित कर दिया जाएगा जब सभी उच्च-प्राथमिकता वाले व्यवधान समाप्त हो गए हों।
सुपरकैट

12

एक कम प्राथमिकता पर एक रुकावट कार्य को समाप्त करने के लिए सॉफ्टवेयर इंटरप्ट का उपयोग किया जा सकता है। बहुत अधिक विलंबता से बचने के लिए समय पर महत्वपूर्ण कोडिंग को अक्सर एक उच्च बाधित प्राथमिकता दी जाती है। एक बार समयावधि महत्वपूर्ण भाग समाप्त हो जाने के बाद, अतिरिक्त कार्य हो सकते हैं जो मुख्य लूप के लिए बहुत महत्वपूर्ण समय हो सकते हैं, लेकिन अन्य उच्च प्राथमिकता वाले अवरोधों को पकड़ने के लिए उतने महत्वपूर्ण नहीं हैं। निम्न-प्राथमिकता वाले सॉफ़्टवेयर व्यवधान को ट्रिगर करना इसे पूरा कर सकता है।

उदाहरण के लिए, मान लें कि आपके पास अपने स्वयं के टाइमर के साथ कई स्टेपर मोटर्स हैं। टाइमर की गड़बड़ी को कदम घबराना कम करने के लिए एक उच्च प्राथमिकता दी जाती है। सबसे अधिक समय महत्वपूर्ण कार्य एक चरण पल्स की स्थापना या समाशोधन या चरण आउटपुट को आगे बढ़ाने के रूप में सरल हो सकता है। अतिरिक्त कार्यक्षमता की आवश्यकता हो सकती है जैसे त्वरण रैंप की गणना, सेंसर प्रसंस्करण आदि। चूंकि इसे हर चरण पर संसाधित करने की आवश्यकता होती है, इसलिए इसे मुख्य () से संसाधित करना उचित नहीं हो सकता है क्योंकि मुख्य लूप समय बहुत लंबा हो सकता है। ये अतिरिक्त कार्य निम्न-प्राथमिकता वाले सॉफ़्टवेयर व्यवधान द्वारा संसाधित किए जा सकते हैं ताकि अन्य उच्च-प्राथमिकता वाले स्टेपर चैनलों की विलंबता न बढ़े।

एक सॉफ्टवेयर रुकावट और एक फ़ंक्शन के बीच अंतर क्या हैं?

किसी फ़ंक्शन को जहां भी बुलाया जाता है, वहां से तुरंत कॉल किया जाता है और यदि किसी रुकावट से कॉल किया जाता है तो वर्तमान रुकावट प्राथमिकता स्तर को नहीं बदलता है। एक सॉफ्टवेयर रुकावट एक अवरोध ट्रिगर है जो उस बाधा को बुलाएगा जब प्राथमिकता आती है। यदि कोई फ़ंक्शन कॉल उच्च-प्राथमिकता वाले व्यवधान के अंत में डाला गया था, तो फ़ंक्शन उस उच्च-प्राथमिकता के भीतर समाहित हो जाएगा। निम्न-प्राथमिकता वाले सॉफ़्टवेयर रुकावट को ट्रिगर करके और फिर उच्च-प्राथमिकता वाले व्यवधान से लौटकर, कार्यक्षमता को नई (कम) प्राथमिकता पर बुलाया जाता है।


2
एक अन्य सामान्य पैटर्न में टाइम-क्रिटिकल सामान को संभालने के लिए 100KHz इंटरप्ट हो सकता है, और 1kHz टाइमर टिक की भी आवश्यकता होती है, लेकिन दो अलग-अलग टाइमर उपलब्ध नहीं होते हैं। यह कहने के लिए 100kHz रुकावट दिनचर्या के लिए बहुत अधिक ओवरहेड नहीं लेता है, if ((timer_count--) & 0x80000000) SET_TICK_INTERRUPT_FLAG(); else timer_count = temp-1; दूसरा रुकावट तब अपनी बात कर सकता है और बीच में थोड़ी देर के लिए निष्क्रिय रूप से अक्षम जोड़कर टाइमर_काउंट कर सकता है; यहां तक ​​कि अगर 1kHz दिनचर्या को निष्पादित करने के लिए 10us से अधिक का समय लगता है, तो यह 100kHz को बाधित नहीं करेगा।
सुपरकैट

इसी तरह से, मैंने एक छद्म-अनुसूचक के रूप में सरल सिस्टम (पूर्ण RTOS के बिना) में सॉफ़्टवेयर अवरोधों का उपयोग किया है, जहां ISRs द्वारा हार्डवेयर आवश्यकताओं को नियंत्रित किया जाता है, लेकिन कॉलबैक फ़ंक्शन और अन्य लंबे कार्यों को जो परिवर्तनों के जवाब में किया जाता है वह हार्डवेयर राज्य को सॉफ्टवेयर रुकावट के लिए भेजा जाता है।
ईविल डॉग पाई

आपने मूल रूप से "नीचे आधा" की भिन्नता का वर्णन किया है। क्या आपके पास इसे "सॉफ़्टवेयर इंटरप्ट" भी कहा जाता है? यह माजेंको के जवाब से काफी अलग है, और सवाल एआरएम को टैग किया गया है - वास्तुकला में वास्तव में एसडब्ल्यूआई (सॉफ्टवेयर इंटरप्ट) निर्देश है।
डेमन

3
@ मुझे यकीन नहीं है कि आपको किस तरह के संदर्भ की आवश्यकता है। इसे "सॉफ्टवेयर इंटरप्ट" कहा जाता है क्योंकि इसे प्राप्त करने के लिए इसका उपयोग किया जाता है। एआरएम के संदर्भ में, ओपी ने विशेष रूप से STM32 को संदर्भित किया और RM0008 संदर्भ मैनुअल के लिए एक लिंक प्रदान किया। यह एक एआरएम कोर संदर्भ मैनुअल नहीं है। RM0008 में कवर किया गया एकमात्र "सॉफ्टवेयर इंटरप्ट" EXTI_SWIER (सॉफ्टवेयर इंटरप्ट इवेंट रजिस्टर) है, जिसका इस्तेमाल सॉफ्टवेयर के व्यवधान उत्पन्न करने के लिए किया जा सकता है या नहीं, वास्तविक हार्डवेयर पिन का उपयोग इंटरप्ट के लिए किया जाता है। मैंने व्यक्तिगत रूप से SWI (SWC) निर्देश का उपयोग नहीं किया है।
टुट

धन्यवाद! इस जानकारी में से कुछ को उत्तर में शामिल करना अच्छा हो सकता है, यह स्पष्ट करने के लिए कि यह कौन सा "सॉफ्टवेयर इंटरप्ट" है।
domen

7

माजेंको के जवाब पर थोड़ा विस्तार करने के लिए, ऑपरेटिंग सिस्टम, विशेष रूप से सिस्टम कॉल इंटरफ़ेस को लागू करने के लिए सॉफ्टवेयर इंटरप्ट का उपयोग किया जाता है। इसका मतलब है कि फ़ंक्शन कॉल करने के लिए अनुप्रयोगों को ऑपरेटिंग सिस्टम के साथ लिंक करने की आवश्यकता नहीं है, और संदर्भ स्विच ओएस को हार्डवेयर तक पहुंच सीमित करने और संरक्षित मेमोरी जैसी चीजों का लाभ लेने की अनुमति देता है।

यदि आप OS का उपयोग नहीं कर रहे हैं और आप MCU पर सभी कोड को नियंत्रित करते हैं, तो आपको संभवतः सॉफ़्टवेयर अवरोधों का उपयोग करने की आवश्यकता नहीं है। (हालांकि जैसा कि टुट ने उल्लेख किया है, उनके अन्य उपयोग हो सकते हैं।)

लिनक्स और MS-DOS 86 उपयोग सॉफ्टवेयर बीच में आता है पर सिस्टम कॉल इंटरफेस, तो मैं एक उदाहरण के रूप उन लोगों के लिए लिंक कर देंगे।


1
और कई मामलों में जहां ओएस नरम रुकावट का उपयोग करता है, वे जीवन को सरल बनाने के लिए कार्यों में लिपटे होते हैं।
hildred

1
मैं अभी भी डीओएस के लिए चीजें (एकदम नया) बनाता हूं, और इंट 21 हैंडलर्स से बहुत परिचित हूं। लगभग हर चीज जो मुझे चाहिए वह है I / O वार को DOS ISR से नियंत्रित किया जाता है।
R Drast

कृपया ध्यान दें कि लिनक्स के लिए उद्धृत पृष्ठ 1993-1996 का है।
बजे एक CVn

मैंने लिंक को अप-टू-डेट एक के साथ बदल दिया।
एडम हुन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.