我正在使用一个循环计数器,在标题中声明:
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");
从某种意义上说,在串行监视器中我得到了很多“嘿”,(即很快超过 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; 短 led_matrix[num_rows][num_cols];
const short letter_a[nrows][ncols] = {{0,1,1,0}, {1,0,0,1}, {1,1,1,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_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} };
typedef struct letter_node{ 常量短*数据; 字母节点*下一个; 诠释 x; 整数y; } 字母节点;
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]; #万一
更多信息:-我正在使用 Uno (ATMega328)