2010-03-05 8 views
10

आप एक सूचक को एक विशिष्ट स्मृति पता कैसे आवंटित करते हैं?एक विशिष्ट निश्चित पते के लिए सूचक

एक माइक्रोक्रोनरोलर में विशेष फ़ंक्शन रजिस्टर्स जैसे एवीआर एम 128 ने पते तय किए हैं, एवीआर जीसीसी आईओएच हेडर फ़ाइल में एसएफआर को परिभाषित करता है, लेकिन मैं इसे स्वयं संभालना चाहता हूं।

उत्तर

28

निश्चित रूप से, कोई समस्या नहीं है। तुम बस इसे सीधे एक चर को असाइन कर सकते हैं:

volatile unsigned int *myPointer = (volatile unsigned int *)0x12345678; 

क्या मैं आमतौर पर करते हैं की घोषणा एक स्मृति-मैप की आई/ओ मैक्रो है:

#define mmio32(x) (*(volatile unsigned long *)(x)) 

और फिर एक हेडर फाइल में मेरी रजिस्टरों को परिभाषित:

#define SFR_BASE (0xCF800000) 
#define SFR_1  (SFR_BASE + 0x0004) 
#define SFR_2  (SFR_BASE + 0x0010) 

और फिर उन्हें का उपयोग करें:

unsigned long registerValue = mmio32(SFR_1); // read 
mmio32(SFR2) = 0x85748312;     // write 
+2

मैं w एक सामान्य शून्य पॉइंटर का उपयोग किया होगा, जब तक कि उस स्थान का डेटा एक हस्ताक्षरित int नहीं है। –

+1

स्मृति-मैप किए गए I/O पतों को 'अस्थिर' के रूप में घोषित करना आम तौर पर एक अच्छा विचार है। –

+0

@ सेन, वह एक मेमोरी मैप किए गए रजिस्टर तक पहुंचना चाहता है। आप 'शून्य' सूचक को अस्वीकार नहीं कर सकते हैं, इसका क्या उपयोग होगा? –

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