2012-09-25 12 views
5

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

बहुत बहुत धन्यवाद।

उत्तर

4

यदि आप छूट को अक्षम करना चाहते हैं, तो preempt_disable() और preempt_enable() का उपयोग करें। आप बीच में आता है, अक्षम, उपयोग करना चाहते हैं local_irq_disable() और

spin_lock_irqsave इन दोनों को करना सामान्य रूप से होगा, हालांकि कुछ "वास्तविक समय" संवर्द्धन कभी कभी spinlocks शेड्यूल करने के लिए अनुमति देते हैं, तो यह हमेशा तुम क्या मतलब है कहने के लिए सबसे अच्छा है।

+0

धन्यवाद आपके उत्तर के लिए बहुत कुछ। मैं दोनों इंटरप्ट और प्रीम्प्शन को अक्षम करना चाहता हूं, और सुनिश्चित करता हूं कि मेरी रूटीन में से किसी एक बाधा के बिना निष्पादित किया जा सके। नियमित रूप से GPIO ड्राइवर (gpio_set/reset_value, gpio_direction_input/output) और udelay फ़ंक्शंस को कॉल करने की आवश्यकता होती है। इस मामले में, spin_lock_irqsave पर्याप्त सुरक्षित है? एक बार फिर धन्यवाद – user1697356

संबंधित मुद्दे

 संबंधित मुद्दे