2012-02-26 6 views
10
वर्णमाला मैं एक पूर्णांक-सरणी है में प्रत्येक अक्षर के लिए

पर सरणी की ओर इशारा की सरणी इस तरह की घोषणा की:सी ++ सीमित स्मृति मंच (arduino)

int const A[64] ={ 
    0,0,0,0,0,0,0,0, 
    0,0,0,0,0,0,0,0, 
    0,1,1,1,0,0,0,0, 
    0,1,0,1,0,0,0,0, 
    0,1,1,1,0,0,0,0, 
    0,1,0,1,0,0,0,0, 
    0,1,0,1,0,0,0,0, 
    0,0,0,0,0,0,0,0 
}; 

तो मैं इन करने के लिए संकेत के साथ एक और सरणी पैदा करते हैं।

int const * text[] = { A, B, C }; 

इस, ठीक काम करता है जब तक कि पाठ सरणी अलग प्रविष्टियों की एक निश्चित संख्या तक पहुँचता है।

उदाहरण के लिए इस काम करता है:

int const * text[] = { A, A, A, A, A, A, A, A }; // could even go on much longer 

लेकिन यह दुर्घटनाओं:

int const * text[] = { A, B, C, D }; // it seems the number of different entries matters 

ऐसा क्यों है? मैंने सोचा कि यदि यह पॉइंटर्स है, तो इससे कोई फर्क नहीं पड़ता कि यह क्या इंगित करता है यह हमेशा स्थिर आकार का होगा?

ध्यान दें कि यह Arduino प्लेटफॉर्म पर चलाया गया है, जिसमें बहुत सीमित स्मृति है।

+0

क्या आप क्रैश के बारे में अधिक विस्तृत स्पष्टीकरण जोड़ सकते हैं? –

+0

क्षमा करें, लेकिन मैं नहीं कर सकता, मंच किसी भी त्रुटि मुद्रित नहीं करता है। कार्यक्रम सिर्फ चलाता है या नहीं चलता है। – clamp

+0

क्या आपके सरणी को 'text' के आरंभ में कहीं और संदर्भित किया जा रहा है? –

उत्तर

2

मुझे संदेह है कि समान तत्वों के साथ एक सरणी में लुकअप को अनुकूलित किया जा रहा है; यदि int const *text[]; को एक हेडर फ़ाइल में घोषित किया गया था और एक अलग ऑब्जेक्ट फ़ाइल में संकलित (परिभाषित) किया गया था, तो आपको एक ही समस्या दिखाई देगी। लिंकर सबसे अच्छा कर रहा है, लेकिन वह डेटा हेप/स्टैक स्पेस के साथ ओवरलैपिंग की संभावना है।

कम से कम avr-libc (avr-gcc, avr-binutils का उपयोग करके) के साथ, मैक्रोज़, या वेरिएबल विशेषताएँ हैं, जो इस प्रकार के निरंतर डेटा को बहुत बड़ी, केवल-पढ़ने वाली प्रोग्राम स्पेस (फ्लैश रोम) में रख सकती हैं)।

+0

तो आपका मतलब है कि संकलक/लिंकर अप्रयुक्त अक्षरों को दूर कर रहा है? – clamp

+1

@clamp - हाँ, अगर वह प्रतीक कभी संदर्भित नहीं किया जाता है।यदि संकलक जानता है कि एक लुकअप 'ए' वापस कर देगा, तो यह स्थिरता संकलन समय पर स्थिर हो जाएगा; इसे वास्तविक लुकअप करने की ज़रूरत नहीं है। –