در این مقاله به بررسی معایب و مزایای استفاده از زبانها، کامپایلرها و محیطهای مختلف برای برنامهنویسی میکروکنترلر AVR میپردازیم تا شما بتوانید بهترین کامپایلر avr و راه را برای برنامهنویسی این میکروکنترلر را انتخابکنید. همچنین روش پیشنهادی در انتهای مطلب میتواند برای هر میکروکنترلر دیگری که با زبان C و ثباتها سر و کار دارد، مثل ARM مناسب باشد.
با این مقاله از ما همراه باشید.
تعاریف
شما ممکناست تعاریف زیر را بدانید، اما در اینجا برای اینکه باز هم ابهامی در خواندن متن برای کسی وجود نداشتهباشد، باید مجدداً یادآور شوم:
مفسر(مترجم) (کامپایلر–compiler): برنامه یا مجموعهای از برنامههای رایانهای است که متنی از زبان برنامهنویسی سطح بالا (زبان مبدأ) را به زبانی سطح پایین(زبان مقصد)، مثل اسمبلی یا زبان سطح ماشین، تبدیل میکند.
محیطهای ویرایشگر متن (Text Editor) و ویرایشگر کد(Code Editor): معمولاً نرمافزارهایی بسیار سبک و سریع هستند که میتوانند به شما در کدنویسی کمک کنند و سرعت کار شما را تا چندین برابر افزایشدهند.
محیط توسعه یکپارچه (IDE): به محیطی که یک برنامهنویس در آن برنامهنویسی میکند محیط توسعه یا Development Environment می گویند. بنابراین IDE یک محیط برنامهنویسی است که مجموعهای از نرمافزارهای که معمولاً شامل ویرایشگر کد برنامه (Code Editor)، کامپایلر (Compiler)، دیباگر (Debugger) و درنهایت رابط گرافیکی یا GUI هستند را در یکجا جمعکردهاست و در اختیار برنامهنویس قرار دادهاست تا بتواند بهراحتی و بدون دغدغه کدهای برنامه خود را تولید کند. از آنجاییکه برنامهنویس همهی این ابزارها را کنارهم و یکجا در اختیار دارد، به آن محیط توسعه یکپارچه میگویند.
بررسی محیط ها و کامپایلرهای مطرح
برای برنامهنویسی برروی میکروکنترلر AVR، کامپایلر و محیطهای خیلیزیادی وجود دارد، بگذارید تا چندتا از راههای متداول و معمول برای برنامهنویسی میکروکنترلرها را باهم بررسیکنیم.
کدویژن
معمولاً اکثر برنامهنویسان ایرانی برای پروگرامکردن میکروکنترلر AVR از کدویژن استفاده میکنند.
کامپایلر کدویژن: طبق نتایج حاصله از آزمایش، از متغیرهای ۶۴بیتی پشتیبانی نکرده و در مقابل کامپایلرهای دیگر همچون GCC عملکرد بسیار ضعیفی دارد.
محیط ویرایشگر متن: فاقد هرگونه ابزار جهت سهولت در برنامهنویسی.
IDE: وقتی شما از کدویژن استفاده میکنید، مجبور هستید که از ویرایشگر کد خود کدویژن استفادهکنید و قادر نخواهید بود که از ویرایشگرهای پیشرفتهای مثل نت بینز یا ایکلیپس استفادهکنید. وقتی از ویرایشگرهای پیشرفته استفاده میکنید هم توسعه برنامه خیلی سریعتر خواهد بود و هم پیداکردن خطاهای احتمالی برنامه راحتتر خواهد بود.
خلاصه: “کدویژن IDE مناسبی برای میکرو نیست!”، نه به کدویژن!
مقالات پیشنهادی:
کامپایلر Codevisionavr در مقابل کامپایلر GCC و مقایسه تخصصی آنها
کامپایلر قدرتمند 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
این زبان در سالهای نخست و در دورهٔ مینی کامپیوترها، بهمنظور دسترسی دانشجویان به کامپیوتر و آموزش اصول اولیه برنامهنویسی طراحی شد. این زبان ساختار بسیارسادهای دارد و یادگیری آن برای افرادی که تاکنون برنامهنویسی نکردهاند، راحت است، اما با اینحال توصیه میکنم اگر به دنیای میکروکنترلرها علاقه دارید و میخواهید آنرا عمقی یاد بگیرید و یا دنبال راهی برای سادهترشدن کدنویسی هستید، این زبان را انتخابنکنید! قصد ما تخریب و یا توهین به برنامهنویسان این زبان نیست، اما باتوجهبه ساختار این زبان، برای کاربردهای سختافزاری توصیه نمیشود. اما میتواند برای کسانی که میخواهند سریع ایده یا پروژه خود را با سادهترین روش عملی کنند، میتواند بهترین کامپایلر 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های زیادی وجود دارند. با مطالعه مقالههای زیر شما میتوانید مطابق میل خود، یک محیط را به GCC متصلکنید:
مقالات مرتبط:
ویرایشگر حرفهای ویژوال استودیو کد با طعم آردوینو
آموزش استفادهاز نرمافزار Eclipse برای میکروکنترلر ARM STM32
چگونه میتوانید هم خدا را داشتهباشید و هم خرما را؟!
محیط توسعه یک پارچه اتمل استودیو (Atmel Studio)، یک محیط فوقالعاده است که از ترکیب قدرتمند Visual Studio و کامپایلر GCC تشکیلشدهاست. باتوجهبه اینکه بهطور رسمی و رایگان توسط خود شرکت Atmel عرضهشدهاست، میتواند گزینه بسیار خوبی برای برنامهنویسی همزمان برای AVR ،ARM و آردوینو باشد! همچنین این نرمافزار دارای کتابخانهی بزرگی از پروژههای استاندارد و آماده است. تقریباً شما همهی مزیتهای یک محیط برنامهنویسی خوب را یکجا باهم دارید! اما تنها عیبی که این محیط دارد، حجم سنگین فایلهای آن است که موقع نصب در حدود ۶ گیگابایت از فضای هارد شما را اشغال مینماید.
یک روش پیشنهادی دیگر برای شما این است که: ابتدا یک محیط برنامهنویسی مناسب(بسته به سلیقه، راحتی و تجربه خودتان) مثل Eclips یا VSCODE را انتخاب کنید، سپس کامپایلر قدرتمندی مثل GCC را به آن اضافهکنید، حال شروع به برنامهنویسی استاندارد با زبان C یا ++C و به کمک ثباتها کنید. شما با همین روش، میتوانید کتابخانههای آدوینو را نیز اضافهنموده و آردوینو هم بنویسید! از آنجاییکه پروگرامکردن، بستن مدار و تست الگوریتمها در آردوینو سادهتر و سریعتر است، پیشنهاد میکنیم ابتدا ایده اصلی را بر روی آردوینو تست کنید و پس از اجراییشدن و گرفتن نتیجه عملی، شروع به نوشتن برای AVR یا ARM کنید! اینگونه میتوانید بهترین کامپایلر avr و محیط برنامهنویسی را برای آن یا هر میکروکنترلر دیگر، برای خود داشتهباشید.
با این روش پیشنهادی:
✔️ دیگر با محیط خشک آردوینو، کدویژن و بسکام رودررو نیستید!
✔️ محدود به زبان C یا ++C نیستید و میتوانید با هرکدام که خواستید کد بنویسید!
✔️ میتوانید از کتابخانهها و توابع آماده آردوینو هم استفادهکنید!
✔️ میتوانید همزمان برای AVR،ARM، آردوینو و… برنامهنویسی کنید!
✔️ حجم اشغالی نرمافزار در مقایسه با اتمل استادیو بسیارکمتر است!
✔️ خروجی استاندارد و بهینه شده دارید!
آموزش بعدی درمورد آمادهسازی محیط VSCODE برای برنامهنویسی AVR و آمادهسازی محیط Eclips برای برنامهنویسی میکروکنترلرهای AVR را از دست ندهید!
درنهایت، انتخاب بهترین کامپایلر avr و مناسبترین راه برای برنامهنویسی میکروکنترلر، بستگی به نیاز شما دارد. همچنان انتخاب با شماست!
هم شاید شما راه بهتری سراغ داشتهباشید، پس بیدرنگ چشم به راه پیشنهادهای شما هم هستیم.
منبع: سیسوگ