2013-03-23 7 views
10

में होल्डिंग Arrays नहीं है मैं कुछ दोस्तों के साथ इलेक्ट्रॉनिक्स/प्रोग्रामिंग सीख रहा हूं (और सिखाने की कोशिश कर रहा हूं)। हमने अपने कार्य के लिए लॉन्चपैड का उपयोग करके एलईडी क्यूब बनाने का निर्णय लिया है।रैम

यहाँ मुद्दा हम में चलाने है:

हमारे एनिमेशन के लिए, हम उन्हें एक दो आयामी सरणी में संग्रहीत करते हैं। अगर हम सरणी को

के रूप में परिभाषित करते हैं तो मुझे त्रुटि मिलती है, मैं नहीं चाहता कि यह सरणी रैम में हो, क्योंकि हमारे पास बहुत अधिक उपलब्ध नहीं है।

संपादित करें: कोड

मुझे आशा है कि यह सही जगह में पोस्ट किया जाता है के लिए नीचे देखें।
समय पर नहीं (मुझे लगता है?) क्या मैं किसी भी सरणी को बदल रहा हूं, वे सभी हाथ से एक बार सेट हैं और बस लूप हो गए हैं। मैं क्या बनने की कोशिश कर रहा है की अनिश्चित हूँ परिवर्तित

जानकारी अगर जरूरत (परोक्ष?):

MSP430G2553 16kb फ्लैश 0.5kB रैम

आपकी मदद के लिए

धन्यवाद

अद्यतन: वैसे हंसपैसेंट ने मुझे बताया कि वह त्रुटि क्यों दिखाई दे रही थी। लेकिन मुझे अभी भी एक रैम ओवरफ्लो मिल रहा है (जाहिर है कि यह फ़्लैश में संग्रहीत नहीं किया जा रहा है?)

मैंने कोशिश की एक और चीज # परिभाषित रोन (पंक्ति चालू) के बजाय मैंने इसे भी कॉन्स्ट के रूप में घोषित किया है। (इसलिए जब एक एनीमेशन सरणी बनाई गई थी, तो इसे स्पष्ट रूप से केवल स्थिरांक के साथ बनाया गया था) मैंने आशा की थी कि इसे फ़्लैश में स्टोर किया जाएगा।

#define povDelay delayMicroseconds(200) // POV Delay 

const int CON = LOW; 
const int COFF = HIGH; 
const int RON = HIGH; 
const int ROFF = LOW; 

const int col[9] = {P1_0, P1_1, P1_2, P1_3, P1_4, P1_5, P2_0, P2_1, P2_2}; 
const int row[3] = {P1_6, P1_7, P2_3}; 

void setup() 
{ 
// Serial.begin(9600); 
    for (int i = 0; i < 9; i++) 
    { 
    pinMode(col[i], OUTPUT); 
    digitalWrite(col[i], COFF); 
    } 
    for (int i = 0; i < 3; i++) 
    { 
    pinMode(row[i], OUTPUT); 
    digitalWrite(row[i], ROFF); 
    } 
} 

void sideToSide(int delayTime) 
{ 
    int sideDelay = 1000; 
    // Left Frame 
    const int leftFrame[3][9] = { 
    {CON, COFF, COFF, CON, COFF, COFF, CON, COFF, COFF}, 
    {CON, COFF, COFF, CON, COFF, COFF, CON, COFF, COFF}, 
    {CON, COFF, COFF, CON, COFF, COFF, CON, COFF, COFF} 
    }; 
    // Middle Frame 
    const int middleFrame[3][9] = { 
    {COFF, CON, COFF, COFF, CON, COFF, COFF, CON, COFF}, 
    {COFF, CON, COFF, COFF, CON, COFF, COFF, CON, COFF}, 
    {COFF, CON, COFF, COFF, CON, COFF, COFF, CON, COFF} 
    }; 
    // Right Frame 
    const int rightFrame[3][9] = { 
    {COFF, COFF, CON, COFF, COFF, CON, COFF, COFF, CON}, 
    {COFF, COFF, CON, COFF, COFF, CON, COFF, COFF, CON}, 
    {COFF, COFF, CON, COFF, COFF, CON, COFF, COFF, CON} 
    }; 




    // Display this animation 3 times (Frame 1, Frame 2, Frame 3, Frame 2) 
    for (int i = 0; i < 4; i++) 
    { 
    displayFrame(leftFrame, delayTime); 
    displayFrame(middleFrame, delayTime); 
    displayFrame(rightFrame, delayTime); 
    displayFrame(middleFrame, delayTime); 
    } 
    // Last animation 
    displayFrame(leftFrame, delayTime); 



} // ############ END SIDE TO SIDE 

void frontToBack(int delayTime) 
{ 
    // Left Frame 
    const int frontFrame[3][9] = { 
    {CON, CON, CON, COFF, COFF, COFF, COFF, COFF, COFF}, 
    {CON, CON, CON, COFF, COFF, COFF, COFF, COFF, COFF}, 
    {CON, CON, CON, COFF, COFF, COFF, COFF, COFF, COFF} 
    }; 
    // Middle Frame 
    const int middleFrame[3][9] = { 
    {COFF, COFF, COFF, CON, CON, CON, COFF, COFF, COFF}, 
    {COFF, COFF, COFF, CON, CON, CON, COFF, COFF, COFF}, 
    {COFF, COFF, COFF, CON, CON, CON, COFF, COFF, COFF} 
    }; 
    // Right Frame 
    const int backFrame[3][9] = { 
    {COFF, COFF, COFF, COFF, COFF, COFF, CON, CON, CON}, 
    {COFF, COFF, COFF, COFF, COFF, COFF, CON, CON, CON}, 
    {COFF, COFF, COFF, COFF, COFF, COFF, CON, CON, CON} 
    }; 




    // Display this animation 3 times (Frame 1, Frame 2, Frame 3, Frame 2) 
    for (int i = 0; i < 4; i++) 
    { 
    displayFrame(frontFrame, delayTime); 
    displayFrame(middleFrame, delayTime); 
    displayFrame(backFrame, delayTime); 
    displayFrame(middleFrame, delayTime); 
    } 
    // Last animation 
    displayFrame(frontFrame, delayTime); 


} // ############# END FRONT TO BACK 


void diagFunctionOne(int delayTime) 
{ 
    const int firstFrame[3][9] = { 
    {CON, COFF, COFF, COFF, COFF, COFF, COFF, COFF, COFF}, 
    {CON, COFF, COFF, COFF, COFF, COFF, COFF, COFF, COFF}, 
    {CON, COFF, COFF, COFF, COFF, COFF, COFF, COFF, COFF} 
    }; 
    const int secondFrame[3][9] = { 
    {COFF, CON, COFF, CON, COFF, COFF, COFF, COFF, COFF}, 
    {COFF, CON, COFF, CON, COFF, COFF, COFF, COFF, COFF}, 
    {COFF, CON, COFF, CON, COFF, COFF, COFF, COFF, COFF} 
    }; 
    const int thirdFrame[3][9] = { 
    {COFF, COFF, CON, COFF, CON, COFF, CON, COFF, COFF}, 
    {COFF, COFF, CON, COFF, CON, COFF, CON, COFF, COFF}, 
    {COFF, COFF, CON, COFF, CON, COFF, CON, COFF, COFF} 
    }; 
    const int forthFrame[3][9] = { 
    {COFF, COFF, COFF, COFF, COFF, CON, COFF, CON, COFF}, 
    {COFF, COFF, COFF, COFF, COFF, CON, COFF, CON, COFF}, 
    {COFF, COFF, COFF, COFF, COFF, CON, COFF, CON, COFF} 
    }; 
    const int fifthFrame[3][9] = { 
    {COFF, COFF, COFF, COFF, COFF, COFF, COFF, COFF, CON}, 
    {COFF, COFF, COFF, COFF, COFF, COFF, COFF, COFF, CON}, 
    {COFF, COFF, COFF, COFF, COFF, COFF, COFF, COFF, CON} 
    }; 
    // Start from 7 
    const int sixthFrame[3][9] = { 
    {COFF, COFF, COFF, COFF, COFF, COFF, CON, COFF, COFF}, 
    {COFF, COFF, COFF, COFF, COFF, COFF, CON, COFF, COFF}, 
    {COFF, COFF, COFF, COFF, COFF, COFF, CON, COFF, COFF} 
    }; 
    const int seventhFrame[3][9] = { 
    {COFF, COFF, COFF, CON, COFF, COFF, COFF, CON, COFF}, 
    {COFF, COFF, COFF, CON, COFF, COFF, COFF, CON, COFF}, 
    {COFF, COFF, COFF, CON, COFF, COFF, COFF, CON, COFF} 
    }; 
    const int eighthFrame[3][9] = { 
    {CON, COFF, COFF, COFF, CON, COFF, COFF, COFF, CON}, 
    {CON, COFF, COFF, COFF, CON, COFF, COFF, COFF, CON}, 
    {CON, COFF, COFF, COFF, CON, COFF, COFF, COFF, CON} 
    }; 
    const int ninthFrame[3][9] = { 
    {COFF, CON, COFF, COFF, COFF, CON, COFF, COFF, COFF}, 
    {COFF, CON, COFF, COFF, COFF, CON, COFF, COFF, COFF}, 
    {COFF, CON, COFF, COFF, COFF, CON, COFF, COFF, COFF} 
    }; 
    const int tenthFrame[3][9] = { 
    {COFF, COFF, CON, COFF, COFF, COFF, COFF, COFF, COFF}, 
    {COFF, COFF, CON, COFF, COFF, COFF, COFF, COFF, COFF}, 
    {COFF, COFF, CON, COFF, COFF, COFF, COFF, COFF, COFF} 
    }; 

    for (int i = 0; i < 4; i++) 
    { 
    displayFrame(firstFrame, delayTime); 
    displayFrame(secondFrame, delayTime); 
    displayFrame(thirdFrame, delayTime); 
    displayFrame(forthFrame, delayTime); 
    displayFrame(fifthFrame, delayTime); 
    displayFrame(sixthFrame, delayTime); 
    displayFrame(seventhFrame, delayTime); 
    displayFrame(eighthFrame, delayTime); 
    displayFrame(ninthFrame, delayTime); 
    displayFrame(tenthFrame, delayTime); 
    } 
} 



/* 

##################################################### 
##################################################### 
##################################################### 
###################################################### 
####################################################### 


*/ 






// Takes a frame and displays it for the length of animation delay (in ms) 
void displayFrame(const int frame[3][9], int animationDelay) 
{ 
// Serial.println("displayFrame called"); 
unsigned long currentTime = millis(); 

while (1) // Do this continually until animationDelay is met 
{ 
int i, j; 
// Rows 
for (i = 0; i < 3; i++) 
{ 
    // Turn correct ROW on 
    digitalWrite(row[i], RON); 

    // Columns 
    for (j = 0; j < 9; j++) 
    { 
    // Turn correct COLUMNS on 
    digitalWrite(col[j], frame[i][j]); 

    } // End J loop 

    povDelay; 
    digitalWrite(row[i], ROFF); 

} // End I Loop 

if ((millis() - currentTime) >= animationDelay) 
{ 
    delay(10); 
    // Cleanup, Turn all OFF 
    for (int i = 0; i < 9; i++) 
    { 
     digitalWrite(col[i], COFF); 
    } 
    for (int i = 0; i < 3; i++) 
    { 
     digitalWrite(row[i], ROFF); 
    } 

    delay(10); // timefix? 

    return; 

} // End time test if statement 

} 


} 


void loop() 
{ 
    diag(350); 
    sideToSide(350); 
    frontToBack(350); 


// for (int i = 0; i < 9; i++) 
// { 
// digitalWrite(col[i], CON); 
// } 
// for (int i = 0; i < 3; i++) 
// { 
// digitalWrite(row[i], RON); 
// delay(250); 
// digitalWrite(row[i], ROFF); 
// } 

} 

और त्रुटि है कि मौजूद है::

c:/users/dan/appdata/local/energi~1/hardware/tools/msp430/bin/../lib/gcc/msp430/4.6.3/../../../../msp430/bin/ld.exe: 

क्षेत्र `राम '142 बाइट्स से overflowed collect2: ld 1 से बाहर निकलें स्थिति लौटा

यहाँ कोड की सम्पूर्णता अगर जरूरत है

+1

बस तर्क को भी घोषित करें। –

+1

@ हंसपैसेंट ओह वाह, मैं मूर्ख हूँ। धन्यवाद हंस! – Dan

+4

यह सब सी कोड की तरह दिखता है, और आपने इसे सी टैग किया है, लेकिन आपकी फ़ाइल का नाम '.cpp' है। उसके साथ क्या है? –

उत्तर

3

सुनिश्चित नहीं है कि इससे मदद मिलेगी, लेकिन आप एलडी कर सकते हैं उपयोग करने के लिए स्मृति क्षेत्र निर्दिष्ट करें, docs देखें।

इसके अलावा, आप एक पूर्णांक का उपयोग करके थोड़ा सा स्थान बर्बाद कर रहे हैं। स्मृति को कम करने का आसान तरीका: typedef unsigned char BYTE की घोषणा के बाद const int frontFrame[3][9] से const BYTE frontFrame[3][9] बदलें।

यदि आप बिट का उपयोग बिट्स का प्रतिनिधित्व करने के लिए और अधिक अतिरिक्त कर सकते हैं:

#define ON(b) (1 << b) 

const int frontFrame[3] = { 
    {ON(8) | ON(7) | ON(6)}, 
    {ON(8) | ON(7) | ON(6)}, 
    {ON(8) | ON(7) | ON(6)} 
}; 

और आप थोड़ा (displayFrame में) का परीक्षण

for (int r = 0; r < ROWS_NUM; ++r) 
    for (int c = 0; c < COLS_NUM; ++c) 
    if (frame[r] & ON(c)) { ... } 

का उपयोग कर होगा मैं भी सामने static जोड़ने का प्रयास करते हैं डेटा घोषणा की, लेकिन संभवतः इसका स्मृति प्लेसमेंट पर कोई प्रभाव नहीं पड़ेगा।

+0

से आईएआर या सीसीएस में शुरू करना चाहिए, मुझे अंतरिक्ष की बाधाओं के बारे में आपका सुझाव पसंद है। हालांकि, और भी यह है कि स्थिर ने उन्हें स्मृति में रखने के बजाए फ्लैश करने के लिए उन्हें बचाया। कैपेलीक बहुत बहुत धन्यवाद! हम बहुत सराहना करते हैं! – Dan

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