AVR, توصیه شده, مقاله های سیسوگ, میکروکنترلر

کامپایلر Codevisionavr در مقابل کامپایلر GCC و مقایسه تخصصی آنها

کامپایلر Codevisionavr در مقابل کامپایلر GCC و مقایسه تخصصی آنها

قبلاً در مقاله‌ای تحت عنوان “چرا کدویژن نه!” به بررسی شبه کامپایلر کدویژن و ناکارآمدی آن پرداختیم. مقاله مذکور بیش‌تر با محوریت قابلیت‌های استاندارد یک کامپایلر بود که کدویژن آنها را نداشت و به عملکرد واقعی کدویژن پرداخته نشده بود. در این مقاله می‌خواهیم در رابطه با بهترین کامپایلر AVR صحبت کنیم.

با چند تن از دوستان در خصوص همین مسئله تبادل‌نظر داشتیم. دوستان معتقد بودند که کدویژن در کامپایل و بهینه‌سازی کدِ خروجی خیلی موفق‌تر از GCC عمل می‌کند و در استاندارد نبودن آن مهم نیست و بهینه بودن کدِ خروجی از درجه اهمیت بالاتری برخوردار است. هرچند به نظر بنده، استاندارد بودن از درجه اهمیت بالاتری برخوردار است؛ چراکه کد قابل‌حمل و توسعه می‌شود. اگر کد شما قابل‌حمل باشد، برای انتقال آن از AVR به ARM نیازی به بازنویسی و حذف بخش‌های غیراستاندارد نیست.

از طرفی برتری داشتن یک شبه کامپایلر که توسط یک شرکت با تعداد افراد محدود ایجاده شده، از یک کامپایلر اپن سورس که جامعه‌ای از برنامه‌نویسان آزاد برای توسعه آن‌وقت گذاشته‌اند، قابل‌پذیرش نیست. ولی از آنجایی‌که هیچ ‌چیز غیرممکن نیست، حتی خود غیرممکن (!) قرار بر این شد که قابلیت اپتیمایز کد و همچنین سرعت اجرای کد ایجادشده توسط این دو کامپایلر را بررسی کنیم تا بتوان راحت‌تر در خصوص آن‌ها قضاوت کرد.

در ادامه به بررسی دو کامپایلر Codevision و GCC خواهیم پرداخت. پس با سیسوگ همراه باشید.

 

سخت‌افزار

برای انجام تست‌ها نیاز به یک سخت‌افزار پایه است که کدهای ایجادشده توسط هر کامپایلر را بر روی آن پروگرام کرد و بتوان نتیجه آن را مشاهده کرد. برای همین منظور ما از برد آردوینو Nano به‌عنوان سخت‌افزار استفاده کردیم.

این برد از پردازنده Atmega328p استفاده می‌کند که توسط کریستال 16 مگاهرتز کلاک آن تأمین می‌شود. برای این‌که بتوان نتیجه را ملموس‌تر احساس کرد، فرکانس کاری میکرو را با تقسیم فرکانس ورودی بر 16 به یک مگاسیکل کاهش دادیم. در تمام برنامه‌ها برای اندازه‌گیری سرعت اجرای برنامه، به کمک یک لاجیک آنالایز، سرعت صفر و یک شدن پایه PORTB.4 را اندازه‌گیری می‌کنیم که درواقع ملاکی از سرعت اجرای برنامه است؛ هرچه این پایه با سرعت بیشتری صفر و یک شود یعنی سرعت اجرای برنامه بیشتر و عملکرد کامپایلر در کامپایل کد بهتر است.

 

بهترین کامپایلر AVR

ما برای اینکه متوجه بشویم بهترین کامپایلر AVR چیست، از کامپایلر کدویژن ورژن 3.12،

 

و از کامپایلر GCC ورژن 3.5 به‌عنوان کامپایلر GCC استفاده کرده‌ایم.

 

 

شرایط یکسان برای کامپایلرها

ایجاد شرایط یکسان برای اینکه به نتیجه مناسبی برای بهترین کامپایلر AVR برسیم با توجه به تفاوت‌های کلیدی بین این دو کامپایلر مقداری سخت است اما ما سعی کردیم که دو کامپایلر را در بهترین حالت اپتیمایز کد قرار دهیم.

 

همان‌طور که در عکس فوق مشاهده می‌کنید، هر دو کامپایلر در حالت اپتیمایز حجم کانفیگ شده‌اند. در این کانفیگ، کامپایلر به نحوی تنظیم می‌شود که کمترین حجم ممکن را ایجاد کند.

 

برنامه تست اول:

در این برنامه خروجی Toggle شده و از هیچ تأخیری هم استفاده نشده است.
دقت داشته باشید که دو خط اول برنامه برای تنظیم تقسیم‌کننده‌ی ورودی است که فرکانس 16 مگاهرتز را به 1 مگاهرتز کاهش دهد.

 

برنامه تست دوم:

در این برنامه علاوه بر تغییر وضعیت خروجی، محاسبات ساده‌ی اعداد اعشاری نیز صورت گرفته است.

 

برنامه تست سوم:

در این برنامه علاوه بر تغییر وضعیت خروجی، یک سری عملیات ریاضی و منطقی بر روی متغیرهای 32 بیتی انجام‌شده به همراه فراخواندن یک متد.

 

برنامه تست چهارم:

این برنامه همانند برنامه سوم است، با این تفاوت که عملیات ریاضی و منطقی بر روی متغیرهای 64 بیتی انجام شده است.

 

برنامه تست پنجم :

در این برنامه یک سری عملیات ریاضی بر روی متغیرها انجام‌ شده و هم زمان خروجی تغییر وضعیت داده شده است.

خب کم کم داریم به جواب این سوال  که بهترین کامپایلر AVR چه کامپایلری است نزدیک می‌شویم با سیسوگ همراه باشید.

 

نتایج:

حجم برنامه:

 

 

نمودار فوق نشان‌دهنده‌ی حجم خروجی کامپایلر برای هر یک از برنامه‌ها است. نمودار نارنجی مربوط به کامپایلر کدویژن و نمودار آبی مربوط به کامپابلر GCC است. دقت داشته باشید هر چه برنامه با حجم کمتری ایجاد شده باشد، بهینه‌تر است؛ چراکه شما قادر هستید برنامه‌ی بیشتری را روی حافظه‌ی مشخصی ذخیره کنید. پس نمودار کوچک‌تر یعنی عملکرد بهتر.

دقت داشته باشید شبه کامپایلر کدویژن اصلاً قادر به کامپایل کد نمونه 4 نبود. چراکه این شبه کامپایلر، از متغیرهای 64 بیتی پشتیبانی نمی‌کند.

 

 

همانطور که از نتایج به دست آمده مشخص است، در این بخش، کامپایلر 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) را ببینید!

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

62 دیدگاه در “کامپایلر Codevisionavr در مقابل کامپایلر GCC و مقایسه تخصصی آنها

  1. Avatar for حسام الدین سلطانی حسام الدین سلطانی گفت:

    با تشکر از مطالب خوبتون یک سوال برای انتخاب مسمم یک برنامه مناسب برای برنامه نویسی میکرو که بتواند خانواده های مختلف را پشتیبانی کند و علاوه بر این یاد گیری آن عمل بسیار سخت نباشه چه پیشنهادی میدین؟ممنون

    1. Avatar for zeus zeus گفت:

      سلام دوست عزیز
      من gcc رو پیشنهاد میکنم – هم روی پلتفرم های مختلف کار میکنه و هم میتونید برای میکروکنترلرهای مختلف برنامه نویسی کنید.

  2. Avatar for محمد محمد گفت:

    سلام به همه ی دوست داران GCC و نرم افزارهای آزاد
    میتونید برای برنامه نویسی AVR از نرم افزار MPLAB X IDE از شرکت میکروچیپ استفاده کنید که کاملا رایگانه و در ویندوز و لینوکس قابل نصب هست. ابتدا کامپایلر GCC را جداگانه دانلود و نصب کنید سپس MPLAB X را نصب کنید. کامپایلر شناسایی میشه و میتونید شروع به برنامه نویسی کنید. برای STM32 هم از STM32CUBE IDE استفاده کنید. برای میکرو های NXP LPC هم نرم افزار MCUXPRESSO IDE به طور رایگان ارایه شده.

    1. Avatar for zeus zeus گفت:

      بسیار متشکر برای معرفی ابزار های رایگان :))

  3. Avatar for حسن حسن گفت:

    حالت optimize code در gcc مشکلاتی داره. من البته من مدتهاست که کارنکردم. اما خاطرم هست که در این حالت بعضی از کدها رو به اشتباه حذف می‌کرد و مثلا باعث می‌شد lcd کاراکتری کار نکنه. در کل من وقتی در این کد کامپایل میکردم به مشکلات عجیبی برخورد میکردم. در ضمنا دیباگ هم به درستی انجام نمیشد

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      برای استفاده از هر ابزاری لازمه که در مورد اون مطالعه کنید و شرایط استفاده از آن ابزار رو بدانید، در این صورت با مشکلات کمتری روبرو می شوید و اتفاقاتی که به نظر باگ میرسن ، یه رفتار منطقی جلو می کند.
      مثلا در مورد دیباگ شما میتونید با تنظیم فلگ های مربوطه سطح دیباگ رو تنظیم کنید و خیلی چیزهای دیگه ای که میشه توی این کامپایلر تنظیم کرد.
      فکر میکنم این کامپایلر اینقدر خوب باشه که توی اتمل استودیو داره ازش استفاده میشه 🙂

  4. Avatar for حسن حسن گفت:

    سلام
    خیلی ممنون از مقایسه ای که داشتید.
    ای کاش یه مقایسه ای هم برای حالت optimize شده در حالت Speed انجام میدادید.

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز
      البته توی شرایط کلی فکر نمیکنم تغییری ایجاد کنه هرچند شایدم تغییر میکرد ولی چیزی که هست اینه که من سعی کردم اپتیمایزی رو بررسی کنم که معمولا بیشتر از اون استفاده میشه
      کم پیش میآد حداقل برای خودم که اپتیمایز رو روی سرعت بذارم. و شاید به همین دلیل بوده که این اپتیمایز رو بررسی کردم.

  5. بازتاب: چگونه یک مهندس امبدد سیستم(سامانه ی نهفته) شویم؟(2) - ایده طلایی
  6. Avatar for حمیدرضا حمیدرضا گفت:

    سلام
    ممنون از این مقایسه جالب.
    سوالی داشتم:؟
    امکانش هست که دستورات gcc را توی کدویژن اجرا کرد؟ یا بهتر بگم که بصورت یک کتابخانه به برنامه کدویژن اضافه بشه و بعد ازش استفاده کنیم؟

    1. Avatar for Sisoog Os Sisoog Os گفت:

      سلام دوست عزیز
      GCC یک کامپایلر هست شبیه اون چیزی که پشت پرده کدویژن داره برای شما انجام میده
      یک لایبرری یا چیز اضافه ای نیست

  7. Avatar for مجتبی مجتبی گفت:

    مطلب خوبی بود و با خواندن نظر ها باعث شد اون غولی که از ریجستر ها ساخته بودیم بمیره
    خواستم بگم که تمامی بخش های avr با GCC راه اندازی شده و کافیه سرچ کنیم از کد ها کپی کنید و کم کم خودمون مسلط بشیم .
    سوالم اینجا بود میخواستم ببینم آیا میشه از stm cube mx برای کانفیگ میکرو های stm استفاده کرد و کد ها رو تو GCC نوشت ؟
    یا باید از اول با ریجستر کار کرد در gcc ؟

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      سلام خواهش میکنم دوست عزیز 🙂
      بله میشه استفاده کرد – من خودم گاهی همین کار رو انجام میدونم مخصوصا برای بخش هایی که کمتر باهاشون کار میکنم 🙂
      فکر میکنم کیوب مکس خروجی مناسب برای gcc هم داشته باشه

      1. Avatar for مجتبی مجتبی گفت:

        ممنونم از پاسختون به تازگی متوجه شدم که شرکت stm از stm cube ide رو نمایی کرده که این نرم افزار از فریم ورک های eclipse بهره برده و همون داخل هم میکرو کانفیگ میشه و همونجا هم کد نوشته میشه و از همه بهتر اینه که نرم افزار رایگانه

        1. Avatar for زئوس Zeus زئوس Zeus گفت:

          بسیار عالی
          به شخصه ترجیه ام ابزاری هست که بشه به سادگی کاستومش کرد. ولی در کل نفس ماجرا خیلی خوبه و جای تقدیر داره.

  8. Avatar for hamed mosavi hamed mosavi گفت:

    عالی بود

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      خواهش میکنم 🙂

  9. Avatar for امین امین گفت:

    ممنون از مطالب مفیدتان
    خیلی عالی بودن
    رفتم سراغ نصب Atmel Studio

    1. Avatar photo electronic girl گفت:

      خواهش میکنم دوست عزیز
      موفق باشید

  10. Avatar for محمد محمد گفت:

    سلام ممنون ، بسیار مفیدبود.

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      خواهش میکنم دوست عزیز 🙂

  11. بازتاب: چرا کدویژن نه! - سیسوگ - Sisoog
  12. Avatar for وحید وحید گفت:

    سلام
    لطفا مراجع خوب و کاربردی به زبان فارسی برای استفاده از GCC معرفی کنید

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز ؛ متاسفانه دوستان فارسی زبان علاقه ای به استفاده آزاد از نرم افزار ندارند و ترجیه میدن نرم افزار دزدی کدویژن رو استفاده کنند برای همینم هست که آموزش خوبی به زبان فارسی برای GCC وجود نداره !
      ولی انشالله اگر فرصت بکنیم این خلاء رو پر خواهیم کرد و آموزش های خوبی برای کار با GCC منتشر خواهیم کرد .
      مساله ای که باهاش درگیر هستیم زمان ؛ حجم کارها خیلی زیاده و تعداد نفر ما که روی سیسوگ فعالیت میکنیم محدوده ؛ از همه دوستان و همراهان عزیز سیسوگ دعوت میکنیم که داشته های خودشون رو با ما به اشتراگ بذارن ؛ شاید که بتونه به باقیه کمک کنه.
      موفق باشید

  13. Avatar for علی علی گفت:

    سلام.
    سوال از gcc چطور می توان بهره برداری کرد؟ منظورم راه اندازی ide مربوط به gcc است. مراحل نصب و راه اندازی gcc رو اگه میشه توضیح بدید.
    با تشکر.
    با توجه به اینکه نمی خواهم کدویژن رو برای پروژه جدیدم استفاده کنم، ممنون میشم زودتر در مورد gcc و چگونگی استفاده از ide مربوطه اش راهنمایی بفرمایید.

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز
      خوشحالم که دارید میرید سراغ GCC این واقعا عالیه برای شروع میتونید از اتمل استودیو شروع کنید ؛ پست های آموزشی هم برای اتمل استودیو قبلا منتشر کردیم .
      برنامه نویسی میکروکنترلر AVR در محیط ویژوال استودیو (جلسه اول)
      برنامه نویسی میکروکنترلر AVR در محیط ویژوال استودیو (جلسه دوم)
      چرا و چگونه از Atmel studio استفاده کنیم؟

      1. Avatar for علی علی گفت:

        سلام مجدد. ممنون از راهنمایی تون.
        در محیط اکیلیپس آموزشی وجود نداره.
        به طور کلی محیط اکیلیپس بهتره یا Atmel studio یا visual studio؟

        1. Avatar for زئوس Zeus زئوس Zeus گفت:

          سعی میکنیم آموزش Eclipse رو قرار بدیم ؛ این که کدوم محیط بهتره خیلی برمیگرده به سلیقه شما ؛ من خودم Eclipse رو ترجیه میدم چون توی لینوکسم میتونم ازش استفاده کنم و احتمالا عادت کردم بهش ولی Atmel Studio هم بد نیست 🙂

          1. Avatar for علی علی گفت:

            سلام علیکم.
            من اکیلیپس رو برای avr راه اندازی کردم و با استفاده از پروگرمر، یه دونه میکرو atmega128 رو پروگرم کردم.
            البته ادیتور من اکلیپس 03-2019 هستش که مشکل داشت اما بالاخره درست شد.
            سوالم اینه که کتابخانه های مربوط به AVR-gcc از کجا می تونم دانلود کنم. اصلا مثل آردوینو یا حتی بعضا کد ویژن کتابخانه های آماده هستش؟ خصوصا الان کتابخانه fat برای sd card و وای فای برای ماژول esp8266 نیاز دارم.
            ممنون میشم راهنمایی بفرمایید.

          2. Avatar for زئوس Zeus زئوس Zeus گفت:

            ببینید وقتی از GCC استفاده میکنید دیگه نباید نگران کتابخونه ای داشته باشید چون بیشتر کتابخونه های نوشته شده در سطح وب با این کامپایلر همخوان هستند و اصلا برای این کامپایلر نوشته شده اند.
            مثلا برای کتابخانه Fat میتونید از کتابخوانه elm-chan استفاده کنید.

          3. Avatar for علی علی گفت:

            سلام مجدد.
            یه سوال از محیط اکلیپس دارم.
            چطور می تونم کتابخانه های آماده(مثلا 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 میخواهم استفاده کنم.

          4. Avatar for زئوس Zeus زئوس Zeus گفت:

            سلام دوست عزیز
            اگر برای کامپایل برنامه از GCC + Eclipse استفاده میکنید ؛ احتمالا از پلاکین AVR-Eclipse هم استفاده میکنید ؛ در این صورت مراحل زیر را طی کنید
            اول روی پروژه راست کلیک کرده و از گزینه New – گزینه Source Folder رو انتخاب کنید
            بعد فایل های کتابخونه شامل فایل های C و H رو کپی کنید ؛ بعد توی محیط Eslipse سورس فولدر رو انتخاب کنید و کلید Crtl+V رو بزنید ؛ به همین سادگی ؛

  14. Avatar for haman haman گفت:

    سلام خسته نباشید ممنون از مطلب خوبتون
    واقعا کلاس سایتتون با مطالبی که میزارین و مباحث پایه ای مثل معرفی و مقایسه بهترین کامپایلر که معرفی میکنین لول و سطح سایتتون بالاتر از عزیزانی که تو این عرصه فعالیت میکنن قرار داده
    من یک سوال داشتم که کمی بی ربطه به مطلب و یک راهنمایی کوچک تو زمینه انتخاب کامپایلر داشتم
    من با کامپایلر کد ویژن کار میکنم من چطوری بفهم زمان صرف شده برای خواندو اجرا ی یک خط درکدویژن چقدر طول میکشه؟(بیشتر میخوام بفهمم موقع نوشتن و نوع نگارش تو برنامه نویسیم رو تصحیح کنم که سریعتر اجرا بشه وکد بهتر بنویسم).
    ******
    من خودم برنامه نویسی(با اینکه اصلا علاقه ای ندارم ومجبورم)با شیوه رجیستر نویسی و زبان اسمبلی برای8051شروع کردم
    بعد برای یادگیری avrبه ما کدویژن رو یاددادن که اینکارو اسون تر میکرد مخصوصا تو بحث رجیستر های avr ولی الان به مشکل خوردم اساسی اونم بخاطر اینکه من چند سال کلا رها کردم بحث برنامه نویسی میکروهارو ولی الان که دوباره میخوام برنامه نویسی کنم اکر نرم افزار نباشه رو ی کاغذ هیچی نمیتونم بنویسم وبشدت گیر میکنم.مقدار دهی نحوه مقدار دهی و حتی اسامی رجیسترهارو فراموش میکنم یجورایی کلا فراریم ازش.
    الان بنظر شما چکار کنم با کدویژن ادامه بدم تا یکم جلو برم بعد بیام سراغ دیگر کامپایلرها یا کلا کامپایلرهای دیگر فراموش کنم؟

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      برای این که بتونید بفهمید هر خط توی کدویژن و یا هر کامپایلر دیگه ای چقدر طول میکشه ؛ باید بدونید که این خط به چه دستورات اسمبلی ای ترجمه میشه و بعد سیکل مورد استفاده از خط رو محاسبه کنید ! اما برای این که بفهمید هر خط به چه دستورات اسمبلی تفسیر میشه لازمه که فایل .map رو مطالعه کنید ؛ هنگام کامپایل ؛ کامپایلر یه فایل با پسوند map ایجاد میکنه که توش توابع رو به صورت ترجمه شده به اسمبلی نشون میده .

      خوب واقعا در بیشتر برنامه ها لازم نیست که به اسمبلی چیزی بنویسید مگر در موارد خاص ؛ که خیلی هم کم پیش میآد ؛ من توصیه میکنم از کامپایلر GCC استفاده کنید.

  15. Avatar for محمد محمد گفت:

    سلام مهندس مقاله ی مفیدی بود واقعا..مهندس قطعا IDE توی نوشتن کد برا من مهمه میشه بگید برا GCC چه IDE رو پیشنهاد میکنید؟

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز ، من سالهاست که از Eclipse استفاده میکنم ؛ اما اتمل استودیو هم پیشنهاد خوبیه ؛ نحوه کار با اتمل استودیو رو قبلا توی سایت آموزش دادیم

    2. Avatar for فربد فربد گفت:

      منم با اسمبلی شروع کردم و الان برای انجام پروژه هام از کدویژن استفاده میکنم چون کار باهاش راحت و مطمئنه و واقعا میشه باهاش پروژه های صنعتی و تجاری انجام داد. ابزار کدویزارد خیلی کمک میکنه برای تسریع پیکربندی اولیه و کتابخانه های کامل و بی نقصی داره. تا حالا هیچ مشکلی باهاش نداشتم و دلیلی نمیبینم که بخاطر شاید سرعت اجرای بیشتر برنامه وقت بیشتری رو صرف کدنویسی و انجام پروژه بکنم.

  16. Avatar for اسماعیل اسماعیل گفت:

    نظر احسان معقول و منطقی تر بود بنظرم
    منم خودم میکرو رو از سطح کدنویسی رجیسترها شروع کردم در محیط اتمل استودیو بعد از یاد گیری ریجیستر ها و سبکهای برنامه نویسی ترجیح دادم با یه ویرایشگر سریعتر کار کنم
    انتخابم کد ویژن بود و راضیم ازش
    در مورد کرک و خرید لایسنس آیا شما ویندوز روی کامپیوترتون و بقیه نرم افزار ها رو پول دادین خریدین؟ اگر آره که آفرین به شما
    اگر نه که نباید به بقیه ایراد گرفت
    در کل نقد باید منصفانه باشد
    بله کامپایلر جی سی سی منبع بازه . استاندارده.
    حرفه ایه ولی واسه هر کاری باید چرخ رو از اول اختراع کنی
    در ضمن من یکی شخصا به کتاب خونه های منتشر شده در سطح وب حس خوبی ندارم
    چون که نه توضیحات درست و حسابی دارن و بعضی از کدهای درون کتابخونه ها هم مصرف شخصی و پروژه ای دارن و به درد بقیه نمیخورن
    تازه از کجا معلوم کد درست باشه و جواب بده
    و بدین سان باید چرخ رو از نو اختراع کرد

    در مورد حجم کد تولیدی مواردی هست که به اون اشاره نشده
    یکی از مواردی که به اون اشاره نشده و شخصا در کدهای اسمبلی تولید شده در کدویژن مشاهده کردم کدهایی برای اینشیالایز کردن حافظه وجود دارد جهت مقدار دهی اولیه به حافظه که در مبحث هنگ کردن میکرو و ریست شدن آن توسط واچ داگ می تواند بسیار مفید باشد
    که از دید مقایسه شما این حجم اضافی تلقی می شود
    در کل هر ابزاری یکسری مزایا و یکسری معایب دارد که یک کارشناس با تجربه باید نقد را از هر دو منظر انجام دهد
    تعصبی به کدویژن ندارم چون معایب متعددی دارد مانند نداشتن قابلیت کامل کردن کد به صورت خودکار و …
    در ضمن با نظر کاملا شخصی و مقرضانه شما هم موافق نیستم

    دوستان سعی کنید برای هر هدفی ابزار درست و معقول آن را انتخاب کنید
    یک پیشنهاد
    لطفا اگر قرار است در مورد موضوع جدیدی مطلب بزارین و تحقیق کنین
    در مورد هنگ میکرو و روتینهای احیای برنامه میکرو مطلب بذارین چون که اصلا در ایران ندیدم کسی در مورد موضوع به این مهمی را مقاله کرده باشد
    با تشکر از زحمات شما و مطالبتون

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز 🙂 اگر با اتمل استودیو شروع کردید و با کدویژن ادامه دادید ، باید بگم که خوب شروع کردید و بد ادامه دادید خخخ (شوخی میکنم ؛ هر کسی دیدگاه و انتخاب خودش رو داره قطعا) ترجیه من اینه که لینوکس و نرم افزار های آزاد استفاده کنم و برای کار های شخصی خودم از تمام ابزار های متن باز بهره میبرم !
      آخر نفهمیدم معتقد به اختراع چرخ هستید یا خیر ؟ یک جا هستید و یک جا نیستید ظاهرا ! ولی سورس های خیلی خوبی برای بهره بردن از GCC وجود داره که حتی خود کدویژن توی ورژن های جدیدش به کتابخونه هاش اظافه کرده مثل همین کتابخونه فت فایل سیستم ! پس همیشه کدهای متن باز نیست ، البته منکر این نیستم که کدهای بد هم وجود داره ولی کد های خوب تعدادشون خیلی بیشتره و میشه ازشون الگو گرفت یا مستقیما ازشون استفاده کرد.
      قطعا این بخش درون GCC هم وجود داره ولی خیلی لایت تر و بهینه تر ؛ شاید در مطلبی به این مهم بپردازیم !
      ببینید این مقاله یک مقاله علمی است و با استناد به مواردی که تکرار اونها توسط هر شخصی امکان پذیر است به مقایسه بین دو نرم افزار میپردازه ، مهم نیست نظر من چیه در هر صورت حرف های مقاله با توجه به یک مقایسه ساده گفته شده و هر کسی هم میتونه خودش این تست ها رو بگیره البته منکر این نیستم که از کدویژن حمایت نمیکنم ولی این تنها نظر شخصی است و در مقاله هیچ دخلی نداره نظر شخصی من !
      این که میگید نظر مقرضانه کاملا بی انصافی است ؛ کدام یک از موارد مطرح شده در مقاله خارج از چارچوب علمی و خارچ از واقعیت بوده و کجا سعی کردم واقعیت رو کتمان کنم ؟

      + مورد جالبی است – حتما به این مساله (هنگ میکروکنترلر) خواهیم پرداخت و نحوه یافتن خطا رو آموزش خواهیم داد. مخصوصا توی میکروکنترلر های ARM که هندل های خیلی خوبی برای این مساله داره.

    2. Avatar for فربد فربد گفت:

      منم با اسمبلی شروع کردم و الان برای انجام پروژه هام از کدویژن استفاده میکنم چون کار باهاش راحت و مطمئنه و واقعا میشه باهاش پروژه های صنعتی و تجاری انجام داد. ابزار کدویزارد خیلی کمک میکنه برای تسریع پیکربندی اولیه و کتابخانه های کامل و بی نقصی داره. تا حالا هیچ مشکلی باهاش نداشتم و دلیلی نمیبینم که بخاطر شاید سرعت اجرای بیشتر برنامه وقت بیشتری رو صرف کدنویسی و انجام پروژه بکنم.

  17. Avatar for جعفر جعفر گفت:

    بنده قبلا آشنایی خوبی با C داشتم ( به خصوص کامپایلر GCC) و با کدویژن شروع کردم. بعضی وقتا کدهایی که با برنامه های دیگه C مینوشتم تو کدویژن جواب های دیگه میداد (portability). این باعث شد سوییچ کنم به atmel studio. درسته باید رجیستر رو تو atmel studio باید دستی بنویسی ولی همه دوستان میدونن اینکار فقط یک بار صورت میگیره و در پروژه های بعدی این تنظیمات رو می تونید به صورت کتابخانه در بیارید . به نظر من این ارزششو داره

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      منم دقیقا همین مشکل رو داشتم ؛ بعد توی ورژن های اولیه اش بود نیاز به محاسبات اعداد ممیز شناور داشتم که اصلا پشتیبانی نمی کرد ، این شد که کوچ کردم مستقیم روی WIN-AVR هنوز اتمل استودیو از C پشتیبانی نمی کرد توی ورژن 4 بود فکر کنم!
      همونطور که قبلا گفتم اصلا کانفیگ سخت افزار شاید یک درصد از زمان پروژه نباشه (پروژه های برزگ منظوره ).

  18. Avatar for احسان احسان گفت:

    با سلام و عرض ادب
    ممنون از مقاله با ارزشی که نوشته بودید. لازم دیدم مواردی را اشاره کنم. که از دیدگاه این مقاله و مقاله قبلی با نام”چرا کد ویژن نه” مورد توجه اصولی قرار نگرفته بودند. در مقاله قبلی گفته بودید که میشه قابلیت حمل کد را با gcc بالا برد ولی با کدویژن نمیشه. مثلا از avr به arm میشه منتقل کرد. من نمیدونم دانش فنی شما در خصوص نوشتن کدهای آرم در چه حدی هست اما خوب میدونم که حداقل در سطح توابع کرنل و توابع سخت افزار به هیچ وقت کدهای avr برای arm استفاده ندارن چون اصلا رجیسترها متفاوت هست و نحوه کانفیگ پین ها و رجیسترها فرق داره. در پروژه های مختلف کاملا اینو حس کردم. پس اگه میخواید از قابلیت حمل صحبت کنید لطفا دقیق صحبت کنید که افراد مبتدی به خطا افتاده نشن.
    اشاره کردید که کدویژن از سی به صورت کامل پشتیبانی نمیکنه و مواردی را فرمودید. قبلش این سوال را بهتر بود میپرسیدید که اون امکانات اضافه که ما میخوایم چند جا استفاده دارن؟ آیا هدف اینه که یک ابزاری داشته باشیم که پر از امکانات باشه حتی اگه امکاناتشو سالی یه بار هم استفاده نکنیم یا هدف کار آمدی ابزار هست؟
    بنده خودم مدتهای طولانی با AVR STUDIO کد نویسی کردم و تجربه فراوانی در مورد اون دارم و بسیار کدهای خوبی هم تولید میکنه اما یه اشکال عمده داره. اونم اینکه شماباید همه چیز را از پایه بنویسی. اینو کسی که دانشجو هست و اطلاعات مختصری از برنامه نویسی داره درک نمیکنه. اما کسی که سال ها کدنویسی صنعتی میکنه میدونه که برای نوشتن هر پروژه وقتی قرار همه چیزو از پایه کار کنی و برای یه تست ساده کلی کد بنویسی چقدر زحمت اضافه متحمل میشی و سرعت کارت پایین میاد.
    در مورد اینکه گفتید رجیسترهای میکرو زیاد نیست باید بگم که نوع نگاهتون به مسئله را قبول ندارم. باشه تعداد رجیسترها اصلا کم هست. چه دلیلی داره من برای انجام هر پروژه مدام کار تکراری بکنم و از پایه کدهای تکراری بزنم تا سطح رجیستر و اولیه برنامم جواب بده؟ شما به راحتی با ویزارد یه کد پایه میزنی از امکاناتی که لازم داری و بعد هر کدوم را لازم داری اصلاح میکنی بدون اینکه 100 خط اول برنامه روبشینی دونه دونه بنویسی و مدام دستت به کتابا بند باشه تا رجیسترها رو پیدا کنی.
    بله gcc خیلی قوی عمل میکنه و چند درصدی بالاتر هست ولی سوالم اینه که چه تعداد پروژه صنعتی کار کردید؟ آیا هدفتون ساختن مریخ پیما هست؟ برای یه دانشجو خوندن این مطلب جوری وانمود میکنه کدویژن کدهای بسیار بدی تولید میکنه ولی به هیچ وجه اینطور نیست. اون چند درصد بهتر بودن gcc واقعا دیده نمیشه. شما سعی دارید پشت اون چند درصد بهتر بودن gcc این مطلب را قرار بدید که کدویژن به درد نمیخوره. سوال دیگه ای دارم. چرا آردوینو رشد کرد؟ درسته اپن سورس هست ولی دلیل رشد اصلی اپ سورس بودن نیست چون در اون صورت فقط تعدادی متخصص میرفتن سراغش ولی اغلب استفاده کننده ها که توسعه دهنده نیستن پس چرا رفتن سراغش؟ دلیلش راحتی استفاده و تلف نشدن وقت به خاطر نوشتن یه پروژه ساده بوده. چون شما را تا حد زیادی از سطح سخت افزار و کرنل جدا کرده. دقیقا کدویژن هم خیلی از این مشکلات را حل کرده. الکترونیک از زمانی رشدش شدید شد که از سطح سخت افزار و کرنل خودشو بالاتر اورد. یادتونه وقتی اردوینو نبود برای راه اندازی یه lcd رنگی چقدر وقت هدر میدادیم چون هیچ کدی پیدا نمیشد؟ کدهای انطباق نداشت و روزها وقتمون میرفت تا 1 کار ساده را انجام بدیم.
    این ها مواردی بود که به نظرم رسید. البته ببخشید اگه کمی ادبیاتم تند بود. چون در مقایسه شما انصاف جاش کمرنگ بود و صرفا تلاش شده بود یه عقیده شخصی تحمیل بشه. امیدوارم یه مقاله در سایتتون بنویسید و مقایسه عملی و واقعی از این دو کامپایلر داشته باشید و اشاره کنید که برای کارهای واقعی هم این مقایسه ها اونقدر خودشو نشون میده یا نه. منتظر مطالبتون هستم.
    موفق و پیروز باشید.

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      بذارید اینطور شروع کنم ، انصاف شما کجاست وقتی که از نرم افزار قفل شکسته استفاده می کنید ؟ اگر واقعا فکر میکنید کدویژن خوبه ، چرا با خرید لایسنس به رشدش کمک نمی کنید
      من هیچ منفعتی از تبلیغ GCC و یا CodeVision نمی برم ، تمام مسائلی که در این مقاله و مقاله چرا کدویژن نه ذکر شد ، تنها حقایقی بود که با مدرک و دلیل و استدلال به مخاطب ارائه داده شد و این مخاطب است که انتخاب می کند چه راهی را بپیماید.
      در مورد قابلیت حمل کد ، برداشت میکنم که هیچ برنامه گسترده ای ننوشته اید که آنقدر پیچیده باشد که متوجه این موضوع مهم شده باشید. منظور من حمل کد یک برنامه چشمک زن نیست ، منظورم برنامه های پیچیده است که فارغ از لایه های سخت افزاری توابع پیچیده ای دارند. فرض کنید قصد دارید توابعی که عملیاتی بر روی متغیر های 64 بیتی را انجام می دهد در کدویژن پیاده سازی کنید ؟ ، اصلا امکانش وجود ندارد ، این میشود نوعی قابلیت حمل کد که در GCC به سادگی ممکن است.
      در مورد امکانات کدویژن ، متاسفانه یکی از اشتباهات فاحش فضای دانشگاهی کشور بسنده کردن به ناچیز هاست ، وقتی فرض کنیم دانشجویی نخواهد توانست مریخ نورد بسازد ، آموزش های سطح پایینی دریافت خواهد کرد ، ولی از کجا مشخص است که کدام دانشجو در آینده چه کاری انجام خواهد داد ، پس بهتر نیست با توجه به این که این مهم را نمی توان مشخص کرد ، بهترین ها را معرفی و عرضه کرد ؟
      اگر مدت طولانی با AVR Studio کار کرده باشید ، باید متوجه باشید که 90 درصد سورس های منتشر شده در بستر اینترنت با استفاده از GCC تهیه شده اند و هیچ نیازی نیست از صفر شروع کرد. در صورتی که برای کار با کدویژن نیاز است ابتدا کدهای GCC را برای کدویژن قابل فهم کنید که همیشه هم شدنی نیست بعد استفاده کنید.
      واقعا در یک پروژه چند درصد وقتتون صرف پیکر بندی سخت افزار میشه ، برای من کمتر از 1 درصد از تایم ، چرا که اولا لازم نیست از صفر شروع کرد ، با مراجعه به کتابخانه های آماده و سورس هایی که از قبل از نوشته اید می توانید به راحتی کانفیگ سخت افزار را انجام دهید.
      پیکر بندی سخت افزار برای هر پروژه که مداما تغییر نمی کند که اینچنین نگران زمان آن باشیم.
      واقعا برتری GCC خیلی بیشتر از چند درصد است ، شما مختارید که از هر پلتفرمی که دوست دارید استفاده کنید ، اما به نظر من GCC و codevision اصلا قابل مقایسه نیستند. اتفاقا من سعی نمی کنم دارم مستقیم و با تکیه بر شواهد و دلایل کاملا مستدل میگم کدویژن بدرد نمی خوره 🙂
      بله آردوینو به دلیل سادگی رشد کرد ، نه به اون سادگی که مد نظر شماست! ، اولا لازمه بدونید که آردوینو هم از GCC استفاده می کند . دوم این که اگر کدویژن بهتر و ساده تر بود آردوینو چرا از اون استفاده نکرد ؟
      آردوینو امکان لذت بردن از الکترونیک را به تمام افراد داد ، فرض کنید شما برنامه نویس کامپیوتر بودید و میخواستید کمی کنجکاوی کنید و فلان مساله را با استفاده از یک سخت افزار کوچک حل کنید ، اگر دانش الکترونیک نداشتید این کار برای شما خیلی دشوار و گیج کننده بود ولی آردوینو با حذف پیچیدگی الکترونیک و مدارت مربوطه و ارائه ماژول ها این کار رو انجام داد و این باعث استقبال فراوان از اون شد.

    2. Avatar for حمید حمید گفت:

      سلام
      احسنت

  19. Avatar for علی علی گفت:

    سلام نمیشه از gcc روی ویژوال استودیو استفاده کرد؟؟

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      IDE چندان مهم نیست ، بله میشه از IDE ویژوال استودیو استفاده کرد و فکر نمی کنم مشکلی داشته باشد.

  20. Avatar for عرفان عرفان گفت:

    ممنونم از مقاله خوبی که منتشر کردین.
    اگه بخوایم واقع بینانه به قضیه نگاه کنیم واقعا پیدا کردن سخت افزار های لازم جهت کار با کامپایلر gcc خیلی ساده تر از کد ویژن هست. همین الان شما میتونین چندین اپلیکیشن مختلف تو گوگل پلی پیدا و نصب کنین که با همین گوشی دم دست تون برای میکرو های avr برنامه نویسی کنین. البته جهت پورت کردن هم اپلیکیشن zflasher رو پیشنهاد میکنم. یکی از مهم ترین دلایل من برای توجه به gcc همین قضیه ساده اس. شما برای کار با کدویژن باید یه لبتاپ یا حداقل تبلت ویندوزی با خودتون اینور و اون ور ببرین اما با هر گوشی اندرویدی میتونین به کامپایلر gcc دسترسی داشته باشین این یعنی قدرت !

    1. Avatar for Sisoog Os Sisoog Os گفت:

      متشکرم از شما
      اشاره مناسبی بود

  21. Avatar for dehghan dehghan گفت:

    سلام و خسته نباشید. اگر سورس بوت لودر avr که در کدویژن دادید را برای gcc بدید خیلی ممنون میشم

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      فکر نمیکنم نیاز به تغییر خاصی وجود داشته باشه ، همین رو با GCC کامپایل کنید 🙂

  22. Avatar for mahdi.7 mahdi.7 گفت:

    سلام
    ممنون از مطالب فوق العاده و همچنین نگرش دنیای ازادتون که واقعا نمونش کم پیدا میشه توی جامعه ما
    همونطور که خودتون هم گفتید اقبال ایرانی ها به کدویژن بیشتر (90% مواقع حتی) برای کدویزاردش هست. در این که کامپایلر GCC بهتره اصلا شکی نیست اما خیلی مقواقع برای کار های نچندان ضروری هم واقعا برای طراح زوره که بیاد تک تک با رجیستر ها سروکله بزنه و همش دستش به دیتاشیت میکرو مورد نظرش بند باشه. برای GCC ابزاری به یکپارچه گی و کاربر پسند بودن کدویژن هم هست اصلا؟
    و این که منابع اموزشی فارسی غالبا برای کدویژن هست ممنون میشیم سلسه اموزش هایی برای اتمل استدیو تدارک ببینید.
    موفق باشید

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز
      تعداد رجیستر های میکرو اونقدر زیاد نیست و بعد از یه مدت کار کردن با میکرو به همه مسلط می شید ، به نظر من مساله اصلی در خصوص استفاده از در کنار قابلیت ویزارد ، تدریس آن در دانشگاه ها و مراجع آموزشی است همین امر باعث می شود کاربران تمایل بیشتری نسبت به اون داشته باشند
      از طرفی عدم وجود آموزش های کافی به زبان فارسی در مورد GCC و ابزار های رایگان باعث میشه که کاربران تازه کار تمایل کمتری نسبت اون داشته باشند
      انشالله در مورد استفاده از GCC برای AVR سعی می کنیم که اموزش هایی تهیه کنیم که استفاده از آن را ساده کند.

      1. Avatar for علی علی گفت:

        کم نیست?
        من مبتدی ام این ریجستر های uart که خیلی زیاده
        اگه این سادست پس برا پردازنده های arm اتمل چه خبره?

        1. Avatar for زئوس Zeus زئوس Zeus گفت:

          خوب بعد از کار کردن و سر و کله زدن با رجیستر ها ، همه رو به خاطر می سپارید

  23. Avatar for علی علی گفت:

    سلام مهندس. عالی بود. خیلی مهندسی و دقیق بود. نتیجه تست 5 منو شگفت زده کرد!!!

    برای من که با بسکام کار می کنم و با زبان C یه آشنائی ساده دارم کوچ کردن بسیار مشکل و زمان بره. من کلی توی سایت های ایرانی گشتم ولی آموزش دقیق و خوبی راجع به AVR GCC نبود. هرچی بود بسیار بسیار کوتاه و ناقص.

    خوشحال میشیم که یه مقاله مفصل (مثل تمامی مقاله ها و آموزش هاتون) منتشر کنید.

    با تشکر

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      خواهش میکنم ، نظر لطفا شماست
      همیشه GCC بهتر و قدرتمند تر بوده ولی متاسفانه سلیقه کاربر ایرانی به سمت کدویژن گرایش داره که امیداواریم بتونیم با قرار دادن مطالب مفید و آموزش های مناسب این سلیقه به سمت محصولات بهتر و اپن سورس تغییر بدیم.
      در برنامه هست که آموزش در خصوص نصب و پیکربندی و استفاده از GCC برای انواع میکروکنترلر رو منتشر کنیم
      انشالله در آینده ای نزدیک

  24. Avatar for هادی هادی گفت:

    با سلام …
    مقاله جالبی بود،
    فقط برای کسانی که دارند از کدویژن استفاده میکنند ، آموزش هایی برای یادگیری و انتقال به GCC هم معرفی می کنید ؟
    پیروز باشید .

    1. Avatar for زئوس زئوس گفت:

      سلام دوست عزیز
      در حال آماده سازی ابزارهای مورد نیاز هستیم ، تا دوستان بتوانند با کمترین دردسر از بستر GCC استفاده کنند.
      به زودی مطلبی در همین راستا منتشر خواهیم کرد.

  25. Avatar for امیر رضا کرامتی امیر رضا کرامتی گفت:

    سپاس.
    سودمند بود.

    1. Avatar for زئوس زئوس گفت:

      خواهش میکنم دوست عزیز

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *