2013-01-16 16 views
8

मैं एक एम्बेडेड डिवाइस पर काम कर रहा हूं, और कुछ कोड है जो मूल रूप से आईएआर कंपाइलर का उपयोग करके संकलित किया गया था।जीसीसी में '__IO' निर्देश क्या है?

मैं पुन: संयोजित करने के लिए कोशिश कर रहा हूँ जीसीसी संकलक का उपयोग कर कोड कहा।

एक विशेष विवरण है: typedef __IO, जो कि संकलित नहीं होता है ("अपरिचित प्रतीक त्रुटि")।

किसी को भी सुझाव है कि कर सकते हैं कि कैसे मैं इस बयान को ठीक से संकलित करने के लिए मिल सकता है?

+2

'#define __IO volatile' या बस' #define __IO ' –

+0

@Eddy_Em: उत्तर के रूप में उत्तर पोस्ट के रूप में उत्तर दें। – Clifford

+1

यदि यह एक अपरिचित प्रतीक है तो आप कैसे जानते हैं कि यह एक टाइपिफ़ है !? (यह)। जिस कोड का आप उल्लेख कर रहे हैं उसके कुछ उदाहरण उपयोगी हो सकते हैं। – Clifford

उत्तर

10

यदि यह मान्यता प्राप्त नहीं है यह होगा, क्योंकि एक उचित प्रणाली परिभाषा युक्त हैडर शामिल नहीं किया गया है।

यह चिप समर्थन हैडर toolchain के साथ प्रदान की गई फ़ाइल में परिभाषित किया जाएगा। यह प्रकार क्वालीफायर, या बल्कि एक मैक्रो (#define) है कि एक प्रकार क्वालीफायर के लिए विस्तार होगा है। इस प्रकार यह उदाहरण के लिए प्रयोग किया जाता है:

__IO uint8_t CSSR; 

यहाँ uint8_t, प्रकार है, इसलिए __IO वास्तव में नहीं एक typedef हो सकता है, क्योंकि यह नहीं किया जाता है, जहां एक प्रकार मान्य है। __IO मैक्रो जो भी विशेष कंपाइलर को सही I/O एक्सेस और एड्रेसिंग सुनिश्चित करने के लिए आवश्यक है, विस्तारित करता है। ठेठ मामले में जहां मैं/हे स्मृति मैप किया गया है में, यह बस volatile को विस्तार होगा के बाद से सभी मैं/हे अस्थिर घोषित किया जाना चाहिए सुनिश्चित करने के लिए स्पष्ट पहुंच बाहर अनुकूलित नहीं कर रहे हैं।

यदि आप सुनिश्चित करना चाहते हैं, तो आईएआर उपकरण का डेमो संस्करण डाउनलोड करें और हेडर फाइलों में एक नज़र डालें, यह आपके विशेष आर्किटेक्चर के लिए कैसे परिभाषित किया गया है। अन्यथा आप #define __IO volatile

7

_IO का अर्थ सी भाषा में अस्थिर है ... जो कोड को अनुकूलित नहीं करेगा और _IO का उपयोग करके चर के लिए जो मूल्य कहा गया है, वह अप्रत्याशित होगा या संकलक और उपयोगकर्ता के ज्ञान के बिना बदल जाएगा

1

यह एक पुराना सवाल है, लेकिन अगर कोई एआरएम माइक्रोकंट्रोलर के लिए यह जानना चाहता है, तो आप देख सकते हैं कि परिभाषा सीएमएसआईएस पुस्तकालय में उपलब्ध है। उदाहरण के लिए, __IO के रूप में प्रांतस्था-एम 4 के लिए इस प्रकार परिभाषित किया गया है:

#define  __IO volatile    /*!< Defines 'read/write' permissions */ 

पूर्ण ब्लॉक नीचे (Source) चिपकाया प्रति है:

#ifdef __cplusplus 
    #define __I  volatile    /*!< Defines 'read only' permissions */ 
#else 
    #define __I  volatile const  /*!< Defines 'read only' permissions */ 
#endif 
#define  __O  volatile    /*!< Defines 'write only' permissions */ 
#define  __IO volatile    /*!< Defines 'read/write' permissions */ 

/* following defines should be used for structure members */ 
#define  __IM  volatile const  /*! Defines 'read only' structure member permissions */ 
#define  __OM  volatile   /*! Defines 'write only' structure member permissions */ 
#define  __IOM volatile   /*! Defines 'read/write' structure member permissions */ 
संबंधित मुद्दे