मुझे माफ़ कर दें यदि इस प्रश्न का उत्तर पहले ही मिल गया हो, लेकिन मुझे इस पृष्ठ पर या व्यापक इंटरनेट पर कोई उत्तर नहीं मिल पा रहा था।
मैं निचले स्तर की प्रोग्रामिंग के बारे में सभ्य ज्ञान के साथ एक अनुभवी डेवलपर हूं, लेकिन एम्बेडेड विकास के लिए अपेक्षाकृत नया हूं। मैं एक ST-NUCLEO144 बोर्ड का उपयोग करके खुद को एम्बेडेड सिस्टम डेवलपमेंट सिखा रहा हूं, जिसमें एक STM32F746ZG MCU है। एक सवाल जो मुझे गैर-स्पष्ट लगता है वह यह है कि एक रजिस्टर में तार्किक रूप से संबंधित बिट फ़ील्ड विभिन्न स्थानों में क्यों हो सकते हैं।
एक उदाहरण USART_CR1
STM32746ZG पर रजिस्टर है। M0
और M1
बिट क्षेत्रों को एक साथ USART TX / RX में शब्द की लंबाई, की एक संयुक्त 2-बिट मूल्य को नियंत्रित 0b00
निर्दिष्ट 8-बिट, 0b01
, निर्दिष्ट करता है 9-बिट, आदि यह सब काफी सरल है, सिवाय इसके कि M0
बिट 12 पर है और M1
बिट में है २ this ... यह क्यों है?
क्या यह विरासत डिजाइन कारणों के लिए है, जैसे कि पहले आरक्षित स्थान में एक नई सुविधा डाली गई थी? क्या यह चिप डिजाइन से संबंधित कारणों के लिए है, कि मैं विचार नहीं कर रहा हूं, या क्या इसका कोई बड़ा उद्देश्य है जो मैं नहीं देख रहा हूं?
जाहिर है यह बिट-मास्किंग से उबरने के लिए बहुत तुच्छ है, लेकिन मैं सिर्फ उत्सुक हूं।