Я использую счетчик циклов, объявленный в заголовке:
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
, раскомментировав //Serial.println("hey");
( "hey"
в этом примере, для меня, это поведение абсурдно).
Это приводит к тому, loop_counter
что do_something_important();
раздел кода никогда не запускается . Я попытался объявить , loop_counter
как volatile
, что ничего не изменилось. Я попробовал Serial.print
ING loop_counter
, и я также получал странное поведение (это было бы заморозить петлю). Serial.println("hey");
работает в том смысле, что в мониторе Serial я получаю много «эй» (т. е. быстро намного больше, чем 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);
}
}
Вот "letters.h":
#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;loop_counter = 0 ; короткий led_matrix [num_rows] [num_cols];короткий led_matrix [ num_rows ] [ num_cols ];
const short letter_a [nrows] [ncols] = {{0,1,1,0}, короткая буква_a [ nrows ] [ ncols ] = {{ 0 , 1 , 1 , 0 }, {1,0,0,1},{ 1 , 0 , 0 , 1 }, {1,1,1,1},{ 1 , 1 , 1 , 1 }, {1,0,0,1}};{ 1 , 0 , 0 , 1 }}; const short letter_b [nrows] [ncols] = {{1,0,0,0}, {1,1,1,0}, {1,0,1,0}, {1,1,1,0} };const short letter_b[nrows][ncols] = {{1,0,0,0},{1,1,1,0},{1,0,1,0},{1,1,1,0}}; const short letter_c [nrows] [ncols] = {{0,1,1,1}, {1,0,0,0}, {1,0,0,0}, {0,1,1,1} };const short letter_c [ nrows ] [ ncols ] = {{ 0 , 1 , 1 , 1 }, { 1 , 0 , 0 , 0 }, { 1 , 0 , 0 , 0 }, { 0 , 1 , 1 , 1 } }; const short letter_t [nrows] [ncols] = {{1,1,1,1}, {0,1,0,0}, {0,1,0,0}, {0,1,0,0} };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 { const short * данные ; letter_node * next ; int x ; int y ; } letter_node ;
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 ]; #endif
Еще немного информации: - Я использую Uno (ATMega328)
loop()
функции. Как мне нарисовать мой стек, если единственный метод вывода, который у меня есть ( Serial.print()
), дает мне ошибку?