एमसीयू रजिस्टरों में तार्किक रूप से संबंधित बिट फ़ील्ड अलग-अलग स्थानों में अक्सर क्यों होते हैं?


9

मुझे माफ़ कर दें यदि इस प्रश्न का उत्तर पहले ही मिल गया हो, लेकिन मुझे इस पृष्ठ पर या व्यापक इंटरनेट पर कोई उत्तर नहीं मिल पा रहा था।

मैं निचले स्तर की प्रोग्रामिंग के बारे में सभ्य ज्ञान के साथ एक अनुभवी डेवलपर हूं, लेकिन एम्बेडेड विकास के लिए अपेक्षाकृत नया हूं। मैं एक ST-NUCLEO144 बोर्ड का उपयोग करके खुद को एम्बेडेड सिस्टम डेवलपमेंट सिखा रहा हूं, जिसमें एक STM32F746ZG MCU है। एक सवाल जो मुझे गैर-स्पष्ट लगता है वह यह है कि एक रजिस्टर में तार्किक रूप से संबंधित बिट फ़ील्ड विभिन्न स्थानों में क्यों हो सकते हैं।

एक उदाहरण USART_CR1STM32746ZG पर रजिस्टर है। M0और M1बिट क्षेत्रों को एक साथ USART TX / RX में शब्द की लंबाई, की एक संयुक्त 2-बिट मूल्य को नियंत्रित 0b00निर्दिष्ट 8-बिट, 0b01, निर्दिष्ट करता है 9-बिट, आदि यह सब काफी सरल है, सिवाय इसके कि M0बिट 12 पर है और M1बिट में है २ this ... यह क्यों है?

क्या यह विरासत डिजाइन कारणों के लिए है, जैसे कि पहले आरक्षित स्थान में एक नई सुविधा डाली गई थी? क्या यह चिप डिजाइन से संबंधित कारणों के लिए है, कि मैं विचार नहीं कर रहा हूं, या क्या इसका कोई बड़ा उद्देश्य है जो मैं नहीं देख रहा हूं?

जाहिर है यह बिट-मास्किंग से उबरने के लिए बहुत तुच्छ है, लेकिन मैं सिर्फ उत्सुक हूं।


1
UART के मामले में विशेष रूप से, यह बहुत पुरानी तकनीक है, इसलिए इसका कारण लगभग हमेशा पीछे की संगतता है। यही कारण है कि UART ने बिट-फ़ील्ड को पंजीकृत किया है, जिसमें अक्सर भद्दे नाम होते हैं, जो सभी नामस्थानों को टक्कर देते हैं।
लुंडिन

जवाबों:


13

क्या यह विरासत डिजाइन कारणों के लिए है, जैसे कि पहले आरक्षित स्थान में एक नई सुविधा डाली गई थी?

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

उदाहरण के लिए, यहां USART_CR1पुराने STM32F1xx परिवार का रजिस्टर है।


STM32F1xx USART_CR1 बिट उपयोग पंजीकृत करें

चित्र 1. STM32F10xxx USART_CR1 रजिस्टर उपयोग

छवि स्रोत: STM32F10xxx परिवार संदर्भ मैनुअल RM0008, अनुभाग 27.6.4


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

जैसा कि आपने कहा, नए STM32F7 पर (उदाहरण के लिए, STM32F4 भी) USART में अब 3 शब्द लंबाई विकल्प (7, 8 और 9 बिट्स) हैं और इसलिए दूसरे विन्यास बिट की जरूरत है - बिट 12 M0, M1अब बिट 28 में है। (जैसा कि आप ऊपर देखते हैं, पहले STM32F1 रजिस्टर मैप में आरक्षित है)।


STM32F74xxx USART_CR1 बिट उपयोग पंजीकृत करें

चित्रा 2. STM32F74xxx USART_CR1 रजिस्टर उपयोग

छवि स्रोत: STM32F75xxx और STM32F74xxx परिवार संदर्भ पुस्तिका RM0385, धारा 31.8.1


वे नए M1बिट्स को रजिस्टर बिट्स 11 या 13 में नहीं डाल सकते थे , बिना चल रहे रजिस्टर बिट्स पहले से ही अन्य कार्यों के लिए उपयोग किए जाते थे, और इसलिए मौजूदा कोड (जैसे एसटीएम 32 एफ 1) के साथ पीछे की संगतता को हटाते थे जो उनका उपयोग करते थे।

इसलिए उन्होंने कुछ पिछड़ेपन को बनाए रखने की कोशिश की है, जिससे अप्रत्याशित स्थानों में नए रजिस्टर बिट्स को जोड़ा जा रहा है।

8250 से 16550 तक स्टैंडअलोन यूएआरटी के लिए रजिस्टर मैपिंग को बनाए रखना, नए रजिस्टरों के साथ रजिस्टर मैप में कहीं और जोड़ा गया, एक और उदाहरण था।


1
इस बिंदु को इंगित करने के लिए समय निकालने के लिए बहुत बहुत धन्यवाद। शायद मुझे पूछने से पहले पुराने एफ परिवार संदर्भ सामग्री की जांच करनी चाहिए थी। मुझे लगा कि कहानी में और भी कुछ हो सकता है।
शाम

1
@ajxs - आपका स्वागत है। मैं केवल अपने अनुभवों से बोल सकता हूं (उन पुराने UARTS एक और अच्छा उदाहरण थे)। यह हमेशा संभव है कि किसी और के पास अन्य प्रासंगिक अनुभव होंगे, और उन्हें उत्तर लिखने में समय खर्च करने से रोका जा सकता है, अगर प्रश्न में पहले से ही एक स्वीकृत उत्तर है। तो आप हमेशा मेरे जवाब को "अस्वीकार" कर सकते हैं, किसी और के लिए अलग-अलग दृष्टिकोणों से जवाब देने के लिए एक दिन प्रतीक्षा करें (कहें), और देखें कि क्या आपको लगता है कि वे सवाल का जवाब मुझसे बेहतर देते हैं? यदि नहीं, तो आप हमेशा मेरा फिर से स्वीकार कर सकते हैं :-) मैं नहीं चाहता कि आप अन्य संभावित उत्तर दृष्टिकोण खो दें।
शाम

2
यह उचित लगता है, मैं आपकी सलाह लूंगा! सुझाव देने के लिए इतना विनम्र होने के लिए धन्यवाद। अगर कल तक कोई बेहतर जवाब नहीं आया, तो मैं आपकी बात मान लूंगा। एक बार फिर धन्यवाद।
ajxs

5

आप के साथ सही हैं

".. विरासत डिजाइन कारणों के लिए, जैसे कि एक नई सुविधा पहले से आरक्षित स्थान में डाली गई थी .."।

जहां तक ​​मुझे पता है, ज्यादातर स्थितियों में बिट पोज़िशन्स का कोई डिज़ाइन प्रभाव (चिप कार्यान्वयन में मेरा मतलब है) नहीं होता है। डिजाइनर आमतौर पर जो कुछ भी उपलब्ध है उसका उपयोग करने की कोशिश करते हैं। और कुछ मामलों में जब आप चौड़ाई आदि बढ़ाने की कोशिश कर रहे हैं।

हालांकि, कहा गया है कि कुछ मामले ऐसे हैं जहां बिट पदों को जानबूझकर दूर रखा जाता है। विशेष रूप से बिट्स के लिए जो कि महत्वपूर्ण हैं और अनजाने में लिखे गए (गलत स्थिति / मुखौटे के कारण, या सुरक्षा के लिए तले हुए) द्वारा संशोधित नहीं किए जा सकते हैं, जिससे सिस्टम अवांछित स्थिति में समाप्त हो सकता है।

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