بررسی بهترین زبان، کامپایلر و محیطهای برنامه نویسی AVR
در این مقاله به بررسی معایب و مزایای استفاده از زبان ها، کامپایلر ها و محیط های مختلف برای برنامه نویسی میکروکنترلر AVR می پردازیم تا شما بتوانید بهترین کامپایلر avr و راه را برای برنامه نویسی این میکروکنترلر را انتخاب کنید. همچنین روش پیشنهادی در انتهای مطلب میتواند برای هر میکروکنترلر دیگری که با زبان C و ثبات ها سر و کار دارد، مثل ARM مناسب باشد.
تعاریف
شما ممکن است تعاریف زیر را بدانید، اما در اینجا برای اینکه باز هم ابهامی در خواندن متن برای کسی وجود نداشته باشد، باید مجدداً یادآور شوم:
مفسر (مترجم) (کامپایلر – compiler): برنامه یا مجموعهای از برنامههای رایانهای است که متنی از زبان برنامهنویسی سطح بالا (زبان مبدأ) را به زبانی سطح پایین (زبان مقصد)، مثل اسمبلی یا زبان سطح ماشین، تبدیل میکند.
محیطهای ویرایشگر متن (Text Editor) و ویرایشگر کد (Code Editor): معمولاً نرم افزارهایی بسیار سبک و سریع هستند که میتوانند به شما در کد نویسی کمک کنند و سرعت کار شما را تا چندین برابر افزایش دهند.
محیط توسعه یکپارچه (IDE): به محیطی که یک برنامه نویس در آن برنامه نویسی میکند محیط توسعه یا Development Environment می گویند. بنابراین IDE یک محیط برنامه نویسی است که مجموعهای از نرم افزارهای که معمولاً شامل ویرایشگر کد برنامه (Code Editor)، کامپایلر (Compiler)، دیباگر (Debugger) و در نهایت رابط گرافیکی یا GUI هستند را در یکجا جمع کرده است و در اختیار برنامه نویس قرار داده است تا بتواند بهراحتی و بدون دغدغه کدهای برنامه خود را تولید کند. از آنجایی که برنامه نویس همهی این ابزارها را کنار هم و یکجا در اختیار دارد، به آن محیط توسعه یکپارچه می گویند.
بررسی محیط ها و کامپایلر های مطرح
برای برنامه نویسی بر روی میکروکنترلر AVR، کامپایلرو محیط های خیلی زیادی وجود دارد، بگذارید تا چند تا از راههای متداول و معمول برای برنامه نویسی میکروکنترلرها را باهم بررسی کنیم.
کدویژن
معمولاً اکثر برنامه نویسان ایرانی برای پروگرام کردن میکروکنترلر AVR از کدویژن استفاده میکنند.
کامپایلر کدویژن: طبق نتایج حاصله از آزمایش، از متغیرهای 64 بیتی پشتیبانی نکرده و در مقابل کامپایلر های دیگر همچون GCC عملکرد بسیار ضعیفی دارد.
محیط ویرایشگر متن: فاقد هرگونه ابزار جهت سهولت در برنامه نویسی.
IDE: وقتی شما از کدویژن استفاده می کنید ، مجبور هستید که از ویرایشگر کد خود کدویژن استفاده کنید و قادر نخواهید بود که از ویرایشگر های پیشرفته ای مثل نت بینز یا ایکلیپس استفاده کنید. وقتی از ویرایشگر های پیشرفته استفاده می کنید هم توسعه برنامه خیلی سریعتر خواهد بود و هم پیدا کردن خطا های احتمالی برنامه راحت تر خواهد بود.
خلاصه: “کدویژن IDE مناسبی برای میکرو نیست!”، نه به کدویژن!
کامپایلر قدرتمند GCC
دقت داشته باشید که GCC کامپایلر است، نه محیط برنامه نویسی. کدویژن یک IDE است که هم دارای محیط برنامه نویسی و هم کامپایلر میباشد. یک جایگزین مناسب برای کامپایلر کدویژن، کامپایلر متن باز و رایگان GCC میباشد. اگر مقالههای بالا را مطالعه کرده باشید، تفاوت کامپایلر GCC و کدویژن را با یکدیگر متوجه خواهید شد. از لحاظ کارایی و بهینه سازی، کامپایلر GCC بسیار بهتر از کدویژن عمل میکند. در مورد محیط برنامه نویسی GCC نیز نگرانی وجود ندارد، شما قادر خواهید بود تا GCC را به هر محیط برنامه نویسی دلخواهی متصل کنید. بنابراین GCC بهترین کامپایلر avr است. در ادامه مطلب، یک IDE مناسب نیز برای برنامه نویسی به شما معرفی خواهیم کرد. لازم به ذکر است نرم افزار آردوینو نیز از کامپایلر استاندارد GCC بهره می برد.
آردوینو
در مورد آردوینو، همانطور که میدانید سخت افزار و نرم افزاری بهطور کامل متن باز (OPEN SOURCE) دارد. این بدان معنی است که آردوینو یک پلت فرم اختصاصی و بسته نیست. شما با مطالعه مستندات آن، میتوانید با تمام جزئیات آن آشنا شوید. نکته مهم اینجاست که شما از طریق آردوینو میتوانید بهطور کامل به سخت افزار و نرم افزار دسترسی داشته باشید. برای مثال، شما میتوانید تمامی رجیستر های میکروکنترلر را به راحتی درون برنامه و بدون انجام هیچگونه تنظیمات خاصی صدا بزنید. آردوینو شامل یک سری کتابخانه (لایبری) از پیش نوشته شده است که شما میتوانید به راحتی و با صدا زدن توابع سطح بالا، کارهای مختلفی را انجام بدهید. برای مثال برای کنترل سرو موتور، استفاده از واحد A/D، وقفهها (Interrupts) و… خود آردوینو تمام ثبات (رجیستر) های لازم را برای شما تنظیم میکند.
اما اینجا یک ابهام وجود دارد. برخی فکر میکنند اگر شما ابتدا بهجای یادگیری مستقیم ثباتها، از توابع و کتابخانههای آردوینو استفاده کنید، دیگر هیچگاه موفق به یادگیری عمیقتر نمیشوید.
این جمله هم درست است و هم غلط!
✔️ درست از این جهت که آردوینو لقمه آماده را دهان شما میگذارد و شما تنبل میشوید!
❌ اما غلط از این جهت که شما در آردوینو دسترسی کامل به تمام ثباتها را هم دارید!
توجه داشته باشید که آردوینو صرفاً یک برد الکترونیکی نیست، بلکه یک فریمورک است که شما به وسیله آن قادر خواهید بود تا به جز بردهای آردوینو، برای تراشههای AVR و خیلی از بردهای الکترونیکی دیگر نیز کد بنویسید. محدودیتی که میتوان برای آردوینو در نظر گرفت، انتخاب میکروکنترلری است که برای آن کد مینویسید. خوشبختانه یکی از بهترین ویژگی های آردوینو این است که کامپایلر اکثر تراشههای پرکاربرد AVR مثل Atmega32 ،Atmega16 و… را میتوانید به عنوان یک برد به آردوینو اضافه کنید! در غیر این صورت، اگر برنامه نویس و طراح حرفهای هستید، باید تراشه مورد نظرتان را برای آردوینو به عنوان یک برد جدید تعریف (پورت) کنید. در عوض، آردوینو مالتی پلت فرم است! برای مثال اگر شما یک بار کدی را برای میکروکنترلر های AVR بنویسید، میتوانید همان کد را نهایتاً با تغییرات بسیار کوچک بر روی بردهای دیگری که آنها هم با آردوینو برنامه نویسی میشوند، اجرا کنید. مثل برد STM32F103C Blue Pill که تراشه آن ARM میباشد. محیط برنامه نویسی آردوینو از بهترین کامپایلر avr یعنی GCC استفاده میکند. آردوینو را میتوان حتی یک مهارت جداگانه هم محسوب کرد، یعنی جدای از بحث اینکه کامپایلری برای AVR محسوب میشود، حتی میتوان آن را به صورت یک مهارت جداگانه نیز در نظر گرفت که در کنار کار با AVR، آن را هم فراگرفت.
BASCOM-AVR

به نمونهای از کد بسکام برای راه اندازی سرو موتور با استفاده از PWM دقت کنید: (منبع کد)
'----------------------------------------------------------------------------------- ' (c) 1995-2016, MCS Electronics ' servos-timer0.bas '----------------------------------------------------------------------------------- $regfile = "m88def.dat" $crystal = 8000000 $hwstack = 64 $swstack = 64 $framesize = 64 Config Com1 = 19200 , Parity = None , Stopbits = 1 , Databits = 8 Print "Servo test" Config Servos = 2 , Mode = Servo , Servo1 = Portb.0 , Servo2 = Portb.1 'Config Servos = 2 , Mode = Servo , Servo1 = Portb.0 , Servo2 = Portb.1 , Prescale= 256 ' you need to chose SERVO mode for lowest system resources Enable Interrupts ' you must enable interrupts since timer 0 is used in interrupt mode Dim Key As Byte 'notice that servo() array is a byte array, which is created automatic Do Key = Inkey() ' get data from serial port If Key = "l" Then 'left Servo(1) = 100 Servo(2) = 100 Elseif Key = "m" Then ' middle Servo(1) = 170 Servo(2) = 170 Elseif Key = "r" Then ' right Servo(1) = 255 Servo(2) = 255 Elseif Key <> 0 Then ' enter user value Input "Servo1 " , Servo(1) Servo(2) = Servo(1) End If Loop
انتخاب بهترین کامپایلر و محیط برنامه نویسی برای AVR
توجه داشته باشید که هیچ گاه نمیتوان گفت یک زبان، بهترین زبان است یا فلان کامپایلر، بهترین کامپایلر avr است، زیرا هر زبانی یک کاربرد بخصوصی دارد. در اینجا چند تا تا از کامپایلرها، زبانها و محیطهای برنامه نویسی متداول و معمول را برای برنامه نویسی میکرو را بررسی کردم و از این میان کامپایلر GCC و محیط برنامه نویسی آردوینو عملکرد بهتری داشتهاند. نرم افزار آردوینو خود برای کامپایل کردن کدها از GCC استفاده میکند، اما شما محدود به برنامه نویسی با زبان ++C و ساختار تعریف شده آردوینو هستید. هرچند برنامه نویسی شیء گرا میتواند تأثیر بسیار زیادی در بهبود و کارایی کد شما داشته باشد، اما ما به دنبال راهی هستیم که هم بتوانیم با C و هم ++C همزمان برنامه بنویسیم. یکی دیگر از عیوبی که میتوان برای نرم افزار آردوینو در نظر گرفت، محیط برنامه نویسی یا (IDE) بسیار خشک و ساده است. آردوینو بیشتر از IDE بودن، ویرایشگر متن است! چون ویژگیهای یک IDE خوب را ندارد. یک IDE خوب، باید به معنی واقعی کلمه، شما را در نوشتن کد یاری کند. برخی از ویژگیهای محیط برنامه نویسی خوب:
• کامل کردن کد شما با نمایش پیشنهادهای مختلف
• نمایش خطاهای نوشتاری یا Syntax Errors در همان لحظه
• خطایابی هوشمند
• پیشنهاد الگوریتم بهتر
• رنگ پس زمینه مناسب و قابلیت تنظیم آن
• رنگ مناسب برای کدها
و …
که این موارد تقریباً در محیط اصلی آردوینو، کدویژن و بسکام رعایت نشده است! خوشبختانه شما میتوانید کامپایلر GCC را به IDE های مختلف متصل کنید. یکی از محیطهای برنامه نویسی خیلی عالی، محیط Eclips است. این گونه هم شما از یک محیط برنامه نویسی پیشرفته با تمام امکانات استفاده میکنید و هم از یک مترجم استاندارد برای تولید خروجی بهینه شده خود دارید. ++notepad نیز یک ویرایشگر کد بسیار ساده و روان است. اگر شما یک سیستم بسیار کند دارید، میتوانید نتپد++ را که حجم کمی هم دارد، دانلود کرده و آن را به GCC متصل کنید. حتی در محیط ساده نتپد++ نیز، شما نسبت به کدویژن و آردوینو امکانات بیشتری برای برنامه نویسی دارید. IDE و Code editor های زیادی وجود دارند.
چگونه میتوانید هم خدا را داشته باشید و هم خرما را؟!
محیط توسعه یک پارچه اتمل استودیو (Atmel Studio)، یک محیط فوق العاده است که از ترکیب قدرتمند Visual Studio و کامپایلر GCC تشکیل شده است. با توجه به اینکه بهطور رسمی و رایگان توسط خود شرکت Atmel عرضه شده است، میتواند گزینه بسیار خوبی برای برنامه نویسی همزمان برای AVR ،ARM و آردوینو باشد! همچنین این نرم افزار دارای کتابخانهی بزرگی از پروژههای استاندارد و آماده است. تقریباً شما همهی مزیتهای یک محیط برنامه نویسی خوب را یکجا باهم دارید! اما تنها عیبی که این محیط دارد، حجم سنگین فایلهای آن است که موقع نصب در حدود 6 گیگابایت از فضای هارد شما را اشغال مینماید.
یک روش پیشنهادی دیگر برای شما این است که: ابتدا یک محیط برنامه نویسی مناسب (بسته به سلیقه، راحتی و تجربه خودتان) مثل Eclips یا VSCODE را انتخاب کنید، سپس کامپایلر قدرتمندی مثل GCC را به آن اضافه کنید، حال شروع به برنامه نویسی استاندارد با زبان C یا ++C و به کمک ثباتها کنید. شما با همین روش، میتوانید کتابخانههای آدوینو را نیز اضافه نموده و آردوینو هم بنویسید! از آنجایی که پروگرام کردن، بستن مدار و تست الگوریتمها در آردوینو سادهتر و سریعتر است، پیشنهاد میکنیم ابتدا ایده اصلی را بر روی آردوینو تست کنید و پس از اجرایی شدن و گرفتن نتیجه عملی، شروع به نوشتن برای AVR یا ARM کنید! اینگونه می توانید بهترین کامپایلر avr و محیط برنامه نویسی را برای آن یا هر میکروکنترلر دیگر، برای خود داشته باشید.
با این روش پیشنهادی:
✔️ دیگر با محیط خشک آردوینو، کدویژن و بسکام رو در رو نیستید!
✔️ محدود به زبان C یا ++C نیستید و میتوانید با هرکدام که خواستید کد بنویسید!
✔️ میتوانید از کتابخانهها و توابع آماده آردوینو هم استفاده کنید!
✔️ میتوانید همزمان برای AVR،ARM، آردوینو و… برنامه نویسی کنید!
✔️ حجم اشغالی نرم افزار در مقایسه با اتمل استادیو بسیار کمتر است!
✔️ خروجی استاندارد و بهینه شده دارید!
در نهایت، انتخاب بهترین کامپایلر avr و مناسب ترین راه برای برنامه نویسی میکروکنترلر، بستگی به نیاز شما دارد. همچنان انتخاب با شماست!
هم شاید شما راه بهتری سراغ داشته باشید، پس بی درنگ چشم به راه پیشنهادهای شما هم هستیم.