@ অ্যাননোমাস পেঙ্গুইন, নিশ্চিত যে আমরা কোডটি আমার কম্পিউটারে আনো করার জন্য 1180 বাইট ফ্ল্যাশ + 13 বাইট র্যামে সংকলন করতে পারি, তবে আমরা এটির উন্নতি করতে পারি :) তাই গল্ফ চ্যালেঞ্জ গৃহীত হয়েছে এবং কয়েকটি কার্যকর টিপস যেহেতু আমরা ব্যবসায়ে আছি শেখার।
পদক্ষেপ 1: পরিবর্তনশীল প্রয়োজনীয়তা হ্রাস। নেতৃত্বাধীন বন্দরটির জন্য কোন ইন্ট ব্যবহার করা কিছুটা ওভারকিল বলে মনে হচ্ছে, আমাদের কাছে অবশ্যই অর্ডিনোতে 65535 ঠিকানাযোগ্য আইও বন্দর নেই :) সুতরাং আমরা এটি কেবল মজাদার জন্য এটি বাইটে পরিবর্তন করি। আমরা পরে এটি একটি # নির্দিষ্ট সংখ্যায় পরিবর্তন করব, তবে খুব বড় ভেরিয়েবল প্রকারের ব্যবহারের প্রভাব প্রদর্শন করতে।
byte led = 13;
int val;
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
blink();
val = digitalRead(10);
}
void blink() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
1172 বাইট + 13 বাইট র্যামে সংকলন করে। একটি পূর্ণসংখ্যার পরিবর্তে বাইটের জন্য কম প্রয়োজনীয় অপারেশনের কারণে এটি 8 বাইট ফ্ল্যাশ সাশ্রয় করে। আমি 12 বাইট র্যাম আশা করব, তবে ঠিক আছে। তেমন কিছু নয়, তবে প্রতিটা বাইট সংরক্ষণ করা ভাল।
পদক্ষেপ 2: যখন এটি বোধগম্য হয় তখন পরিবর্তনশীলকে পরিবর্তিত করে সংজ্ঞায়িত করে into উদাহরণস্বরূপ, নেতৃত্বাধীন বাইটের প্রয়োজন হয় না, পিনটি নিজেই সসোল্ডার করবে না।
#define LED 13
int val;
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
blink();
val = digitalRead(10);
}
void blink() {
digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
1142 বাইটসফ্ল্যাশ + 11 বাইট র্যামে সংকলন করে। ইতিমধ্যে 38 বাইট সংরক্ষণ করা হয়েছে। এটি অন্তর্ভুক্ত মান আনতে প্রয়োজন নিবন্ধভুক্ত অপারেশনগুলির কারণে। এছাড়াও আমরা র্যাম থেকে 2 বাইট সংরক্ষণ করেছি। (এখনও অবাক হয়ে যাচ্ছেন কেন বাইটটি 1 টি কম বাইট র্যামের মধ্যে সংকলিত হয়নি .....)
পদক্ষেপ 3: কোডটি অনুকূলিত করুন। আমি 2 বিলম্ব দেখছি। আমি আশ্চর্য হয়েছি যদি আমি এটি 1 বিলম্ব করে পরিবর্তন করি তবে এটি স্থান সাশ্রয় করবে, তবে আমাকে এলইডি পিনের মূল্য বের করতে হবে এবং এটিকে টগল করতে হবে (বিপরীত করা)। আমরা এটি ডিজিটালরিড () দিয়ে করতে পারি, তবে এটি কি স্থান বাঁচাবে?
#define LED 13
int val;
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
blink();
val = digitalRead(10);
}
void blink() {
digitalWrite(LED, !digitalRead(LED)); // toggle the led based on read value
delay(1000); // wait for a second and spare yourself the other delay
}
1134 বাইট + 11 বাইট র্যামে সংকলন করে। হ্যাঁ! অন্য 8 বাইট। এটি মোট 46 বাইট এবং কোডের 2 টি কম লাইন করে।
হ্রাস কোডাইজ করার জন্য আরও একটি সাধারণ পরামর্শ। স্ট্রিং ক্লাস ব্যবহার করবেন না। এটি বিশাল, চার অ্যারে, স্ট্রিপিপি (), আরআরসিএমপি () কীভাবে মোকাবেলা করতে হয় তা শিখুন। আপনার সমস্ত কিছু যদি কিছু প্রাথমিক স্ট্রিং অপারেশন হয় তবে স্ট্রিং ক্লাসের ব্যবহার বেশিরভাগ ক্ষেত্রে কেবল ফ্ল্যাশ এবং র্যাম উভয় জায়গাতেই অপচয় করে।