ヘッダーで宣言されているループカウンターを使用しています。
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 短い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 短いletter_c [ NROWS ] [ ncolsの] = {{ 0 、1 、1 、1 }、{ 1 、0 、0 、0 }、{ 1 、 0 、0 、0 }、{ 0 、1 、1 、1 }}。CONST 短い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 * data ; letter_node * 次; 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()
)が失敗した場合、スタックをどのようにペイントすればよいですか?