2017-12-12 149 views
9

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

हालांकि मैं एक विशेष रेखा से फंस गया हूं क्योंकि मुझे वाक्यविन्यास या क्या चल रहा है। ताकि चर अंतिम कोड में शामिल है, भले ही वहाँ कुछ भी नहीं वास्तव में यह संदर्भ है

__root const uint32_t part_number @ ".part_number" = 701052; 

__root मुझे पता चला गया है। कॉन्स का मतलब है कि यह नहीं बदलेगा और राम के बजाए रोम में रखा जाएगा।

यह @ ".part_number" भाग है जिसका मैं पालन नहीं करता हूं। मुझे प्राप्त विशिष्ट त्रुटि प्रोग्राम में "stray '@' है।

मैं समझता हूं कि @ मानक सी का हिस्सा नहीं है, लेकिन मुझे इस वाक्यविन्यास को समझाते हुए कुछ भी भाग्य नहीं मिला है जो मैं देख रहा हूं।

यदि कोई इसे समझाने में सक्षम है, तो मैं वास्तव में इसकी सराहना करता हूं।

धन्यवाद

+1

मुझे संदेह है कि यह लिंकर के लिए संगत नामित निष्पादन योग्य अनुभाग में उस चर को रखने के लिए एक निर्देश है। जीसीसी समकक्ष 'सेक्शन' विशेषता होगी ('const uint32_t part_number __attribute__ ((सेक्शन (" .part_number ")) = 701052;') –

+2

पूर्ण उत्तर नहीं दे रहा है क्योंकि मैं निश्चित नहीं हूं, लेकिन ".part_number "मुझे बताता है कि यह शायद लिंकर को बता रहा है कि – Frank

+0

में वेरिएबल/वैल्यू को स्टोर करने के लिए कौन सा अनुभाग [इस उत्तर] का प्रयास करें (https://stackoverflow.com/questions/24114365/does-at-symbol-and-dollar-sign-has -न-स्पेशल-अर्थ-इन-सी-ओ-सी)। तीसरा उत्तर बताता है कि यह एक भौतिक पता – Psi

उत्तर

6

this KB entry ऐसा लगता है कि यह एक विशेष खंड में चर जगह लिंकर को निर्देश देने वाक्य रचना है से।

आप के बजाय एक नामित खंड में वस्तु जगह:

__no_init struct setup located_configuration @ "SETUP"; 

बराबर जीसीसी वाक्य रचना section विशेषता के माध्यम से है।

const uint32_t part_number __attribute__ ((section (".part_number")) = 701052; 
+0

धन्यवाद मैटेयो! – MidnightRover

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