2011-03-07 25 views
6

से सेगमेंट की शुरुआत और आकार को संदर्भित करने के लिए मैं एक आईएआर कंपाइलर से जीसीसी में एआरएम चिप के लिए एक प्रोग्राम पोर्ट कर रहा हूं।सी कोड

मूल कोड में, आईएआर विशिष्ट ऑपरेटरों जैसे __segment_begin और __segment_size का उपयोग कुछ स्मृति खंडों की क्रमशः प्रारंभ और आकार प्राप्त करने के लिए किया जाता है।

क्या जीसीसी के साथ एक ही काम करने का कोई तरीका है? मैंने जीसीसी मैनुअल की खोज की है लेकिन कुछ भी प्रासंगिक नहीं ढूंढ पा रहा था।


अधिक विवरण:
प्रश्न में स्मृति क्षेत्रों में निर्धारित स्थानों में होना तो यह है कि कार्यक्रम चिप पर कुछ बाह्य उपकरणों के साथ सही ढंग इंटरफेस कर सकते हैं। इस मेमोरी का पता पाने के लिए मूल कोड __segment_begin ऑपरेटर का उपयोग करता है और __segment_size यह सुनिश्चित करने के लिए कि यह इस स्मृति को ओवरफ़्लो नहीं करता है।

मैं इन मेमोरी सेगमेंट की शुरुआत और अंत को इंगित करने के लिए चर जोड़ने के द्वारा समान कार्यक्षमता प्राप्त कर सकता हूं, लेकिन यदि जीसीसी के समान ऑपरेटर थे जो संकलक निर्भर कोड की मात्रा को कम करने में मदद करेंगे, तो मुझे लिखना और बनाए रखना होगा।

+0

क्या आप उन सेगमेंट पते और आकारों के लिए और किस सेगमेंट के लिए आवश्यक हैं, इस बारे में अधिक विशिष्ट हो सकते हैं? – JeSuisse

उत्तर

2

लिंकर के ध्वज --section-start के बारे में क्या? जो मैंने पढ़ा है वह here समर्थित है।

कि यह कैसे उपयोग करने पर एक उदाहरण AVR Freaks Forum पर पाया जा सकता: -Wl,--section-start=.honk=address:

const char __attribute__((section (".honk"))) ProjString[16] = "MY PROJECT V1.1"; 

फिर आप लिंकर के विकल्पों में जोड़ने के लिए होगा।

+0

धन्यवाद। मैं लिंकर सेटिंग्स को बदलने से बचना चाहता था क्योंकि जिस कोड को मैं पोर्ट कर रहा हूं वह लाइब्रेरी के लिए है और इसका मतलब यह होगा कि लाइब्रेरी के सभी उपयोगकर्ताओं को इसे काम करने के लिए लिंकर सेटिंग्स को संपादित करना होगा, यदि संभव हो तो मैं ' से बचने के लिए पसंद है। – tomsgd

0

जीसीसी के आधुनिक संस्करण प्रत्येक सेगमेंट के लिए दो चर घोषित करेंगे, अर्थात् __start_MY_SEGMENT और __stop_MY_SEGMENT। इन चरों का उपयोग करने के लिए, आपको वांछित प्रकार के साथ उन्हें बाहरी के रूप में घोषित करने की आवश्यकता है। उसके बाद, आप उस सेगमेंट की शुरुआत और अंत का पता पाने के लिए '&' ऑपरेटर का उपयोग करें।

extern uint8_t __start_MY_SEGMENT; 
extern uint8_t __stop_MY_SEGMENT; 
#define MY_SEGMENT_LEN (&__stop_MY_SEGMENT - &__start_MY_SEGMENT) 

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

  • कोई संबंधित समस्या नहीं^_^