मैं कुछ सी कोड पढ़ रहा हूं और कार्यक्रम में इस घोषणा पर आया हूं:
unsigned char serv_ctr @0x0002;
क्या कोई मुझे दस्तावेज़ीकरण की ओर इशारा कर सकता है, या समझा सकता है कि Mplab XC8 v1.35 C संकलक में "@ 0x0002" क्या है ?
मैं कुछ सी कोड पढ़ रहा हूं और कार्यक्रम में इस घोषणा पर आया हूं:
unsigned char serv_ctr @0x0002;
क्या कोई मुझे दस्तावेज़ीकरण की ओर इशारा कर सकता है, या समझा सकता है कि Mplab XC8 v1.35 C संकलक में "@ 0x0002" क्या है ?
जवाबों:
यह वैरिएबल को रखने के लिए एक निरपेक्ष पता निर्दिष्ट करना है।
से XC8 संकलक मैनुअल पेज 27, खंड 2.5.2 निरपेक्ष को संबोधित करते :
चर और कार्यों को
__at()
निर्माण का उपयोग करके एक पूर्ण पते पर रखा जा सकता है
......
2.5.2.2 प्रसार
8-बिट संकलक ने एक पूर्ण पते को निर्दिष्ट करने के लिए एक @ प्रतीक का उपयोग किया है
@
सी भाषा का एक सामान्य गैर-मानक विस्तार है जो आपको एक विशिष्ट पते पर एक चर घोषित करने की अनुमति देता है। इसका उपयोग मेमोरी-मैप्ड हार्डवेयर रजिस्टरों आदि के लिए किया जा सकता है। उस स्थिति में वैरिएबल भी घोषित किया जाना चाहिए volatile
, इसलिए आपका उदाहरण गलत है।
अन्य संकलक कुछ का उपयोग करते हैं जैसे __attribute__(section...
या #pragma ...
, यह सभी गैर-मानक सी।
एकमात्र तर्कसंगत कारण (यदि कोई हो), उपकरण श्रृंखलाएं ऐसा क्यों करती हैं, तो भद्दे डीबगर्स पर रजिस्टर डीबगिंग को सक्षम करना है। गैर-मानक सिंटैक्स यह सुनिश्चित करेगा कि रजिस्टर लिंकर आउटपुट और डीबग जानकारी का हिस्सा बन जाए। जो बदले में आपको भद्दे डिबगर में रजिस्टर को देखने की अनुमति देता है जैसे आप किसी अन्य चर को देख सकते हैं।
यदि आपके पास एक अच्छा डिबगर है, तो इसमें आपके विशिष्ट MCU का समर्थन और जागरूकता होगी। फिर आपको सी कोड में गैर-मानक बकवास की आवश्यकता नहीं है, लेकिन आप इसके बजाय शुद्ध, पोर्टेबल मानक सी लिख सकते हैं:
#define serv_ctr ( *(volatile uint8_t*)0x0002u )
@
कई मेमोरी स्पेस या अन्य मुद्दों के साथ नोटेशन टारगेट प्लेटफॉर्म का उपयोग किया है ताकि @
नोटेशन का उपयोग करते हुए घोषित की गई अधिकांश चीजें बिना एक्सटेंशन के किए जा सकने वाली किसी भी चीज़ से अलग व्यवहार करें।
एक छोटा विस्तार:
यह अब xc8 2.0 और उसके बाद से काम नहीं कर रहा है। अब आपको लिखना होगा:
unsigned char serv_ctr __at(0x0002);
serv_ctr
एक पूर्ण पते पर एक चर ( ) लगाने के लिए ( 0x0002
)।
XC8 2.0 के साथ @
सिंटैक्स का उपयोग करके अपने पुराने कोड को संकलित करना संभव है यदि आप "C90" प्रारूप का उपयोग करने के लिए संकलक सेटिंग्स सेट करते हैं। सेटिंग इस तरह दिखती है, यह "XC8 ग्लोबल ऑप्शंस" के तहत है और इसे "C मानक" कहा जाता है।
@
सिंटैक्स का समर्थन करते हैं , हालांकि, सिर्फ Mplab नहीं।