एक ATmega कोर पर कोड का हिस्सा जो सेटअप () और लूप () निम्नानुसार है:
#include <Arduino.h>
int main(void)
{
init();
#if defined(USBCON)
USBDevice.attach();
#endif
setup();
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}
बहुत आसान है, लेकिन धारावाहिक के ओवरहेडरून () है; वहाँ पर।
आइए दो सरल रेखाचित्रों की तुलना करें:
void setup()
{
}
volatile uint8_t x;
void loop()
{
x = 1;
}
तथा
void setup()
{
}
volatile uint8_t x;
void loop()
{
while(true)
{
x = 1;
}
}
एक्स और अस्थिर यह सुनिश्चित करने के लिए है कि इसे बाहर अनुकूलित नहीं किया गया है।
उत्पादित ASM में, आपको अलग-अलग परिणाम मिलते हैं:
आप देख सकते हैं जबकि (सच्चा) सिर्फ एक आरजेएमपी (सापेक्ष कूद) कुछ निर्देशों को करता है, जबकि लूप () एक घटाव, तुलना और कॉल करता है। यह 4 निर्देश बनाम 1 निर्देश है।
ऊपर के रूप में ASM उत्पन्न करने के लिए, आपको avr-objdump नामक टूल का उपयोग करना होगा। यह avr-gcc के साथ शामिल है। स्थान OS पर निर्भर करता है इसलिए नाम से इसे खोजना सबसे आसान है।
avr-objdump .hex फ़ाइलों पर काम कर सकता है, लेकिन ये मूल स्रोत और टिप्पणियों को याद नहीं कर रहे हैं। यदि आपने अभी-अभी कोड बनाया है, तो आपके पास एक .elf फ़ाइल होगी जिसमें यह डेटा होता है। फिर से, इन फ़ाइलों का स्थान ओएस द्वारा भिन्न होता है - उन्हें खोजने का सबसे आसान तरीका वरीयताओं में क्रिया संकलन चालू करना है और देखें कि आउटपुट फ़ाइलों को कहाँ संग्रहीत किया जा रहा है।
निम्नानुसार कमांड चलाएँ:
avr-objdump -S output.elf> asm.txt
और एक टेक्स्ट एडिटर में आउटपुट की जांच करें।