कैसे PIC18 उपकरणों के लिए सी संकलक में बड़ी arrays की घ&#

K

kekon

Guest
मैं PIC18 उपकरणों के लिए माइक्रोचिप सी संकलक का उपयोग करें.मेरे डिजाइन PIC18F252 डिवाइस जो आंतरिक राम के बारे में 1500 bytes है शामिल है.का है कि मैं arrays बड़ा 256 बाइट्स से अधिक नहीं होने के बावजूद के रूप में घोषित कर सकते हैं linker त्रुटि है कि यह रिजर्व स्मृति को रिपोर्ट करने में असमर्थ है.

चार बफर [255]; - इस कारण linker त्रुटि
चार बफर [120]; - कोई त्रुटि

यह भी RES निर्देश के साथ विधानसभा भाषा में डाटा संबंधी चिंताओं:

बफर
* प्रती रात
/ 255 - इस कारण linker भी त्रुटि
बफर
* प्रती रात
/ 120 - कोई त्रुटि

एक ही समस्या आता है, जब अन्य चर रैम से अधिक 255 बाइट्स कब्जा करना था.ऐसा क्यों है ऐसा?क्या कोई हल?

 
यह संकलक से कुछ में एक आम समस्या की तरह लगता है डिफ़ॉल्ट settings.I के साथ प्रयोग कर सुनिश्चित करें कि आप संकलक विकल्प के साथ खेलते हैं, स्मृति मॉडल आदि .. कुछ नहीं हो सकता हूँ, लेकिन

 
तुम linker लिपि में बड़ा डेटा क्षेत्र को परिभाषित करना होगा.यहाँ एक नमूना प्रोग्राम है कि आवंटित की सरणी 350 अहस्ताक्षरित है चार.<img src="http://www.edaboard.com/images/smiles/icon_eek.gif" alt="हैरान" border="0" />क्षमा करें, लेकिन आप में प्रवेश करने की जरूरत है इस संलग्नक देखें

 
मदद के लिए धन्यवाद.मैं भी माइक्रोचिप वेबसाइट पर सी संकलक दस्तावेज़ीकरण में एक हल मिल गया.लेकिन वे कहते हैं कि ऐसी arrays के लिए किसी भी रूप में उपयोग संकेत द्वारा किया जाना चाहिए इस प्रकार है:

# शामिल <p18f452.h>

# pragma udata जमीनी
अहस्ताक्षरित चार आर [350];
# pragma udata

शून्य मुख्य शून्य ()
(

चार * ptr;

ptr = एंड आर [] 0;
ptr [0x12 = 300];
)

यह शायद संकलक जो पता लगाने में असमर्थ जब वह राम जब 'र' बफर सीधे accesing बैंक स्विच आवश्यक है की वजह से है.तो शायद एक अप्रत्यक्ष का उपयोग सही है:

ptr [0x12 = 300];

 
के रूप में मैं अपने कोड C18 के disassembly पर देखा था अच्छा banked उपयोग का ख्याल रखता है आप सीधे जब जैसे मूल्य लिखें:
r 300 [] 0x12 =;

11: आर [200] = 0x12;
0000E2 0,102 0x2 MOVLB
0000E4 0E12 MOVLW 0x12
0000E6 MOVWF 0xc8 6FC8, BANKED

और के लिए उपयोग C18 अनुक्रमित FSR0 उपयोग करता है.

= 120 पीपी;
आर [पीपी = 0x15];

12: = 120 जनसंपर्क;
0000E8 0E78 MOVLW 0x78
0000EA 0,100 0 MOVLB
0000EC MOVWF 0x8a 6F8A, BANKED
0000EE CLRF 0x8b 6B8B, BANKED
13: जनसंपर्क आर [] = 0x15;
0000F0 0E00 MOVLW 0
0000F2 0x8a ADDWF 258A, डब्ल्यू, BANKED
0000F4 0xfe9, पहुंच MOVWF 6EE9
0000F6 0E02 MOVLW 0x2
0000F8 ADDWFC 218B 0x8b, डब्ल्यू, BANKED
0000FA 6EEA MOVWF 0xfea, पहुंच
0000FC 0E15 MOVLW 0x15
0000FE 6EEF MOVWF 0xfef, पहुंच

लेकिन अगर आप कहते हैं कि माइक्रोचिप recomands अप्रत्यक्ष का उपयोग इस के लिए एक अच्छा कारण होगा.

 
kekon ने लिखा है:

मदद के लिए धन्यवाद.
मैं भी माइक्रोचिप वेबसाइट पर सी संकलक दस्तावेज़ीकरण में एक हल मिल गया.
लेकिन वे कहते हैं कि ऐसी arrays के लिए किसी भी रूप में उपयोग संकेत द्वारा किया जाना चाहिए इस प्रकार है:# शामिल <p18f452.h># pragma udata जमीनी

अहस्ताक्षरित चार आर [350];

# pragma udataशून्य मुख्य शून्य ()

(चार * ptr;ptr = एंड आर [] 0;

ptr [0x12 = 300];

)यह शायद संकलक जो पता लगाने में असमर्थ जब वह राम जब 'र' बफर सीधे accesing बैंक स्विच आवश्यक है की वजह से है.
तो शायद एक अप्रत्यक्ष का उपयोग सही है:ptr [0x12 = 300];
 
simce, कि उदाहरण के लिए धन्यवाद एक पर्वत.
बाकी सब -, मुझे पता है यह शायद समय समय पर एक RTFM छोड़ मोहक जा सकता है, लेकिन देता ईमानदार हो, जो समय पर सब कुछ के लिए सभी मैनुअल पढ़ा है.हम पूरी कोशिश हम, हम कर सकते हैं और जब एक परियोजना के कारण है जल्द ही बस कैसे पता करने के लिए हम क्या करने की जरूरत है और हम आराम करने के बाद वापस मिल जाएगा की जरूरत (अगर हम भाग्यशाली रहे हैं ...).
मैं अपने दिन में ग का एक बाल्टी कुछ लिखा है, लेकिन एक तस्वीर के लिए linker से बेवकूफ बना मैं बस कुछ समय लिया है (या था) के बारे में जानने नहीं है, मेरे मालिक सिर्फ परिणाम चाहती है कल.
एक बार फिर धन्यवाद, प्रमुख सहारा.

 
C18 या PICC18?तुम सिर्फ सामान्य सी भाषा सरणी की तरह इस्तेमाल करना चाहिए.

 

Welcome to EDABoard.com

Sponsor

Back
Top