به نام یکتای بی همتا
در این مقاله به بررسی معایب و مزایای استفاده از زبان ها، کامپایلر ها و محیط های مختلف برای برنامه نویسی میکروکنترلر 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 دقت کنید: (منبع کد)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | '----------------------------------------------------------------------------------- ' (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 متصل کنید:
چگونه میتوانید هم خدا را داشته باشید و هم خرما را؟!
محیط توسعه یک پارچه اتمل استودیو (Atmel Studio)، یک محیط فوق العاده است که از ترکیب قدرتمند Visual Studio و کامپایلر GCC تشکیل شده است. با توجه به اینکه بهطور رسمی و رایگان توسط خود شرکت Atmel عرضه شده است، میتواند گزینه بسیار خوبی برای برنامه نویسی همزمان برای AVR ،ARM و آردوینو باشد! همچنین این نرم افزار دارای کتابخانهی بزرگی از پروژههای استاندارد و آماده است. تقریباً شما همهی مزیتهای یک محیط برنامه نویسی خوب را یکجا باهم دارید! اما تنها عیبی که این محیط دارد، حجم سنگین فایلهای آن است که موقع نصب در حدود 6 گیگابایت از فضای هارد شما را اشغال مینماید.
یک روش پیشنهادی دیگر برای شما این است که: ابتدا یک محیط برنامه نویسی مناسب (بسته به سلیقه، راحتی و تجربه خودتان) مثل Eclips یا VSCODE را انتخاب کنید، سپس کامپایلر قدرتمندی مثل GCC را به آن اضافه کنید، حال شروع به برنامه نویسی استاندارد با زبان C یا ++C و به کمک ثباتها کنید. شما با همین روش، میتوانید کتابخانههای آدوینو را نیز اضافه نموده و آردوینو هم بنویسید! از آنجایی که پروگرام کردن، بستن مدار و تست الگوریتمها در آردوینو سادهتر و سریعتر است، پیشنهاد میکنیم ابتدا ایده اصلی را بر روی آردوینو تست کنید و پس از اجرایی شدن و گرفتن نتیجه عملی، شروع به نوشتن برای AVR یا ARM کنید! اینگونه می توانید بهترین کامپایلر avr و محیط برنامه نویسی را برای آن یا هر میکروکنترلر دیگر، برای خود داشته باشید.
با این روش پیشنهادی:
✔️ دیگر با محیط خشک آردوینو، کدویژن و بسکام رو در رو نیستید!
✔️ محدود به زبان C یا ++C نیستید و میتوانید با هرکدام که خواستید کد بنویسید!
✔️ میتوانید از کتابخانهها و توابع آماده آردوینو هم استفاده کنید!
✔️ میتوانید همزمان برای AVR،ARM، آردوینو و… برنامه نویسی کنید!
✔️ حجم اشغالی نرم افزار در مقایسه با اتمل استادیو بسیار کمتر است!
✔️ خروجی استاندارد و بهینه شده دارید!
آموزش بعدی سیسوگ در مورد آماده سازی محیط VSCODE برای برنامه نویسی AVR
و آماده سازی محیط Eclips برای برنامه نویسی میکروکنترلر های AVR را از دست ندهید!
در نهایت، انتخاب بهترین کامپایلر avr و مناسب ترین راه برای برنامه نویسی میکروکنترلر، بستگی به نیاز شما دارد. همچنان انتخاب با شماست!
هم شاید شما راه بهتری سراغ داشته باشید، پس بی درنگ چشم به راه پیشنهادهای شما هم هستیم.
ممنون از این مقاله کاربردی
سلام..
پس چرا IAR بررسی نشد؟؟؟
.
درود بر شما، همونطور که نوشتم، کامپایلرهای زیادی هست، سعی کردم چندتایی که خیلی بیشتر در ایران مورد استفاده هست رو بررسی کنم، IAR اتفاقاً کامپایلر خیلی خوبی هم هست، حتی عملکردش در بعضی موارد بهتر از GCC هم هست، اما رایگان نیست و پولیه. حالا یا باید کرک به شه، یا خریداری به شه. چون خیلیها سمتش نمیرن، بررسیش نکردم. اما کلیتش همینه.
اگه شما از این کامپایلر استفاده میکنید، لطفاً نظر و تجربیاتتون رو هم بگید.
ممنون از شما.
متشکرم.
سلام
ممنون از مطالب با کیفیتتون. اخیرا شرکت میکروچیپ اسم AtmelStudio رو تغییر داده به Microchip Studio (چه تغییر بنیادینی:/) و کاپایلر XC8 رو بهش اضافه کرده که تا جایی که من فهمیدم قبلا برا PIC استفاده می کردن الان از AVR هم پشتیبانی می کنه و نیمه رایگانه(حالا نمیدونم ینی الان دوتا آشپز داریم یا کلن GCC رو حذف کردن یا چیزه دیگه O~O). اگه میشه مطلبو آپدیت کنینو راجبش یکم توضیح بدید بازم ممنون:)
سلام دوست عزیز
همیشه شرکت ها دنبال انحصار گرایی هستند و نمیشه واقعا هم گفت کار درستی است یا نه !
ولی متشکر برای بازخوردتون – بررسی میکنیم مساله رو
تشکر از مقاله خوبتون. ۳ تا سوال: من از اونایی هستم که خدا را می خوام ، خرما را هم می خوام ، یه چیز دیگه هم می خوام! بعد از کار کردن با کدویژن و کیل ، دنبال یه چیز جامع تر هستم همون طور که می دونید ، برای بعضی از کار های دقیق نیاز به اسمبلی نوشتن داریم( تا بتونیم بیت ها را دقیق مدیریت کنیم) کدوم محیط برای برنامه نویسی به نظر شما جامع تر هست ؟
سوال دوم: حالا اومدیم با مثلا ویژوال استودیو یه کد نوشتیم. چه طور میشه خروجی گرفت و اون کد را پروگرام کرد یا تو پروتئوس شبیه سازی کرد؟
سوال سوم: فکر می کنید این روش برای بقیه میکروکنترلر ها مثل arm , 8051 و حتی میکروپروسسور ها جواب میده؟
درود بر شما،
هر محیط برنامه نویسی که شما با آن راحتتر هستید، میتوانید استفاده کنید. همان طور که در متن هم اشاره شد، محیطهایی که امکانات بهتری مثل تکمیل کننده خودکار و… در اختیار شما قرار میدهند، کار شما را راحتتر میکنند. محیط برنامه نویسی، بیشتر به راحتی شما کمک میکند، اما شما میبایست کامپایلر استاندارد هر میکرو را (متناسب با زبانی که انتخاب کردهاید)، به محیط برنامه نویسی دلخواه خود متصل کنید. برای مثال، اگر برنامه نویس C هستید، کامپایلر استاندارد و متن باز GCC برای ARM و AVR وجود دارد، یا SDCC برای 8051. شما میتوانید آن ها را متناسب با نیاز و سلیقه خود به هر محیطی (مثلاً Eclips) متصل کنید. در کامپیالر های مطرح زبان C شما میتوانید از اسمبلی هم استفاده کنید.
سؤال دوم: نگران این قضیه نباشید، معمولاً کامپایلرها و ابزارهای مختلف (مثل پروگرامر ها)، از دستورات کامندلاینی استفاده میکنند. این قابلیت باعث میشود تا آنها را بتوان به راحتی به IDE های مختلف متصل کرد. بنابراین، پس از اینکه تنظیمات اولیه انجام شد، شما معمولاً دیگر با آن سر و کار نخواهید داشت و با محیط گرافیکی خود IDE، بسیاری از تنظیمات، مثل محل ذخیره خروجی و… را میتوانید تغییر دهید. بسته به نوع IDE، این تنظیمات در منوهای مختلف برای هر پروژه قابل تنظیم است.
سؤال سوم: کامپایلرها و محیطها معمولاً قابلیت اتصال به یکدیگر را دارند و از این لحاظ خیلی مشکلی وجود نخواهد داشت. چون میتوانید کامپایلرهای مختلف را به همان محیط متصل کنید.
اما در کل، خیلی خودتان را درگیر این مسائل نکنید، همه ی این ها ابزار هستند، پس از اینکه یک محیط متناسب با نیازتان پیدا کردید، سریعاً شروع به کار کنید و از خود برنامه نویسی لذت ببرید. حتی اگر خیلی ازین کار دلسرد شدید و مشکلات زیادی برایتان پیش آمد، نگران نباشید از یک محیط ساده مثل کدویژن یا platformIO هم استفاده کنید، اما از هدف اصلی، یعنی برنامه نویسی دور نشوید!?
سلام .
برای برنامه نویسی و کامپایل کردن بر روی AVR میشه از visual studio استفاده کرد.
سلام بله میشه
فکر میکنم نیازه که یه پلاگین نصب کنید برای این کار
سلام.
در کامپیایلر gcc که کلا استاندارد زبان سی است و از هدر هایی مثل stdio هم پشتیبانی میکند ،توابع مربوط به کار با فایل ها موجود است ولی دقیقا یکسان با سی کامیوتر نیست مثلا fopen وجود ندارد و fdevopen وجود دارد.
حالا سوال من این است که آیا در میکروکنترلر هایی مثل AVR می توان با فایل ها کارد؟مثلا می خواهیم کنترلر CNC طراحی کنیم که فایل Gcode را از روی usb بخواند و آن را تفسیر کند.
سلام دوست عزیز
بله کاملا میشه از فایل سیستم استفاده کرد ولی باید از کتابخانه مناسب این کار استفاد کنید.
برای نمونه نگاهی به کتابخانه زیر بیندازید
http://elm-chan.org/fsw/ff/00index_e.html
سلام و خداقوت ؛ آقا من به تازگی کدویژن رو کنار گزاشتم و از جهتی نیاز به محیطی کامل دارم که arm و avr رو با هم بتونم کار کنم ، و محیطی باشه که از نظر امکانات ، دسترسی راحت و پیشنهادات و … عالی باشه ، توی نظراتتون خوندم که گفتین وقت گذاری برای AtmelStudio رو وقت تلف کردن میدونین ! میشه بگید چرا ، و بنظرتون اکلیپس بهتره ؟؟
سلام دوست عزیز
خوشحالم که کدوژن رو کنار گذاشتید – اتمل استودیو نرم افزار خوبی است و تنها مشکلی که میشود در خصوص این نرم افزار بهش اشاره کرد – حجم زیاد نرم افزار است ! هم به لحاظ مصرف رم و هم دیسک
من به شخصه حدود ۷ سالی میشه از eclipse استفاده میکنم و تا حالا مشکل حادی نداشتم باش و البته این که از چه ادیتوری استفاده کنید بیشتر بحث سلیقه است.
احتمالا توی ویندوز که جاوا به خوبی سادپورت نمیشه ایکلیپس هم مقداری منبع بر باشه
سلام وقت بخیر. یه سوال داشتم که فعلا جواب خاصی براش نتونستم پیدا کنم. تقریبا از سال 81 دارم با میکروهای AVR و بعد هم XMega و اخیرا STM32 کار میکنم. مشکلی که با کامپیالرهای AVR دارم اینه که RAM بزرگتر از 64 کیلو بایت رو با آدرس دهی مستقیم (مثلا یه متغیر با سایز 300 کیلو بایت داشته باشیم یا بهتر بگم مدل خافظه Medium و یا Large)ساپورت نمیکنن بجر IAR. من هم که رم زیادی لازم داشتم تقریبا از سال 90 سوییچ کردم روی IAR. ولی به خاطر قفل شکسه بودن این کامپایلر باگهایی توی اون دیدم که گاها ترسیدم. خیلی دلم میخواد از اتمل استودیو استفاده کنم ولی به همین دلیل نمیشه.
راهکار چیه؟ آیا راهی هست که از gcc برای دیتای بالای 64 کیلو استفاده کنیم؟ چون همونطور که میدونید پوینتر آدرس در این کامپیالر دو بایتی هست ولی در IAR سه بایتی.
سلام
خوب خیلی عالی :)- چند سال پیش حدود ۴ سال پیش همین مشکل رو داشتم تا اون موقع راهکار بدرد بخوری ارائه نشده بود اون موقع به شکل آدرس دهی مشکل رو حل کرده بودم – البته رفتار gcc کاملا منطقیه – توی میکرویکنترلر های ۸ بیتی ۱۶ بیت برای باس آدرس وجود داره که میشه همون ۶۴ کیلو فضای آدرس دهی اما ابتکار آتمل توی ایجاد بیت LPM که اجازه تعریف فضای بیشتر رو میده این مشکل رو حل کرده ! و مشکل جدیدی به وجود آورده – خوشبختانه الان راهکار خوبی براش وجود داره
استفاده از نوع اشاره گر farptr_t که برای آدرس دهی حافظه بیشتر از ۶۴ کیلو استفاده میشه
لینک های زیر رو مطالعه کنید
https://www.avrfreaks.net/forum/locating-library-file-fixed-address
https://www.microchip.com/webdoc/AVRLibcReferenceManual/ch20s05s01.html
نه اکیه،منظورتون رو متوجه شدم،اخه مهندسی کنترل میخونم،برای دیتا برداری و سایر کارها از لبویو استفاده میکنم،خواستم بپرسم که نرم افزار بهتری هم توی زمینه اتوماسیون و سیستمهای بلادرنگ وجود داره یانه
با تشکر
اگر هم باشه حداقل اینه که من نمیشناسم
سلام. و تشکر از مقاله ی خوبتون.
اما حالا بفرمایید پروگرامر بی دردسز برای کار با این IDE چی هستش؟ البته برای AVR و Xmega.
هم میتونید از پروگرامر سیسوگ استفاده کنید – تو سایت جستجو کنید پیداش میکنید
اما پروگرامر usbasp هم واقعا پیشنهاد بدی نیست
سلام.
1- پروگرامرهای کلونAvrisp MKII بر اساس پروژه LUFA در محیط Eclipse و کامپایلر GCC قابل استفاده نیست؟ پروگرامرهای بر مبنای پروتکل STK500 چطور؟ مخصوصآ STK500 V2؟
2- با مطالعه قسمت نظرات، مقاله پروگرامر Sis-Link ساخت پروگرامر ARM و AVR: دگردیسی، به نظر میرسه دوستان در محیط ویندوز 10 و 64 بیتی موفق به انجام کار نشدند! آیا استنباطم اشتباهه؟
3- آیا ترجیح به استفاده از Eclipse و کامپایلر GCC و پروگرامر sisoog_Link در سیستم عامل لینوکس هستش؟
لطفا یکبار قطعی با توجه به سوالات و پاسخ ها روشنگری کنید؟
جدای از مطالب فوق، قدردان کار سخت و زحمات بی منت شما در این حیطه هستم.
سلام
در محیط eclipse به سادگی تمام با استفاده از avrdude تقریبا هر نوع پروگرامی که برای avr ساخته شده است قابل پشتیبانی است – دقت کنید هر مدل پروگرامری ک ساخته شده 🙂
من خودم ویندوز ندارم که چک کنم – ولی فکر نمیکنم مشکل بقرنج بوده باشه – اگر فرصت کنم با سیستم یکی از دوستان چکش خواهم کرد.
اگر ویندوز هم داشتم من از همین ترکیب استفاده خواهم کرد.
سلام،میخواستم بپرسم واسه کار تو زمینه اتوماسیون و کارهای بلادرنگ و همینطور سنسورها چه نرم افزاری رو پیشنهاد میکنید؟
درست متوجه منظورتون نشدم
ولی من از سیستم عامل freertos استفاده میکنم و از GCC و eclipse برای کد نویسی استفاده میکنم.
سلام و درود ممنون از متن مفیدتون
ببخشید من سوالی ذهمنم رو در گیر کرده خواستم بدونم میشه کدهایی که به زبان c (کدویژن) مستقیم به اتمل استودیو تبدیل کرد و یا اگر نمیشه منبع آموزشی خوبی برای اتمل استودیو میشه معرفی کنید
خوب تا حدود زیادی میشه ولی برخی جاها رو نمیشه و باید دستی تغییر ایجاد کنید به عنوان نمونه اینتراپت ها یا دسترسی به حافظه های eeprom و یا flash و ….
سلام،من تو اضافه کردن gcc به VSCODE به مشکل خوردم ممکنه برای شما آموزشش رو بزارین؟
من آردوینو و AVR کار میکنم و محیط VSCODE هم میپسندم ولی نیاز به یه آموزش خوب مثل آموزشای سایت شما دارم ممنون میشم قبول زحمت بفرمایید
سعی میکنم که اموزشش رو ایجاد کنیم و منتشر کنیم 🙂
سلام.
لطفا آموزش زیر رو ببینید:
https://sisoog.com/2019/12/16/vscode-%d8%a8%d8%b1%d8%a7%db%8c-avr/
زمانی بود که خبری از avr نبود و با ۸۹c 51 و زبان اسمبلی کار میکردم
میکروکنترولر avr تو زمان خودش برای من یه انقلاب بود که از شر ۸۹c51 راحت شدم
با آمدن میکرو arm تا مدتی در برابرش مقاومت کردم (سن که بالا میره, محافظه کار شدم)
واقعیت اینه که avr دیگه ارزش کارهای جدید رو نداره
اگه تازه میخواهید شروع کنید …..
زمانی که شروع کردم الکترونیک رو اصلا میکروکنترلری وجود نداشت ! بعدها Z80 اومد و کد های اسمبلی رو با دست به باینری تبدیل میکردیم ! بعد ها ۸۰۵۱ و … کم کم دیگر میکروکنترلرها اومدند ولی معتقد نیستم که avr دیگه ارزش کار کردن نداره ، اتفاقا بیشتر از پیش ارزش کار کردن داره! همیشه مساله قیمت نیست – همیشه مساله تعداد تایمر و … نیست
مطمئنا تجربه شما نکات ویژه ای تو این میکرو کنترلر قدیمی نصبت به انواع جدیدتر می بینه که از چشم این حقیر پنهان شده
موفق باشید.
سلام
ببخشید من نسخه لبویو ۲۰۱۷ به بالا رو که نصب میکنم با مشکل لایسنس روبه رو میشم،خواستم ازتون سوال کنم که چه نسخه ای مناسب هست؟
سلام دوست عزیز
والا لب ویو کار نمیکنیم !! ولی به نظرم بهتره نرم افزار های پولی رو کرک نکنید 😐
سلام
لب ویوو تمامی نسخه هایی که داره لایسنسشون یک مدل فعال میشه شما ببینید موردتون از سیستم و سیستم عامل یا حتی آنتی ویروس نیاشه وگرنه هر نسخه ایی نصب کنید مورد داره براتون. برای ماژول ها هم اگر نسخه 64 بیتی نصب کردید حتما ماژول 64 باید باشه وگرنه کار نمیکنه بهترین روش برای کار کردن ماژولها نصب نسخه 32 بیتی هستش.
سلام کتابخونه راه اندازی برخی از ماژول ها در codevision موجود هست. برای مثال راه اندازی ال سی دی کاراکتری و …
میخواستم بپرسم که در gcc هم کتابخونه داره؟ مثلا کتابخونه راه اندازی lcd ها و … ؟
سلام دوست عزیز
بله به وسعت گیت هاب کتابخونه برای GCC موجوده و بهتره بدونید تمام کتابخونه های کدویژن از روی GCC برای کدویژن پورت شدن !
نگران این موضوع نباشید.
سلام انتخاب بهترین زبان اصولا کار درستی نیست ولی ترجیحا خود من ترجیح میدم با پایتون به جای سی سورس کدها رو اجرا کنم به خصوص تو کار با sbc ها که واقعا پایتون خیلی گزینه ایده آلی هست واقعا برام سواله چرا اشاره به این موضوع نکردید ؟ در مورد کدویژن هم به نظرم و طبق تجربه ام برای شروع کار مناسبه خود من نزدیک یکسال با کدویژن کار دارم و الان دارم هم از ویژوال استودیو و اتمل استودیو برای سورس ها استفاده میکنم متاسفانه خیلی نگاه علمی به این مقاله نشده به هر حال ممنون بابت مطلب
سلام.
ممنون که نظر خودتون رو در این مورد بیان کردید. بله، کدویژن برای شروع راحت تر هست، اما چون نرم افزاری کرک شده است و در مقایسه با GCC عملکرد خیلی ضعیف تری دارد، پیشنهاد میکنم از کامپایلر GCC استفاده کنید.
بله، صد در صد چیزی به اسم بهترین زبان وجود ندارد، منظور بنده انتخاب بهترین زبان با توجه به نیاز خودتون و کاربردی که انتظار دارید بود.
سلام من واقعا از مقاله خوبتون تشکر میکنم دقیقا همین دغدغه رو برای دانشجوهام دارم. ممنون که تجربیاتون رو با بقیه به اشتراک میذارید.
سلام.
خوش حالم که مقاله براتون مفید بوده.
سلام eclipse و winavr رو نصب کردم ولی هنگام کامپایل به مشکل برخوردم لطفا میشه کمکم کنید ممنون
winavr خیلی قدیمی است و آخرین نسخه gcc رو از سایت آتمل دانلود کنید
چه خطایی میده که بتونم راهنمایی کنم ؟
حل شد مهندس ارور 0x0000142 میداد و این که نسخه ی eclipse هم باید قدیمی باشه الان دارم باش کار میکنم ممنون
خواهش میکنم
من الان دارم از آخرین ورژن Eclipse استفاده میکنم البته روی لینوکس نمیدونم توی ویندوز چه اتفاقی براش می افته
آخه من چون از winavr استفاده میکنم احتمالا این مشکل پیش میاد یعنی شما میگیند از gcc برای کامپایل کدهای avr استفاده کنم؟
این احتمال خیلی زیاده در واقع winavr یه ورژن خیلی قدیمی از همون ابزار gcc هست که بعد ها توسط خود آتمل توسعه داده شد و داخل سایتش برای دانلود قرار گرفت و از همین جهت هم دیگه winavr بروزرسانی نشد.
خب مهندس میشه لطف کنید آموزش برای نصبش رو برام بفرستیند به ایمیلم یا همینجا بزارین چون برنامه atmel studio از نظر حجم یک مقداری سنگینه من Eclipse رو ترجیح میدم ممنون
سلام سعی میکنم آموزشش رو آماده کنم
سلام. از چه نسخه ی لینوکس برای الکترونیک استفاده می کنید؟
فرق چندانی نمی کنه واقعا من خودم در حال حاظر از ابونتو استفاده میکنم 🙂
دبیان هم خوبه
خیلی ممنونم برای این مطلب،میشه از کامپایلر GCC برای VSCODE استفاده کرد؟
سلام بله قطعا میشه 🙂
درود بر شما، مطلبی هم در این زمینه منتشر کرده ایم که میتونید استفاده کنید:
https://sisoog.com/2019/12/16/vscode-%d8%a8%d8%b1%d8%a7%db%8c-avr/
سلام عالی بود تشکر
سلام.
خواهش میکنم.
سلام و تشکر بابت مقاله
اتمل استودیو هم در آخرین نسخه امکان کدنویسی برای آردوینو و همینطور به زبان اسمبلی را دارد.
بله، از توجهتون ممنونم.
سلام این GCC و محیط ECLIPS مثل کدویژن دارای کد ویزارد هم هست یا نه؟
تسلط به رجییستر ها و نحوه کار کردن باهاشون خیلی مهمه ولی به نظرم وجود یک کدویزارد خیلی میتونه کمک کنه به سرعت برنامه نویسی.
هرچند بهتره خودتون رجیستر ها رو بنویسید، اما وجود کدویزارد میتونه خیلی کمک کننده باشه.
نرم افزار های جانبی زیادی به صورت رایگان منشتر شده اند که کار پیکر بندی اولیه را انجام می دهند مثل AVRWiz
نرم افزار codeblocks هم خوب است.
ممنون.
باعرض سلام وتشکر ازمطالب مفید ک ارائه کردید.با اردینوزیاد کار کردم اما با میکروکنترل در ابتدای راهم .بفرمایید از کجا شروع کنم وبا چه نرم افزارهایی کارکنم .درمورد برنامه ریزی میکروهای avrبا اردینو مطالب خوبی در سایتهای خارجی یافتم اما کمی برایم نامفهوم وپیچیده بودند.شما برنامه ای برای اموزش کامل وکاربردی پروگرام کردن ای وی اربا اردینو ندارید؟ایا اصولا اینکار اصولی هست؟چون من فعلا پروگرامر ندارم و دوست دارم با اردینو میکروها را کد گذاری کنم لطفا راهنمایی کنید.با تشکر
درود بر شما.
شما میتوانید برد آردوینو را به پروگرامر تبدیل کنید که به آن Ardunio ISP گفته میشود و آموزش آن در اینجا هست:
https://sisoog.com/2019/07/02/%d8%b3%d8%a7%d8%ae%d8%aa-%d8%a8%d8%b1%d8%af-%d8%a2%d8%b1%d8%af%d9%88%db%8c%d9%86%d9%88-%d8%a8%d9%87-%d8%b5%d9%88%d8%b1%d8%aa-%d8%ad%d8%b1%d9%81%d9%87-%d8%a7%db%8c/
برای شروع برنامه نویسی AVR، به نظر من با نرم افزار کدویژن کار کنید، چون کار با آن راحت است. اما وقتی به سطح مناسبی رسیدید، از کامپایلر GCC به همراه محیط برنامه نویسی اکلیپس استفاده کنید.