2012-05-14 33 views
5

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

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

या क्या मैं मूल रूप से पूछ रहा हूं कि मैं एक स्क्रूड्राइवर के रूप में एक सर्क का उपयोग कैसे कर सकता हूं? (यानी ऐसा नहीं है कि ऐसा नहीं करता है और यही कारण है पृथ्वी पर आप चाहेगा?)

सी में एक उदाहरण (अपरीक्षित, नहीं उपयोग के लिए) की तरह कुछ होगा:

volatile struct { 
    uint32_t mfr_id; 
    uint32_t prod_id; 
    uint32_t ctl; 
    uint32_t dummy[5]; 
    ... 
} * pDev; 
hFile = open('/dev/bridge', O_RDWR) 
pDev = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, hFile, 0); 
assert(pDev->mfr_id == 0x12345678); 
assert(pDev->prod_id == 0xDEADBEEF); 

uint32_t temp = pDev->ctl; 
temp &= CTL_ACCESS_MASK | CTL_SHIFT_MASK; 
temp |= CTL_ACCESS_RO | CTL_SHIFT_5; 
pDev->ctl = temp; 
+1

मुझे जवाब नहीं पता, लेकिन अगर इसके लिए पहले से कोई लाइब्रेरी नहीं है, तो एक बनाना एक अच्छी परियोजना होगी! – japreiss

+0

आपको ऐसा करने की आवश्यकता क्यों है? कृपया उस वास्तविक समस्या का विवरण प्रदान करें जिसे आप हल करने का प्रयास कर रहे हैं। (मुझे लगता है कि आप एक धारावाहिक या समांतर बंदरगाह से बात करने की कोशिश कर रहे हैं; इसके लिए पुस्तकालय हैं।) –

+1

[बिटस्ट्रिंग] (http://code.google.com/p/python-bitstring/) मॉड्यूल है बिटफील्ड मैनिपुलेशन पर अच्छा .... लेकिन डेटा को पहले स्थान पर लाने में आपकी मदद नहीं करता है। – larsks

उत्तर

0

मैं सबसे आसान तरीका लगता है जाने के लिए सी में एक्सेसर फ़ंक्शंस लिखना है और उन्हें पायथन से (सीटीपीएस और साइथन के बीच, पायथन से सी कोड को कॉल करना मुश्किल नहीं है)।