निश्चित रूप से, कोई समस्या नहीं है। तुम बस इसे सीधे एक चर को असाइन कर सकते हैं:
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
स्रोत
2010-03-05 19:13:10
मैं w एक सामान्य शून्य पॉइंटर का उपयोग किया होगा, जब तक कि उस स्थान का डेटा एक हस्ताक्षरित int नहीं है। –
स्मृति-मैप किए गए I/O पतों को 'अस्थिर' के रूप में घोषित करना आम तौर पर एक अच्छा विचार है। –
@ सेन, वह एक मेमोरी मैप किए गए रजिस्टर तक पहुंचना चाहता है। आप 'शून्य' सूचक को अस्वीकार नहीं कर सकते हैं, इसका क्या उपयोग होगा? –