@annonomus पेंगुइन, निश्चित रूप से हम कर सकते हैं हालांकि कोड 1180 बाइट्स में संकलित करता है + 13 बाइट्स रैम मेरे कंप्यूटर पर एक यूनो के लिए, हम इस पर सुधार कर सकते हैं :) इसलिए गोल्फ चुनौती स्वीकार की जाती है और कुछ उपयोगी टिप्स भी जब से हम व्यवसाय में हैं सीख रहा हूँ।
चरण 1: परिवर्तनीय आवश्यकताओं को कम करें। एक एलईडी पोर्ट के लिए एक इंट का उपयोग करना थोड़ा ओवरकिल लगता है, हमारे पास निश्चित रूप से 65535 पता करने योग्य आईओ पोर्ट नहीं हैं Arduino पर :) तो हम इसे केवल मनोरंजन के लिए एक बाइट में बदलते हैं। हम इसे बाद में #define पर बदल देंगे, लेकिन बहुत बड़े वैरिएबल प्रकारों के उपयोग के प्रभाव को दिखाने के लिए।
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 बाइट्स की उम्मीद करूँगा RAM, लेकिन ठीक है। इतना नहीं है, लेकिन बचाया हर बाइट अच्छा है।
चरण 2: परिवर्तन से अधिक चर में जब यह समझ में आता है। उदाहरण के लिए, एलईडी बाइट की आवश्यकता नहीं है, पिन खुद को अनसोल्ड नहीं करेगा।
#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 देरी में बदल देता हूं तो यह अंतरिक्ष को बचाएगा, लेकिन मुझे एलईडी पिन के मूल्य का पता लगाना होगा और इसे उल्टा करना होगा। हम digitalRead () के साथ ऐसा कर सकते हैं, लेकिन क्या यह अंतरिक्ष को बचाएगा?
#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 कम लाइनें बनाता है।
इसके अलावा कम होने पर एक और सामान्य टिप। स्ट्रिंग वर्ग का उपयोग न करें। यह बहुत बड़ा है, चर सरणियों, strcpy (), strcmp () से निपटना सीखें। यदि आपके पास कुछ बुनियादी स्ट्रिंग ऑपरेशन हैं, तो स्ट्रिंग क्लास का उपयोग ज्यादातर फ्लैश और रैम दोनों पर केवल अंतरिक्ष बर्बाद कर रहा है।