আমি একটি লুপ কাউন্টার ব্যবহার করছি, একটি শিরোনামে ঘোষিত:
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
আইএনজি চেষ্টা করেছিলাম 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);
}
}
এখানে "letter.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 লুপ_কাউন্টার = 0 ; সংক্ষিপ্ত নেতৃত্বাধীন_ম্যাট্রিক্স [ num_rows ] [ num_col ];
const সংক্ষিপ্ত letter_a [ nrows ] [ ncols ] = {{ 0 , 1 , 1 , 0 }, { 1 , 0 , 0 , 1 }, { 1 , 1 , 1 , 1 }, { 1 , 0 , 0 , 1 } }; const সংক্ষিপ্ত 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 সংক্ষিপ্ত * ডেটা ; চিঠি_নোড * পরবর্তী ; ইন্ট এক্স ; int y ; } চিঠি_নোড ;
চিঠি_নোড আ = {& চিঠি_এ [ 0 ] [ 0 ], নুল , 1 , 1 }; লেটার_নোড বিবি = {& লেটার_বি [ 0 ] [ 0 ], নুল , 1 , 1 }; লেটার_নোড সিসি = {এবং লেটার_সি [0][0],NULL,1,1}; letter_node tt = {&letter_t[0][0], নুল , 1 , 1 };
চিঠি_নোড লেটার_ম্যাপ [ NUMBER_OF_CHARACTERS ]; #শেষ যদি
আরও কিছু তথ্য: - আমি একটি ইউনো (এটিএমটিগা 328) ব্যবহার করছি
loop()
ফাংশনে ব্যবহার করছি । যদি আমার একমাত্র আউটপুট পদ্ধতি ( Serial.print()
) আমাকে ব্যর্থ করে তবে আমার স্ট্যাকটি কীভাবে আঁকতে হবে?