मैं एक हेडर में घोषित लूप काउंटर का उपयोग कर रहा हूं:
int loop_counter = 0;
मैं इस काउंटर का उपयोग हर बार एक घटना को ट्रिगर करने के लिए करता हूं। मैं इस प्रकार के व्यवहार के लिए एक मोडुलो का उपयोग करता था, लेकिन मैंने इसे सरल कर दिया, इसलिए इसके साथ काम करना आसान है (यह अभी भी उसी व्यवहार में परिणाम देता है)
void loop() {
if(loop_counter > 100) loop_counter = 0;
else loop_counter++;
//Serial.println("hey");
if(loop_counter == 0) {
//do_something_important();
}
}
सभी अच्छी तरह से और अच्छा है, जब तक मैं साथ संवाद स्थापित करने की कोशिश Serial
uncommenting द्वारा //Serial.println("hey");
( "hey"
इस उदाहरण में, क्योंकि मेरे लिए इस व्यवहार बेतुका है)।
यह loop_counter
कभी भी do_something_important();
कोड के अनुभाग को ट्रिगर नहीं करता है । मैं घोषित करने की कोशिश की loop_counter
के रूप में volatile
, कि कुछ भी नहीं बदला। मैंने Serial.print
आईएनजी की कोशिश की loop_counter
, और मैं भी अजीब व्यवहार कर रहा था (यह लूप को फ्रीज कर देगा)। Serial.println("hey");
इस अर्थ में काम करता है कि सीरियल मॉनीटर में मुझे बहुत सारे "हे" मिलते हैं, (यानी जल्दी से 100 से अधिक "हेयस", पुनरावृत्तियों की संख्या जिस पर कोड के अन्य भाग को ट्रिगर करना चाहिए)
संभवतः Serial
डेटा के उपयोग के कारण क्या हो सकता है , जो कि (जहां तक मैं बता सकता हूं) loop_counter
पूरी तरह से इसे ठीक से काम करने से रोकने के लिए बंधा हुआ है?
संपादित करें : यहाँ मुख्य फ़ाइल का एक हिस्सा है जो समस्या को प्रस्तुत करता है (ठीक है, इसमें सबसे अधिक योगदान देता है (बहुत अधिक मेमोरी का उपयोग करके)):
void display_state() {
int i,j,index=0;
short alive[256][2];
for(i=0;i<num_rows;i++) {
for(j=0;j<num_cols;j++) {
if(led_matrix[i][j]==1) {
alive[index][0]=i;
alive[index][1]=j;
index++;
}
}
}
alive[index][0]=NULL; //Null-terminate.
alive[index][1]=NULL;
//383 is a great number
for(int idx=0;idx < index; idx++) {
display(alive[idx][0],alive[idx][1]);
delayMicroseconds(283);
}
}
यहाँ "अक्षर" है:
#ifndef _MY_LETTERS_H #define _MY_LETTERS_H
#define nrows 4 #define ncols 4 #define num_rows 16 #define num_cols 16 #define MAX_WORD_LENGTH 16 #define NUMBER_OF_CHARACTERS 26 #include <stdlib.h>
int loop_counter = 0 ; लघु led_matrix [ num_rows ] [ num_cols ];
const short letter_a [ nrows ] [ ncols ] = {{ 0 , 1 , 1 , 0 }, { 1 , 0 , 0 , 0 , 0 }, { 1 , 1 , 1 , 0 }, { 1 , 0 , 1 , 0 }, { 1 0 , 0 , 0 }, { 0 , 1 , 1 , 0 , 1 }, { 1 , 1 , 1 , 1 }, { 1 , 0 , 0 , 1 } }; const short letter_b [ nrows ] [ ncol ] = {{ 1 , , 1 , 1 , 0 }}; स्थिरांक कम letter_c [ nrows ] [ ncols ] = {{ 0 , 1 , 1 , 1 } { 1 , 0 , 0 , 0 } { 1 , 1 }}; const short letter_t [ nrows ] [ ncols ] = {{ 1 , 1 , 1 , 1 } { 0 , 1 , 0 , 0 } { 0 , 1 , 0 , 0 } { 0 , 1 , 0 , 0 } };
typedef struct letter_node { स्थिरांक कम * डेटा ; letter_node * अगला ; इंट x ; इंट वाई ; } पत्र_नोड ;
letter_node aa = {& letter_a [ 0 ] [ 0 ], NULL , 1 , 1 }; letter_node bb = {& letter_b[0][0],NULL,1,1}; letter_node cc = {&letter_c[0][0],NULL,1,1}; letter_node tt = {&letter_t[0][0], NULL , 1 , 1 };
letter_node letter_map [ NUMBER_OF_CHARACTERS ]; #अगर अंत
कुछ और जानकारी: - मैं एक यूनो का उपयोग कर रहा हूं (ATMega328)
loop()
फ़ंक्शन में उपयोग कर रहा हूं । अगर मेरे पास आउटपुट का एकमात्र तरीका है ( Serial.print()
) मुझे फेल कर रहा है तो मुझे अपना स्टैक कैसे पेंट करना चाहिए ?