قبلاً در مقالهای تحت عنوان “چرا کدویژن نه!” به بررسی شبه کامپایلر کدویژن و ناکارآمدی آن پرداختیم. مقاله مذکور بیشتر با محوریت قابلیتهای استاندارد یک کامپایلر بود که کدویژن آنها را نداشت و به عملکرد واقعی کدویژن پرداخته نشده بود. در این مقاله میخواهیم در رابطه با بهترین کامپایلر AVR صحبت کنیم.
با چند تن از دوستان در خصوص همین مسئله تبادلنظر داشتیم. دوستان معتقد بودند که کدویژن در کامپایل و بهینهسازی کدِ خروجی خیلی موفقتر از GCC عمل میکند و در استاندارد نبودن آن مهم نیست و بهینه بودن کدِ خروجی از درجه اهمیت بالاتری برخوردار است. هرچند به نظر بنده، استاندارد بودن از درجه اهمیت بالاتری برخوردار است؛ چراکه کد قابلحمل و توسعه میشود. اگر کد شما قابلحمل باشد، برای انتقال آن از AVR به ARM نیازی به بازنویسی و حذف بخشهای غیراستاندارد نیست.
از طرفی برتری داشتن یک شبه کامپایلر که توسط یک شرکت با تعداد افراد محدود ایجاده شده، از یک کامپایلر اپن سورس که جامعهای از برنامهنویسان آزاد برای توسعه آنوقت گذاشتهاند، قابلپذیرش نیست. ولی از آنجاییکه هیچ چیز غیرممکن نیست، حتی خود غیرممکن (!) قرار بر این شد که قابلیت اپتیمایز کد و همچنین سرعت اجرای کد ایجادشده توسط این دو کامپایلر را بررسی کنیم تا بتوان راحتتر در خصوص آنها قضاوت کرد.
در ادامه به بررسی دو کامپایلر Codevision و GCC خواهیم پرداخت. پس با سیسوگ همراه باشید.
سختافزار
برای انجام تستها نیاز به یک سختافزار پایه است که کدهای ایجادشده توسط هر کامپایلر را بر روی آن پروگرام کرد و بتوان نتیجه آن را مشاهده کرد. برای همین منظور ما از برد آردوینو Nano بهعنوان سختافزار استفاده کردیم.
این برد از پردازنده Atmega328p استفاده میکند که توسط کریستال 16 مگاهرتز کلاک آن تأمین میشود. برای اینکه بتوان نتیجه را ملموستر احساس کرد، فرکانس کاری میکرو را با تقسیم فرکانس ورودی بر 16 به یک مگاسیکل کاهش دادیم. در تمام برنامهها برای اندازهگیری سرعت اجرای برنامه، به کمک یک لاجیک آنالایز، سرعت صفر و یک شدن پایه PORTB.4 را اندازهگیری میکنیم که درواقع ملاکی از سرعت اجرای برنامه است؛ هرچه این پایه با سرعت بیشتری صفر و یک شود یعنی سرعت اجرای برنامه بیشتر و عملکرد کامپایلر در کامپایل کد بهتر است.
بهترین کامپایلر AVR
ما برای اینکه متوجه بشویم بهترین کامپایلر AVR چیست، از کامپایلر کدویژن ورژن 3.12،
و از کامپایلر GCC ورژن 3.5 بهعنوان کامپایلر GCC استفاده کردهایم.
شرایط یکسان برای کامپایلرها
ایجاد شرایط یکسان برای اینکه به نتیجه مناسبی برای بهترین کامپایلر AVR برسیم با توجه به تفاوتهای کلیدی بین این دو کامپایلر مقداری سخت است اما ما سعی کردیم که دو کامپایلر را در بهترین حالت اپتیمایز کد قرار دهیم.
همانطور که در عکس فوق مشاهده میکنید، هر دو کامپایلر در حالت اپتیمایز حجم کانفیگ شدهاند. در این کانفیگ، کامپایلر به نحوی تنظیم میشود که کمترین حجم ممکن را ایجاد کند.
برنامه تست اول:
1 2 3 4 5 6 7 8 9 10 11 12 | int main(void) { CLKPR=(1<<CLKPCE); CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (1<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0); DDRB |= 1<<4; while(1) { PORTB ^= 1<<4; } } |
1 2 | CLKPR=(1<<CLKPCE); CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (1<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0); |
برنامه تست دوم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | int main(void) { float Var = 0; CLKPR=(1<<CLKPCE); CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (1<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0); DDRB |= 1<<4; while(1) { Var += 0.1f; PORTB = ((uint8_t)Var) << 4; } } |
برنامه تست سوم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | uint8_t foo(uint32_t x) { x = x - ((x >> 1) & 0x55555555); x = (x & 0x33333333) + ((x >> 2) & 0x33333333); x = (x + (x >> 4)) & 0x0F0F0F0F; x = x + (x >> 8); x = x + (x >> 16); return x & 0x0000003F; } int main(void) { uint32_t x = 0xFAFAFAFA; CLKPR=(1<<CLKPCE); CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (1<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0); DDRB |= 1<<4; while(1) { PORTC = foo(x++); PORTB ^= 1<<4; } } |
برنامه تست چهارم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | uint8_t foo(uint64_t x) { x = x - ((x >> 1) & 0x5555555555555555); x = (x & 0x3333333333333333) + ((x >> 2) & 0x3333333333333333); x = (x + (x >> 4)) & 0x0F0F0F0F0F0F0F0F; x = x + (x >> 8); x = x + (x >> 16); return x & 0x000000000000003F; } int main(void) { uint64_t x = 0xFAFAFAFAFAFAFAFA; CLKPR=(1<<CLKPCE); CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (1<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0); DDRB |= 1<<4; while(1) { PORTC = foo(x++); PORTB ^= 1<<4; } } |
برنامه تست پنجم :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | int main(void) { uint32_t aaa , bbb, ccc; CLKPR=(1<<CLKPCE); CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (1<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0); DDRB |= 1<<4; while(1) { aaa++; bbb++; ccc = aaa*(bbb^2); ccc = ccc/bbb; PORTB ^= 1<<4; } } |
خب کم کم داریم به جواب این سوال که بهترین کامپایلر AVR چه کامپایلری است نزدیک میشویم با سیسوگ همراه باشید.
نتایج:
حجم برنامه:
نمودار فوق نشاندهندهی حجم خروجی کامپایلر برای هر یک از برنامهها است. نمودار نارنجی مربوط به کامپایلر کدویژن و نمودار آبی مربوط به کامپابلر GCC است. دقت داشته باشید هر چه برنامه با حجم کمتری ایجاد شده باشد، بهینهتر است؛ چراکه شما قادر هستید برنامهی بیشتری را روی حافظهی مشخصی ذخیره کنید. پس نمودار کوچکتر یعنی عملکرد بهتر.
همانطور که از نتایج به دست آمده مشخص است، در این بخش، کامپایلر GCC به صورت 100 درصد عملکرد بهتری نسبت به شبه کامپایلر کدویژن دارد.
سرعت اجرا :
نمودار آبی مربوط به کامپایلر GCC و نمودار نارنجی مربوط به شبه کامپایلر کدویژن است. جوابها، فرکانس ایجادشده بر روی خروجی است و واحد آن کیلوهرتز است. جواب برنامههای 2 و 3 و 4 در 10 و 100 ضرب شدهاند تا در نمودار به خوبی مشخص باشند. هرچه مقدار این نمودار بیشتر باشد، نشاندهندهی عملکرد بهتر کامپایلر است چراکه قادر است در واحد زمان تعداد کدهای بیشتری را اجرا کند.
توضیح در خصوص جواب برنامه 5 و اختلاف فاحش آن :
کامپایلر GCC دارای هوشمندی زیادی در اپتیمایز کد است. این کامپایلر با تشخیص قسمتهای غیرضروری در برنامه و حذف آنها، هم سرعت اجرا بالا میبرد و هم در حافظهی برنامه صرفهجویی میکند. اگر دقت کنید در برنامه شماره 5 یک سری عملیات ریاضی روی سه متغیر aaa و bbb و ccc انجام شده است که نتیجه عملیات فوق هیچ جا مورداستفاده قرار نگرفته است؛ به همین دلیل کامپایلر این عملیات را غیرضروری فرض و تمام روال آن را از برنامه حذف کرده است. به همین دلیل سرعت و حجم برنامه شماره 5 و 1 یکی است. اما شبه کامپایلر کدویژن دارای این هوشمندی نیست و نمیتواند قسمتهای غیرضروری برنامه را تشخیص دهد و آنها را حذف کند.
بهترین کامپایلر AVR کدام است؟
همانطور که انتظار میرفت کامپایلر GCC در تمام موارد عملکردی بهمراتب بهتری از شبه کامپایلر کدویژن دارد. یکی از دلایل موفقیت صد درصدی کامپایلر GCC، متنباز بودن و توسعهی آن توسط برنامه نویسان مجرب و کارکشته سراسر جهان است. کامپایلر GCC در برنامههای زیادی مورد استفاده قرار گرفته است؛ ازجمله: AVR Studio یا Arduino و… . این نیز خود نشاندهندهی برتری این کامپایلر است.
توصیه میکنم اگر از کدویژن استفاده میکنید، آن را کنار بگذارید و برای حرفهایتر شدن، با GCC شروع به کدنویسی کنید. به همین خاطر، حتماً آموزش آماده سازی محیط Eclips برای برنامه نویسی میکروکنترلر های AVR (کامپایلر استاندارد GCC) را ببینید!
با تشکر از مطالب خوبتون یک سوال برای انتخاب مسمم یک برنامه مناسب برای برنامه نویسی میکرو که بتواند خانواده های مختلف را پشتیبانی کند و علاوه بر این یاد گیری آن عمل بسیار سخت نباشه چه پیشنهادی میدین؟ممنون
سلام دوست عزیز
من gcc رو پیشنهاد میکنم – هم روی پلتفرم های مختلف کار میکنه و هم میتونید برای میکروکنترلرهای مختلف برنامه نویسی کنید.
سلام به همه ی دوست داران GCC و نرم افزارهای آزاد
میتونید برای برنامه نویسی AVR از نرم افزار MPLAB X IDE از شرکت میکروچیپ استفاده کنید که کاملا رایگانه و در ویندوز و لینوکس قابل نصب هست. ابتدا کامپایلر GCC را جداگانه دانلود و نصب کنید سپس MPLAB X را نصب کنید. کامپایلر شناسایی میشه و میتونید شروع به برنامه نویسی کنید. برای STM32 هم از STM32CUBE IDE استفاده کنید. برای میکرو های NXP LPC هم نرم افزار MCUXPRESSO IDE به طور رایگان ارایه شده.
بسیار متشکر برای معرفی ابزار های رایگان :))
حالت optimize code در gcc مشکلاتی داره. من البته من مدتهاست که کارنکردم. اما خاطرم هست که در این حالت بعضی از کدها رو به اشتباه حذف میکرد و مثلا باعث میشد lcd کاراکتری کار نکنه. در کل من وقتی در این کد کامپایل میکردم به مشکلات عجیبی برخورد میکردم. در ضمنا دیباگ هم به درستی انجام نمیشد
برای استفاده از هر ابزاری لازمه که در مورد اون مطالعه کنید و شرایط استفاده از آن ابزار رو بدانید، در این صورت با مشکلات کمتری روبرو می شوید و اتفاقاتی که به نظر باگ میرسن ، یه رفتار منطقی جلو می کند.
مثلا در مورد دیباگ شما میتونید با تنظیم فلگ های مربوطه سطح دیباگ رو تنظیم کنید و خیلی چیزهای دیگه ای که میشه توی این کامپایلر تنظیم کرد.
فکر میکنم این کامپایلر اینقدر خوب باشه که توی اتمل استودیو داره ازش استفاده میشه 🙂
سلام
خیلی ممنون از مقایسه ای که داشتید.
ای کاش یه مقایسه ای هم برای حالت optimize شده در حالت Speed انجام میدادید.
سلام دوست عزیز
البته توی شرایط کلی فکر نمیکنم تغییری ایجاد کنه هرچند شایدم تغییر میکرد ولی چیزی که هست اینه که من سعی کردم اپتیمایزی رو بررسی کنم که معمولا بیشتر از اون استفاده میشه
کم پیش میآد حداقل برای خودم که اپتیمایز رو روی سرعت بذارم. و شاید به همین دلیل بوده که این اپتیمایز رو بررسی کردم.
سلام
ممنون از این مقایسه جالب.
سوالی داشتم:؟
امکانش هست که دستورات gcc را توی کدویژن اجرا کرد؟ یا بهتر بگم که بصورت یک کتابخانه به برنامه کدویژن اضافه بشه و بعد ازش استفاده کنیم؟
سلام دوست عزیز
GCC یک کامپایلر هست شبیه اون چیزی که پشت پرده کدویژن داره برای شما انجام میده
یک لایبرری یا چیز اضافه ای نیست
مطلب خوبی بود و با خواندن نظر ها باعث شد اون غولی که از ریجستر ها ساخته بودیم بمیره
خواستم بگم که تمامی بخش های avr با GCC راه اندازی شده و کافیه سرچ کنیم از کد ها کپی کنید و کم کم خودمون مسلط بشیم .
سوالم اینجا بود میخواستم ببینم آیا میشه از stm cube mx برای کانفیگ میکرو های stm استفاده کرد و کد ها رو تو GCC نوشت ؟
یا باید از اول با ریجستر کار کرد در gcc ؟
سلام خواهش میکنم دوست عزیز 🙂
بله میشه استفاده کرد – من خودم گاهی همین کار رو انجام میدونم مخصوصا برای بخش هایی که کمتر باهاشون کار میکنم 🙂
فکر میکنم کیوب مکس خروجی مناسب برای gcc هم داشته باشه
ممنونم از پاسختون به تازگی متوجه شدم که شرکت stm از stm cube ide رو نمایی کرده که این نرم افزار از فریم ورک های eclipse بهره برده و همون داخل هم میکرو کانفیگ میشه و همونجا هم کد نوشته میشه و از همه بهتر اینه که نرم افزار رایگانه
بسیار عالی
به شخصه ترجیه ام ابزاری هست که بشه به سادگی کاستومش کرد. ولی در کل نفس ماجرا خیلی خوبه و جای تقدیر داره.
عالی بود
خواهش میکنم 🙂
ممنون از مطالب مفیدتان
خیلی عالی بودن
رفتم سراغ نصب Atmel Studio
خواهش میکنم دوست عزیز
موفق باشید
سلام ممنون ، بسیار مفیدبود.
خواهش میکنم دوست عزیز 🙂
سلام
لطفا مراجع خوب و کاربردی به زبان فارسی برای استفاده از GCC معرفی کنید
سلام دوست عزیز ؛ متاسفانه دوستان فارسی زبان علاقه ای به استفاده آزاد از نرم افزار ندارند و ترجیه میدن نرم افزار دزدی کدویژن رو استفاده کنند برای همینم هست که آموزش خوبی به زبان فارسی برای GCC وجود نداره !
ولی انشالله اگر فرصت بکنیم این خلاء رو پر خواهیم کرد و آموزش های خوبی برای کار با GCC منتشر خواهیم کرد .
مساله ای که باهاش درگیر هستیم زمان ؛ حجم کارها خیلی زیاده و تعداد نفر ما که روی سیسوگ فعالیت میکنیم محدوده ؛ از همه دوستان و همراهان عزیز سیسوگ دعوت میکنیم که داشته های خودشون رو با ما به اشتراگ بذارن ؛ شاید که بتونه به باقیه کمک کنه.
موفق باشید
سلام.
سوال از gcc چطور می توان بهره برداری کرد؟ منظورم راه اندازی ide مربوط به gcc است. مراحل نصب و راه اندازی gcc رو اگه میشه توضیح بدید.
با تشکر.
با توجه به اینکه نمی خواهم کدویژن رو برای پروژه جدیدم استفاده کنم، ممنون میشم زودتر در مورد gcc و چگونگی استفاده از ide مربوطه اش راهنمایی بفرمایید.
سلام دوست عزیز
خوشحالم که دارید میرید سراغ GCC این واقعا عالیه برای شروع میتونید از اتمل استودیو شروع کنید ؛ پست های آموزشی هم برای اتمل استودیو قبلا منتشر کردیم .
برنامه نویسی میکروکنترلر AVR در محیط ویژوال استودیو (جلسه اول)
برنامه نویسی میکروکنترلر AVR در محیط ویژوال استودیو (جلسه دوم)
چرا و چگونه از Atmel studio استفاده کنیم؟
سلام مجدد. ممنون از راهنمایی تون.
در محیط اکیلیپس آموزشی وجود نداره.
به طور کلی محیط اکیلیپس بهتره یا Atmel studio یا visual studio؟
سعی میکنیم آموزش Eclipse رو قرار بدیم ؛ این که کدوم محیط بهتره خیلی برمیگرده به سلیقه شما ؛ من خودم Eclipse رو ترجیه میدم چون توی لینوکسم میتونم ازش استفاده کنم و احتمالا عادت کردم بهش ولی Atmel Studio هم بد نیست 🙂
سلام علیکم.
من اکیلیپس رو برای avr راه اندازی کردم و با استفاده از پروگرمر، یه دونه میکرو atmega128 رو پروگرم کردم.
البته ادیتور من اکلیپس 03-2019 هستش که مشکل داشت اما بالاخره درست شد.
سوالم اینه که کتابخانه های مربوط به AVR-gcc از کجا می تونم دانلود کنم. اصلا مثل آردوینو یا حتی بعضا کد ویژن کتابخانه های آماده هستش؟ خصوصا الان کتابخانه fat برای sd card و وای فای برای ماژول esp8266 نیاز دارم.
ممنون میشم راهنمایی بفرمایید.
ببینید وقتی از GCC استفاده میکنید دیگه نباید نگران کتابخونه ای داشته باشید چون بیشتر کتابخونه های نوشته شده در سطح وب با این کامپایلر همخوان هستند و اصلا برای این کامپایلر نوشته شده اند.
مثلا برای کتابخانه Fat میتونید از کتابخوانه elm-chan استفاده کنید.
سلام مجدد.
یه سوال از محیط اکلیپس دارم.
چطور می تونم کتابخانه های آماده(مثلا Fatfs دانلود شده از http://elm-chan.org) را به پروژه خودم داخل محیط اکلیپس اضافه کنم.
من دو راه رو امتحان کردم:
اول- پوشه حاوی فایل های کتابخانه ای را به پوشه C:\WinAVR-20100110\avr\include منتقل کردم و در برنامه #include را اضافه کردم. وقتی برنامه رو اجرا می کنم خطای make: *** [esp-micro-sdcard.elf] Error 1 می دهد و در کنسول هم به توابع استفاده شده گیر میده، مثلا برای تابع f_open پیغام undefined reference to f_open رو میده.
دوم-پوشه فایل کتابخانه را داخل مسیر سورس پروژه کپی کردم و از طریق project->properties->c/c++ Build->setting->tool setting و در قسمت avr compiler بخش directory مسیر فایل کتابخانه ای را add کردم ولی باز خطا بوجود میاد.
ممنون میشم راهنمایی بفرمایید.
بنده از کتابخانه معرفی شده elm-chan برای کارت حافظه sd میخواهم استفاده کنم.
سلام دوست عزیز
اگر برای کامپایل برنامه از GCC + Eclipse استفاده میکنید ؛ احتمالا از پلاکین AVR-Eclipse هم استفاده میکنید ؛ در این صورت مراحل زیر را طی کنید
اول روی پروژه راست کلیک کرده و از گزینه New – گزینه Source Folder رو انتخاب کنید
بعد فایل های کتابخونه شامل فایل های C و H رو کپی کنید ؛ بعد توی محیط Eslipse سورس فولدر رو انتخاب کنید و کلید Crtl+V رو بزنید ؛ به همین سادگی ؛
سلام خسته نباشید ممنون از مطلب خوبتون
واقعا کلاس سایتتون با مطالبی که میزارین و مباحث پایه ای مثل معرفی و مقایسه بهترین کامپایلر که معرفی میکنین لول و سطح سایتتون بالاتر از عزیزانی که تو این عرصه فعالیت میکنن قرار داده
من یک سوال داشتم که کمی بی ربطه به مطلب و یک راهنمایی کوچک تو زمینه انتخاب کامپایلر داشتم
من با کامپایلر کد ویژن کار میکنم من چطوری بفهم زمان صرف شده برای خواندو اجرا ی یک خط درکدویژن چقدر طول میکشه؟(بیشتر میخوام بفهمم موقع نوشتن و نوع نگارش تو برنامه نویسیم رو تصحیح کنم که سریعتر اجرا بشه وکد بهتر بنویسم).
******
من خودم برنامه نویسی(با اینکه اصلا علاقه ای ندارم ومجبورم)با شیوه رجیستر نویسی و زبان اسمبلی برای8051شروع کردم
بعد برای یادگیری avrبه ما کدویژن رو یاددادن که اینکارو اسون تر میکرد مخصوصا تو بحث رجیستر های avr ولی الان به مشکل خوردم اساسی اونم بخاطر اینکه من چند سال کلا رها کردم بحث برنامه نویسی میکروهارو ولی الان که دوباره میخوام برنامه نویسی کنم اکر نرم افزار نباشه رو ی کاغذ هیچی نمیتونم بنویسم وبشدت گیر میکنم.مقدار دهی نحوه مقدار دهی و حتی اسامی رجیسترهارو فراموش میکنم یجورایی کلا فراریم ازش.
الان بنظر شما چکار کنم با کدویژن ادامه بدم تا یکم جلو برم بعد بیام سراغ دیگر کامپایلرها یا کلا کامپایلرهای دیگر فراموش کنم؟
برای این که بتونید بفهمید هر خط توی کدویژن و یا هر کامپایلر دیگه ای چقدر طول میکشه ؛ باید بدونید که این خط به چه دستورات اسمبلی ای ترجمه میشه و بعد سیکل مورد استفاده از خط رو محاسبه کنید ! اما برای این که بفهمید هر خط به چه دستورات اسمبلی تفسیر میشه لازمه که فایل .map رو مطالعه کنید ؛ هنگام کامپایل ؛ کامپایلر یه فایل با پسوند map ایجاد میکنه که توش توابع رو به صورت ترجمه شده به اسمبلی نشون میده .
خوب واقعا در بیشتر برنامه ها لازم نیست که به اسمبلی چیزی بنویسید مگر در موارد خاص ؛ که خیلی هم کم پیش میآد ؛ من توصیه میکنم از کامپایلر GCC استفاده کنید.
سلام مهندس مقاله ی مفیدی بود واقعا..مهندس قطعا IDE توی نوشتن کد برا من مهمه میشه بگید برا GCC چه IDE رو پیشنهاد میکنید؟
سلام دوست عزیز ، من سالهاست که از Eclipse استفاده میکنم ؛ اما اتمل استودیو هم پیشنهاد خوبیه ؛ نحوه کار با اتمل استودیو رو قبلا توی سایت آموزش دادیم
منم با اسمبلی شروع کردم و الان برای انجام پروژه هام از کدویژن استفاده میکنم چون کار باهاش راحت و مطمئنه و واقعا میشه باهاش پروژه های صنعتی و تجاری انجام داد. ابزار کدویزارد خیلی کمک میکنه برای تسریع پیکربندی اولیه و کتابخانه های کامل و بی نقصی داره. تا حالا هیچ مشکلی باهاش نداشتم و دلیلی نمیبینم که بخاطر شاید سرعت اجرای بیشتر برنامه وقت بیشتری رو صرف کدنویسی و انجام پروژه بکنم.
نظر احسان معقول و منطقی تر بود بنظرم
منم خودم میکرو رو از سطح کدنویسی رجیسترها شروع کردم در محیط اتمل استودیو بعد از یاد گیری ریجیستر ها و سبکهای برنامه نویسی ترجیح دادم با یه ویرایشگر سریعتر کار کنم
انتخابم کد ویژن بود و راضیم ازش
در مورد کرک و خرید لایسنس آیا شما ویندوز روی کامپیوترتون و بقیه نرم افزار ها رو پول دادین خریدین؟ اگر آره که آفرین به شما
اگر نه که نباید به بقیه ایراد گرفت
در کل نقد باید منصفانه باشد
بله کامپایلر جی سی سی منبع بازه . استاندارده.
حرفه ایه ولی واسه هر کاری باید چرخ رو از اول اختراع کنی
در ضمن من یکی شخصا به کتاب خونه های منتشر شده در سطح وب حس خوبی ندارم
چون که نه توضیحات درست و حسابی دارن و بعضی از کدهای درون کتابخونه ها هم مصرف شخصی و پروژه ای دارن و به درد بقیه نمیخورن
تازه از کجا معلوم کد درست باشه و جواب بده
و بدین سان باید چرخ رو از نو اختراع کرد
در مورد حجم کد تولیدی مواردی هست که به اون اشاره نشده
یکی از مواردی که به اون اشاره نشده و شخصا در کدهای اسمبلی تولید شده در کدویژن مشاهده کردم کدهایی برای اینشیالایز کردن حافظه وجود دارد جهت مقدار دهی اولیه به حافظه که در مبحث هنگ کردن میکرو و ریست شدن آن توسط واچ داگ می تواند بسیار مفید باشد
که از دید مقایسه شما این حجم اضافی تلقی می شود
در کل هر ابزاری یکسری مزایا و یکسری معایب دارد که یک کارشناس با تجربه باید نقد را از هر دو منظر انجام دهد
تعصبی به کدویژن ندارم چون معایب متعددی دارد مانند نداشتن قابلیت کامل کردن کد به صورت خودکار و …
در ضمن با نظر کاملا شخصی و مقرضانه شما هم موافق نیستم
دوستان سعی کنید برای هر هدفی ابزار درست و معقول آن را انتخاب کنید
یک پیشنهاد
لطفا اگر قرار است در مورد موضوع جدیدی مطلب بزارین و تحقیق کنین
در مورد هنگ میکرو و روتینهای احیای برنامه میکرو مطلب بذارین چون که اصلا در ایران ندیدم کسی در مورد موضوع به این مهمی را مقاله کرده باشد
با تشکر از زحمات شما و مطالبتون
سلام دوست عزیز 🙂 اگر با اتمل استودیو شروع کردید و با کدویژن ادامه دادید ، باید بگم که خوب شروع کردید و بد ادامه دادید خخخ (شوخی میکنم ؛ هر کسی دیدگاه و انتخاب خودش رو داره قطعا) ترجیه من اینه که لینوکس و نرم افزار های آزاد استفاده کنم و برای کار های شخصی خودم از تمام ابزار های متن باز بهره میبرم !
آخر نفهمیدم معتقد به اختراع چرخ هستید یا خیر ؟ یک جا هستید و یک جا نیستید ظاهرا ! ولی سورس های خیلی خوبی برای بهره بردن از GCC وجود داره که حتی خود کدویژن توی ورژن های جدیدش به کتابخونه هاش اظافه کرده مثل همین کتابخونه فت فایل سیستم ! پس همیشه کدهای متن باز نیست ، البته منکر این نیستم که کدهای بد هم وجود داره ولی کد های خوب تعدادشون خیلی بیشتره و میشه ازشون الگو گرفت یا مستقیما ازشون استفاده کرد.
قطعا این بخش درون GCC هم وجود داره ولی خیلی لایت تر و بهینه تر ؛ شاید در مطلبی به این مهم بپردازیم !
ببینید این مقاله یک مقاله علمی است و با استناد به مواردی که تکرار اونها توسط هر شخصی امکان پذیر است به مقایسه بین دو نرم افزار میپردازه ، مهم نیست نظر من چیه در هر صورت حرف های مقاله با توجه به یک مقایسه ساده گفته شده و هر کسی هم میتونه خودش این تست ها رو بگیره البته منکر این نیستم که از کدویژن حمایت نمیکنم ولی این تنها نظر شخصی است و در مقاله هیچ دخلی نداره نظر شخصی من !
این که میگید نظر مقرضانه کاملا بی انصافی است ؛ کدام یک از موارد مطرح شده در مقاله خارج از چارچوب علمی و خارچ از واقعیت بوده و کجا سعی کردم واقعیت رو کتمان کنم ؟
+ مورد جالبی است – حتما به این مساله (هنگ میکروکنترلر) خواهیم پرداخت و نحوه یافتن خطا رو آموزش خواهیم داد. مخصوصا توی میکروکنترلر های ARM که هندل های خیلی خوبی برای این مساله داره.
منم با اسمبلی شروع کردم و الان برای انجام پروژه هام از کدویژن استفاده میکنم چون کار باهاش راحت و مطمئنه و واقعا میشه باهاش پروژه های صنعتی و تجاری انجام داد. ابزار کدویزارد خیلی کمک میکنه برای تسریع پیکربندی اولیه و کتابخانه های کامل و بی نقصی داره. تا حالا هیچ مشکلی باهاش نداشتم و دلیلی نمیبینم که بخاطر شاید سرعت اجرای بیشتر برنامه وقت بیشتری رو صرف کدنویسی و انجام پروژه بکنم.
بنده قبلا آشنایی خوبی با C داشتم ( به خصوص کامپایلر GCC) و با کدویژن شروع کردم. بعضی وقتا کدهایی که با برنامه های دیگه C مینوشتم تو کدویژن جواب های دیگه میداد (portability). این باعث شد سوییچ کنم به atmel studio. درسته باید رجیستر رو تو atmel studio باید دستی بنویسی ولی همه دوستان میدونن اینکار فقط یک بار صورت میگیره و در پروژه های بعدی این تنظیمات رو می تونید به صورت کتابخانه در بیارید . به نظر من این ارزششو داره
منم دقیقا همین مشکل رو داشتم ؛ بعد توی ورژن های اولیه اش بود نیاز به محاسبات اعداد ممیز شناور داشتم که اصلا پشتیبانی نمی کرد ، این شد که کوچ کردم مستقیم روی WIN-AVR هنوز اتمل استودیو از C پشتیبانی نمی کرد توی ورژن 4 بود فکر کنم!
همونطور که قبلا گفتم اصلا کانفیگ سخت افزار شاید یک درصد از زمان پروژه نباشه (پروژه های برزگ منظوره ).
با سلام و عرض ادب
ممنون از مقاله با ارزشی که نوشته بودید. لازم دیدم مواردی را اشاره کنم. که از دیدگاه این مقاله و مقاله قبلی با نام”چرا کد ویژن نه” مورد توجه اصولی قرار نگرفته بودند. در مقاله قبلی گفته بودید که میشه قابلیت حمل کد را با gcc بالا برد ولی با کدویژن نمیشه. مثلا از avr به arm میشه منتقل کرد. من نمیدونم دانش فنی شما در خصوص نوشتن کدهای آرم در چه حدی هست اما خوب میدونم که حداقل در سطح توابع کرنل و توابع سخت افزار به هیچ وقت کدهای avr برای arm استفاده ندارن چون اصلا رجیسترها متفاوت هست و نحوه کانفیگ پین ها و رجیسترها فرق داره. در پروژه های مختلف کاملا اینو حس کردم. پس اگه میخواید از قابلیت حمل صحبت کنید لطفا دقیق صحبت کنید که افراد مبتدی به خطا افتاده نشن.
اشاره کردید که کدویژن از سی به صورت کامل پشتیبانی نمیکنه و مواردی را فرمودید. قبلش این سوال را بهتر بود میپرسیدید که اون امکانات اضافه که ما میخوایم چند جا استفاده دارن؟ آیا هدف اینه که یک ابزاری داشته باشیم که پر از امکانات باشه حتی اگه امکاناتشو سالی یه بار هم استفاده نکنیم یا هدف کار آمدی ابزار هست؟
بنده خودم مدتهای طولانی با AVR STUDIO کد نویسی کردم و تجربه فراوانی در مورد اون دارم و بسیار کدهای خوبی هم تولید میکنه اما یه اشکال عمده داره. اونم اینکه شماباید همه چیز را از پایه بنویسی. اینو کسی که دانشجو هست و اطلاعات مختصری از برنامه نویسی داره درک نمیکنه. اما کسی که سال ها کدنویسی صنعتی میکنه میدونه که برای نوشتن هر پروژه وقتی قرار همه چیزو از پایه کار کنی و برای یه تست ساده کلی کد بنویسی چقدر زحمت اضافه متحمل میشی و سرعت کارت پایین میاد.
در مورد اینکه گفتید رجیسترهای میکرو زیاد نیست باید بگم که نوع نگاهتون به مسئله را قبول ندارم. باشه تعداد رجیسترها اصلا کم هست. چه دلیلی داره من برای انجام هر پروژه مدام کار تکراری بکنم و از پایه کدهای تکراری بزنم تا سطح رجیستر و اولیه برنامم جواب بده؟ شما به راحتی با ویزارد یه کد پایه میزنی از امکاناتی که لازم داری و بعد هر کدوم را لازم داری اصلاح میکنی بدون اینکه 100 خط اول برنامه روبشینی دونه دونه بنویسی و مدام دستت به کتابا بند باشه تا رجیسترها رو پیدا کنی.
بله gcc خیلی قوی عمل میکنه و چند درصدی بالاتر هست ولی سوالم اینه که چه تعداد پروژه صنعتی کار کردید؟ آیا هدفتون ساختن مریخ پیما هست؟ برای یه دانشجو خوندن این مطلب جوری وانمود میکنه کدویژن کدهای بسیار بدی تولید میکنه ولی به هیچ وجه اینطور نیست. اون چند درصد بهتر بودن gcc واقعا دیده نمیشه. شما سعی دارید پشت اون چند درصد بهتر بودن gcc این مطلب را قرار بدید که کدویژن به درد نمیخوره. سوال دیگه ای دارم. چرا آردوینو رشد کرد؟ درسته اپن سورس هست ولی دلیل رشد اصلی اپ سورس بودن نیست چون در اون صورت فقط تعدادی متخصص میرفتن سراغش ولی اغلب استفاده کننده ها که توسعه دهنده نیستن پس چرا رفتن سراغش؟ دلیلش راحتی استفاده و تلف نشدن وقت به خاطر نوشتن یه پروژه ساده بوده. چون شما را تا حد زیادی از سطح سخت افزار و کرنل جدا کرده. دقیقا کدویژن هم خیلی از این مشکلات را حل کرده. الکترونیک از زمانی رشدش شدید شد که از سطح سخت افزار و کرنل خودشو بالاتر اورد. یادتونه وقتی اردوینو نبود برای راه اندازی یه lcd رنگی چقدر وقت هدر میدادیم چون هیچ کدی پیدا نمیشد؟ کدهای انطباق نداشت و روزها وقتمون میرفت تا 1 کار ساده را انجام بدیم.
این ها مواردی بود که به نظرم رسید. البته ببخشید اگه کمی ادبیاتم تند بود. چون در مقایسه شما انصاف جاش کمرنگ بود و صرفا تلاش شده بود یه عقیده شخصی تحمیل بشه. امیدوارم یه مقاله در سایتتون بنویسید و مقایسه عملی و واقعی از این دو کامپایلر داشته باشید و اشاره کنید که برای کارهای واقعی هم این مقایسه ها اونقدر خودشو نشون میده یا نه. منتظر مطالبتون هستم.
موفق و پیروز باشید.
بذارید اینطور شروع کنم ، انصاف شما کجاست وقتی که از نرم افزار قفل شکسته استفاده می کنید ؟ اگر واقعا فکر میکنید کدویژن خوبه ، چرا با خرید لایسنس به رشدش کمک نمی کنید
من هیچ منفعتی از تبلیغ GCC و یا CodeVision نمی برم ، تمام مسائلی که در این مقاله و مقاله چرا کدویژن نه ذکر شد ، تنها حقایقی بود که با مدرک و دلیل و استدلال به مخاطب ارائه داده شد و این مخاطب است که انتخاب می کند چه راهی را بپیماید.
در مورد قابلیت حمل کد ، برداشت میکنم که هیچ برنامه گسترده ای ننوشته اید که آنقدر پیچیده باشد که متوجه این موضوع مهم شده باشید. منظور من حمل کد یک برنامه چشمک زن نیست ، منظورم برنامه های پیچیده است که فارغ از لایه های سخت افزاری توابع پیچیده ای دارند. فرض کنید قصد دارید توابعی که عملیاتی بر روی متغیر های 64 بیتی را انجام می دهد در کدویژن پیاده سازی کنید ؟ ، اصلا امکانش وجود ندارد ، این میشود نوعی قابلیت حمل کد که در GCC به سادگی ممکن است.
در مورد امکانات کدویژن ، متاسفانه یکی از اشتباهات فاحش فضای دانشگاهی کشور بسنده کردن به ناچیز هاست ، وقتی فرض کنیم دانشجویی نخواهد توانست مریخ نورد بسازد ، آموزش های سطح پایینی دریافت خواهد کرد ، ولی از کجا مشخص است که کدام دانشجو در آینده چه کاری انجام خواهد داد ، پس بهتر نیست با توجه به این که این مهم را نمی توان مشخص کرد ، بهترین ها را معرفی و عرضه کرد ؟
اگر مدت طولانی با AVR Studio کار کرده باشید ، باید متوجه باشید که 90 درصد سورس های منتشر شده در بستر اینترنت با استفاده از GCC تهیه شده اند و هیچ نیازی نیست از صفر شروع کرد. در صورتی که برای کار با کدویژن نیاز است ابتدا کدهای GCC را برای کدویژن قابل فهم کنید که همیشه هم شدنی نیست بعد استفاده کنید.
واقعا در یک پروژه چند درصد وقتتون صرف پیکر بندی سخت افزار میشه ، برای من کمتر از 1 درصد از تایم ، چرا که اولا لازم نیست از صفر شروع کرد ، با مراجعه به کتابخانه های آماده و سورس هایی که از قبل از نوشته اید می توانید به راحتی کانفیگ سخت افزار را انجام دهید.
پیکر بندی سخت افزار برای هر پروژه که مداما تغییر نمی کند که اینچنین نگران زمان آن باشیم.
واقعا برتری GCC خیلی بیشتر از چند درصد است ، شما مختارید که از هر پلتفرمی که دوست دارید استفاده کنید ، اما به نظر من GCC و codevision اصلا قابل مقایسه نیستند. اتفاقا من سعی نمی کنم دارم مستقیم و با تکیه بر شواهد و دلایل کاملا مستدل میگم کدویژن بدرد نمی خوره 🙂
بله آردوینو به دلیل سادگی رشد کرد ، نه به اون سادگی که مد نظر شماست! ، اولا لازمه بدونید که آردوینو هم از GCC استفاده می کند . دوم این که اگر کدویژن بهتر و ساده تر بود آردوینو چرا از اون استفاده نکرد ؟
آردوینو امکان لذت بردن از الکترونیک را به تمام افراد داد ، فرض کنید شما برنامه نویس کامپیوتر بودید و میخواستید کمی کنجکاوی کنید و فلان مساله را با استفاده از یک سخت افزار کوچک حل کنید ، اگر دانش الکترونیک نداشتید این کار برای شما خیلی دشوار و گیج کننده بود ولی آردوینو با حذف پیچیدگی الکترونیک و مدارت مربوطه و ارائه ماژول ها این کار رو انجام داد و این باعث استقبال فراوان از اون شد.
سلام
احسنت
متشکر
سلام نمیشه از gcc روی ویژوال استودیو استفاده کرد؟؟
IDE چندان مهم نیست ، بله میشه از IDE ویژوال استودیو استفاده کرد و فکر نمی کنم مشکلی داشته باشد.
ممنونم از مقاله خوبی که منتشر کردین.
اگه بخوایم واقع بینانه به قضیه نگاه کنیم واقعا پیدا کردن سخت افزار های لازم جهت کار با کامپایلر gcc خیلی ساده تر از کد ویژن هست. همین الان شما میتونین چندین اپلیکیشن مختلف تو گوگل پلی پیدا و نصب کنین که با همین گوشی دم دست تون برای میکرو های avr برنامه نویسی کنین. البته جهت پورت کردن هم اپلیکیشن zflasher رو پیشنهاد میکنم. یکی از مهم ترین دلایل من برای توجه به gcc همین قضیه ساده اس. شما برای کار با کدویژن باید یه لبتاپ یا حداقل تبلت ویندوزی با خودتون اینور و اون ور ببرین اما با هر گوشی اندرویدی میتونین به کامپایلر gcc دسترسی داشته باشین این یعنی قدرت !
متشکرم از شما
اشاره مناسبی بود
سلام و خسته نباشید. اگر سورس بوت لودر avr که در کدویژن دادید را برای gcc بدید خیلی ممنون میشم
فکر نمیکنم نیاز به تغییر خاصی وجود داشته باشه ، همین رو با GCC کامپایل کنید 🙂
سلام
ممنون از مطالب فوق العاده و همچنین نگرش دنیای ازادتون که واقعا نمونش کم پیدا میشه توی جامعه ما
همونطور که خودتون هم گفتید اقبال ایرانی ها به کدویژن بیشتر (90% مواقع حتی) برای کدویزاردش هست. در این که کامپایلر GCC بهتره اصلا شکی نیست اما خیلی مقواقع برای کار های نچندان ضروری هم واقعا برای طراح زوره که بیاد تک تک با رجیستر ها سروکله بزنه و همش دستش به دیتاشیت میکرو مورد نظرش بند باشه. برای GCC ابزاری به یکپارچه گی و کاربر پسند بودن کدویژن هم هست اصلا؟
و این که منابع اموزشی فارسی غالبا برای کدویژن هست ممنون میشیم سلسه اموزش هایی برای اتمل استدیو تدارک ببینید.
موفق باشید
سلام دوست عزیز
تعداد رجیستر های میکرو اونقدر زیاد نیست و بعد از یه مدت کار کردن با میکرو به همه مسلط می شید ، به نظر من مساله اصلی در خصوص استفاده از در کنار قابلیت ویزارد ، تدریس آن در دانشگاه ها و مراجع آموزشی است همین امر باعث می شود کاربران تمایل بیشتری نسبت به اون داشته باشند
از طرفی عدم وجود آموزش های کافی به زبان فارسی در مورد GCC و ابزار های رایگان باعث میشه که کاربران تازه کار تمایل کمتری نسبت اون داشته باشند
انشالله در مورد استفاده از GCC برای AVR سعی می کنیم که اموزش هایی تهیه کنیم که استفاده از آن را ساده کند.
کم نیست?
من مبتدی ام این ریجستر های uart که خیلی زیاده
اگه این سادست پس برا پردازنده های arm اتمل چه خبره?
خوب بعد از کار کردن و سر و کله زدن با رجیستر ها ، همه رو به خاطر می سپارید
سلام مهندس. عالی بود. خیلی مهندسی و دقیق بود. نتیجه تست 5 منو شگفت زده کرد!!!
برای من که با بسکام کار می کنم و با زبان C یه آشنائی ساده دارم کوچ کردن بسیار مشکل و زمان بره. من کلی توی سایت های ایرانی گشتم ولی آموزش دقیق و خوبی راجع به AVR GCC نبود. هرچی بود بسیار بسیار کوتاه و ناقص.
خوشحال میشیم که یه مقاله مفصل (مثل تمامی مقاله ها و آموزش هاتون) منتشر کنید.
با تشکر
خواهش میکنم ، نظر لطفا شماست
همیشه GCC بهتر و قدرتمند تر بوده ولی متاسفانه سلیقه کاربر ایرانی به سمت کدویژن گرایش داره که امیداواریم بتونیم با قرار دادن مطالب مفید و آموزش های مناسب این سلیقه به سمت محصولات بهتر و اپن سورس تغییر بدیم.
در برنامه هست که آموزش در خصوص نصب و پیکربندی و استفاده از GCC برای انواع میکروکنترلر رو منتشر کنیم
انشالله در آینده ای نزدیک
با سلام …
مقاله جالبی بود،
فقط برای کسانی که دارند از کدویژن استفاده میکنند ، آموزش هایی برای یادگیری و انتقال به GCC هم معرفی می کنید ؟
پیروز باشید .
سلام دوست عزیز
در حال آماده سازی ابزارهای مورد نیاز هستیم ، تا دوستان بتوانند با کمترین دردسر از بستر GCC استفاده کنند.
به زودی مطلبی در همین راستا منتشر خواهیم کرد.
سپاس.
سودمند بود.
خواهش میکنم دوست عزیز