এটিএমগা কোরের কোডটির যে অংশটি সেটআপ () এবং লুপ () করে তা নীচে:
#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;
}
}
এক্স এবং অস্থির এটি অপ্টিমাইজড না হয়েছে তা নিশ্চিত করার জন্য।
উত্পাদিত এএসএম-এ, আপনি বিভিন্ন ফলাফল পাবেন:
আপনি যখন দেখতে পাচ্ছেন (সত্য) কেবল কিছু নির্দেশাবলীতে একটি আরজেএমপি (আপেক্ষিক জাম্প) সম্পাদন করে, যেখানে লুপ () একটি বিয়োগ, তুলনা এবং কল সম্পাদন করে। এটি 4 টি নির্দেশাবলী বনাম 1 নির্দেশনা।
উপরের মতো ASM উত্পন্ন করতে আপনার avr-objdump নামে একটি সরঞ্জাম ব্যবহার করতে হবে। এটি avr-gcc এর সাথে অন্তর্ভুক্ত। ওএসের উপর নির্ভর করে লোকেশন পরিবর্তিত হয় তাই নাম অনুসারে এটি অনুসন্ধান করা সবচেয়ে সহজ।
avr-objdump .hex ফাইলগুলিতে অপারেট করতে পারে তবে এগুলি আসল উত্স এবং মন্তব্যগুলি অনুপস্থিত। যদি আপনি সবেমাত্র কোডটি তৈরি করেছেন, আপনার কাছে একটি। ফাইল ফাইল থাকবে যা এই ডেটা ধারণ করে না। আবার, এই ফাইলগুলির অবস্থান ওএস অনুসারে পরিবর্তিত হয় - এগুলি সনাক্ত করার সহজতম উপায় হল পছন্দগুলিতে ভার্বোস সংকলন চালু করা এবং আউটপুট ফাইলগুলি কোথায় সংরক্ষণ করা হচ্ছে তা দেখুন।
কমান্ডটি নিম্নলিখিতভাবে চালান:
avr-objdump -S আউটপুট.এলটি> asm.txt
এবং একটি পাঠ্য সম্পাদক এ আউটপুট পরীক্ষা করুন।