ARM, توصیه شده, مقاله

مقایسه تخصصی کامپایلر کیل و GCC

کیل یا gcc! از کدام برای برنامه‌نویسی استفاده می‌کنید؟ سؤال خیلی از دوستان تازه‌کار و حتی حرفه‌ای این است که کدام کامپایلر بهتر است و بهترِ از کدام‌یک استفاده کرد؟ البته لازم است یک پرانتز باز کنم و به این مهم اشاره‌کنم که همیشه این چالش وجود داشته که با چه چیز و از کجا شروع کنیم! و همیشه این جواب رو خیلی صریح و واضح دادم که شما شروع کن بعد مسیر را اصلاح کن! متأسفانه این مقوله تبدیل به وسواس فکری برای عده‌ای شده است و بهانه‌ای برای اینکه شروع نکنند!‌ همیشه در نخ این هستند که کدام میکرو بهتر است یا کدام نرم‌افزار بهتر کار می‌کند – واقعاً میکرو و کامپایلر چند درصد از یک پروژه رو به خودش اختصاص می‌دهند؟ اما اگر به‌عنوان کسی که شروع کرده و در حال کار است و الان قصد دارد کار و مهارتش رو اصلاح کند و ارتقاء دهد این مقاله را مطالعه می کنید باید بگویم که بهترین راه همین راهی است که شما تاکنون طی کرده‌اید.

چی شد که این مقاله را نوشتم

Comodor 64 وقتی‌که الکترونیک را شروع کردم هنوز میکروکنترلر وجود نداشت (حداقل در دسترس من) و من اولین کامپیوتر را خودم با اتکا به کتاب Build Your Own Z80 Computer آن هم با چه مکافاتی ساختم و این برای من شروع دنیای دیجیتال امروزی بود. برنامه‌نویسی را هم به شخصه با basic شروع کردم آن هم با کمک موجودی به اسم Comodor 64 (همین عکسی که می‌بینید) ! این موجود یک کامپیوتر واقعی نبود یک مفسر زبان بیسیک بود!، روشن که می‌شد تنها می‌توانست دستورات بیسیک را درک کند (البته اخیرا فهمیدم که دوستان تنها آن را به اسم کنسول بازی قدیمی می‌شناسند) اما آیا هنوز دارم با مفسر بیسیک کار می‌کنم یا از Z80 استفاده می‌کنم ؟ قطعا خیر! اینها واقعا حس نوستالوژی برای من دارند ولی همیشه باید در مسیر پیشرفت بود و از اشتباه نترسید! بله من هم ده سال پیش وقتی که کدویژن ورژن ۱٫۰٫۴ بود از آن استفاده می‌کردم. فهمیدم کدویژن چیز جالبی نیست و از کامپایلر gcc (اگه کنجکاو هستید بدانید چرا کدویژن خوب نیست مقاله کامپایلر Codevisionavr در مقابل کامپایلر GCC و مقایسه تخصصی آنها و چرا کدویژن نه! را مطالعه کنید.) استفاده کردم. تقریبا تا الان تنها از gcc استفاده کرده‌ام . برای هر میکروکنترلری که لازم بوده استفاده کنم نسخه رایگان داشته و چی بهتر از این. در ضمن امیدوارم که این مقاله بتواند در تصمیم گیری به شما کمک کند تا راه درست را انتخاب کنید! دقت کنید راه درست لزوما انتخاب keil یا gcc نیست بلکه شناخت شرایط پیش رو است.

معرفی کامپایلر کیل

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

شرایط مقایسه کامپایلرها

ممکن است خیلی‌ها بنا به سلیقه یا اعتقادات غیر علمی یک کامپایلر را از دیگری بهتر بدانند و حتی حاضر به مجادله باشند. ما قرار نیست چنین رویکردی داشته باشیم! و تنها چیزی را ارائه خواهیم کرد که قابل استناد و تکرار در شرایط یکسان باشد (شرایط استاندارد یک آزمایش علمی) برای همین هفت چالش (شما بخوانید برنامه) ساده طراحی کردم و برنامه را هم با کامپایلر KEIL و هم GCC کامپایل کردم و نتیجه را با در مقایسه با هم بررسی کردم. برای انجام این مقایسه از کیل ورژن 5.15.0 و gcc ورژن 9.2.1 (که فکر می‌کنم شاید نتیجه‌ها روی ورژن ۴ بهتر هم باشه) استفاده کردم در کدها از هیچ کتابخانه‌ای نظیر HAL یا SPL یا ‌‌LL استفاده نشده است تا نتایج واقعی‌تر باشند، تنظیمات هر دو کامپایلر بر روی اپتیمایز برای حجم (Os-) تنظیم شده است.
تمام نتایج از تست بر روی میکروکنترلر STM32F103CBT6 که با فرکانس ۷۲ مگاهرتز (کریستال و PLL) تنظیم شده است منتج گردیده است.
نحوه انجام تست ها به این شکل است که ما یک سری عملیات (ریاضی، منطقی، شرطی) را انجام میدهیم بعد وضعیت یک پایه رو تغییر میدهیم و این کار را مداما تکرار می‌کنیم – هرچه فرکانس ایجاد شده بر روی پایه مورد نظر بیشتر باشد به این معنی خواهد بود که کیفیت کد تولید شده بهتر است و با سرعت بیشتری در حال اجراست.

چالش نخست

در این چالش که در واقع ساده ترین چالش ممکن است – بعد از مقدار دهی اولیه پورت یک بیت را صفر و یک می‌کنیم! صفر و یک کردن‌ها نه با استفاده از رجیسترهای مربوطه(BSRR , BRR) بلکه با استفاده انجام عملیات منطقی است. و نتیجه غافل‌گیر کننده بود، واقعا انتظار نداشتم که در این مرحله تفاوت چندانی وجود داشته باشد: تست سرعت کیل همانطور که در نمودار بالا می‌بینید کد تولید شده توسط کامپایلر gcc با سرعت بیشتری اجرا شده است و توانسته روی پایه میکروکنترلر فرکانس ۴ مگاهرتز را ایجاد کند در حالی که keil تنها ۳٫۲ مگاهرتز را ایجاد کرده است.

چالش دوم اعداد اعشاری

در این چالش ما در حلقه یک محاسبه خیلی ساده (تنها جمع) بر روی متغیر float انجام دادیم البته مطابق برنامه زیر و باز نتیجه شگفت‌آور بود (حداقل برای من) تست اعداد اعشاری در کیل اصلا انتظار نداشتم که gcc ضعیف عمل کند ولی بهتره بگوییم کیل خیلی خوب عمل کرده است (همیشه نیمه پر لیوان رو ببینید). در این چالش keil با تولید فرکانس ۴۱۰٫۲ کیلوهرتز نسبت به gcc که فرکانس ۳۲۶٫۵ ایجاد کرده بهتر عمل کرده است.
نکته مهم: همیشه سعی کنید تا جای ممکن از محاسبات اعشاری دوری کنید! محاسبات اعشاری فرایند زمان بری است حتی برای میکروکنترلر های ۳۲ بیتی! اگر نتیجه چالش قبل رو با این چالش مقایسه کنید متوجه خواهید شد که یک جمع اعشاری ده برابر سرعت برنامه را کاهش داده است.

چالش سوم محاسبات ریاضی و منطقی

در این چالش انجام محاسبات ریاضی بر روی متغییر های ۳۲ بیتی خواهیم داشت به همراه مقداری عملیات منطقی و البته صدا زدن تابع در این چالش علاوه بر محاسبات ریاضی ساده (جمع) عملیات منطقی هم خواهیم داشت نظیر and و شیفت دادن متغییر و اما نتیجه: سرعت انجام عملیات منطقی در کیل این بار غافل گیر نشدم و نتیجه مطابق انتظار بود! gcc با ایجاد ۷۲۷٫۳ کیلوهرتز در مقابل ۶۱۵٫۴ کیلوهرتز کیل عملکرد بهتری داشت.

چالش چهارم محاسبات ۶۴ بیتی

در این چالش دقیقا اعمال چالش قبل بر روی متغییرهای ۶۴ بیتی انجام شده است و نتیجه زیاد غیر منطقی هم نبود متغیر ۶۴ بیتی در کیل همانطور که طول متغییرها دوبرابر شده انتظار میرفت سرعت هم نصف شده باشد که باز gcc بهتر عمل کرده است و کمتر از نصف سرعتش کاهش پیدا کرده !!

چالش پنجم تابع بازگشتی

حتی عنوان این چالش هم ممکنه برای خیلی ها مبهم باشه چه برسه به کاربردش ! برای این چالش تابع فاکتوریل رو با تابع بازگشتی پیاده سازی کردم   وقتی کیل در سرعت کم میآورد واقعا نتیجه این تست شگفت انگیزه فکر نمی‌کردم اینقدر اختلاف وجود داشته باشد gcc نزدیک به ۱۸۰۰ کیلوهرتز و keil نزدیک به ۶۰ کیلوهرتز :/

چالش ششم محاسبه CRC32

یکی از پر کاربرد ترین الگوریتم‌های موجود در برنامه‌نویسی سخت‌افزار، الگوریتم‌های خطایابی دیتا هستند که شاید پر استفاده‌ترین آنها در دنیای میکروکنترلرها الگوریتم‌های crc باشند – برای همین در این چالش این الگوریتم رو انتخاب کردم و اما نتیجه محاسبه crc در کیل باید اشاره کنم مقداری ناامید کننده است برای gcc ! اینجا کیل با حدود ۱۰ کیلوهرتز بهتر عمل کرده !

چالش هفتم اشاره گر تابع

احتمالا باید با مفهوم اشاره‌گرها آشنا باشید – اشاره‌گر به تابع یکی از پرکاربردترین نوع اشاره‌گر است وقتی قصد داشته باشیم کتابخانه‌های سطح بالا نظیر HAL رو پیاده سازی کنیم. و اما نتیجه مقایسه اشاره گر تابع در نرم افزار کیل همونطور که از نمودارها مشخص است gcc کمی بیشتر از ۵۰ کیلوهرتز بهتر عمل کرده !
همونطور که قبلا اشاره کردم کتابخونه های سطح بالایی مثل hal که برای stm32 است با استفاده از قابلیت زبان پیاده سازی شدند و اگر شما از gcc استفاده کنید نتایج بهتری خواهید گرفت در مقایسه با keil و برای همین بود که در تست ها از هیچ کتابخانه ای استفاده نکردیم !

گام های بیشتر

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

جمع بندی نهایی

قبل از این که به جمع بندی نهایی برسیم – بگذارید نتایج تست‌ها رو کنار هم داشته باشیم همونطور که قبلا هم اشاره کردیم عدد بزرگتر در نمودار یعنی نتیجه بهتر – کیل تنها در مورد محاسبه crc و البته محاسبات ممیز شناور بهتر از gcc عمل کرده و در مابقی موارد gcc عملکرد بمراتب بهتری داشته است. در واقع اگر بخواهیم به برایند تست ها نگاه کنیم در می‌یابیم که gcc انتخاب عاقلانه‌تری است! ولی آیا این بدین معنا است که کیل کامپایلر خوبی نیست؟ قطعا خیر! به شخصه توصیه می‌کنم از keil استفاده نکنید نه از این منظر که کامپایلر خوبی نیست بلکه از منظر اخلاقی صحیح نیست! درسته کرک کردن نرم افزارهای پولی در ایران غیرقانونی نیست حتی اگر فرض کنیم که به علت عدم خدمات این شرکتها، کرک اون هم اخلاقی باشه ولی مشکلات عدیده ای که حتی میتونه این کرک ایجاد کنه یکی از مواردی هست که بنظرم باید درموردش بیشتر فکر کرد و میتونه در تصمیم گیری شما تاثیر گذار باشه فکر می‌کنم اگر به این مقایسه این گونه نگاه کنید که ابزار مورد استفاده شما در کجا ضعیف و در چه مواردی قوی است بتوانید بهترین خروجی را از آن دریافت کنید.

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

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

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

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

53 دیدگاه در “مقایسه تخصصی کامپایلر کیل و GCC

  1. احسان گفت:

    سلام خسته نباشید
    بنده سعی دارم esp8266 رو با زبان سی بنویسم ک اینکارو تونستم با اوبنتو انجام بدم خب چون لینوکسه ابزارای لینوکسی خیلی راحت تر ست کردنش انجام میشه ولی وقتی خواستم این کار رو با ویندوز انجام بدم متاسفانه به مشکل خوردم باید کامپایلر xtensa ک فکر کنم از gcc استفاده میکنه رو روی ویندوز با ابزار make ست کنم ولی هر وقت میخوام ستش کنم ارور میده پیخواستم ببینم شما هم به این مشکل برخوردید تا حالا ؟؟

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

      سلام دوست عزیز
      خوب فکر میکنم باینتری xtensa برای ویندوز موجود باشه و نیاز به کامپایل اون نخواهید داشت تنها کافیه که مسیر اونو توی path سیستم اضافه کنید. توی لینک زیر مسیری رو که باید طی کنید گفته شده
      https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/windows-setup-scratch.html
      و تولچین هم میتونید از لینک زیر دانلود کنید
      https://docs.espressif.com/projects/esp8266-rtos-sdk/en/latest/get-started/windows-setup.html

  2. با سلام و خسته نباشی خدمت جناب زئوس
    چند تا سوال داشتم که مدت هاست در ذهنم می چرخد و جوابی برایشان پیدا نمی کنم و باعث سردرگمی بنده شده بنا بر راه حل همیشگی شما را به عنوان مرجع و نور امید خود یافتم و دوباره به شما رجوع کردم.
    اول اینکه برای بنده که سال آخر هنرستان رشته الکترونیک هستم و از طرفی علاقه زیاد به نحوه کار و ماهیت خط به خط برنامه و عمل داخل پردازنده می باشم. (خوب این تا به حال زمینه خوبی بوده) یه مدتی هست که بالاخره از codevision به avrgcc روی آورده ام و سعی می کنم پایه زبان سی خود را بسیار قوی کنم. خوب این فقط یک شرح حال بود که در ادامه یه نسخه خوب برام بپیچید (:
    1-به نظر شما چرا و چگونه avr محبوب ترین میکرو در بین عام شده آیا فقط به دلیل وجود داشتن dip آن با قابلیت های مناسب است؟ واقعا از کی avr عمومیت یافت؟ و سوال حیاتی اینکه تا کی و بسته به چه عواملی خواهد ماند؟
    2-مسئله اصلی زمانی ایجاد شد که داشتم با زبان داغونم(انگلیسی) داکیومنت 400 صفحه avr-libc رو میخونم و واقعا داشتم کم می آوردم بعد به این فکر افتادم که انشاالله زمانی که arm رو شروع کنم مرجع و منبع چی باشه وقتی سرچ توی گوگل زدم و به سایت خوده arm رسیدم و داکیومنت های 1200 صفحه و 500 صفحه و….. دیدم سرم سود کشید و به این فکر افتادم واقعا شما همه این ها رو خوندید؟!!!!
    3- به هر حال مشکل اصلی اینکه من زبانم ضعیفه و از زمانی که پایه هفتم بودم می خواستم برم نرفتم شد امروز دیگه هم یه جوری که با 18 سال سن برم کنار بچه های 10 ساله بشینم …خودم هی سعی میکنم زبانم رو بهتر کنم ولی نمی دونم از کجا و چه طوری ..
    لطفا یه راهنمایی جامع به خصوص برای این مسئله زبان بکنید.
    با تشکر از شما

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

      سلام دوست عزیز
      خوشحالم که داری از ابزار های رایگان دنیای آزاد استفاده میکنی
      در مورد اول – خوب باید ببینیم avr کی اومد و توی چه شرایطی معرفی شد ؟ تا قبل از avr ملت یا داشتن از 8051 استفاده می کردند یا pic ! که خوب هر دو از یک معماری استفاده می کردند معماری که زیاد برای کامپایلر خوشایند نبود و نیست همچنان برای پروگرام کردن مجبور بودی آیسی رو از روی برد برداری بذاری رو پروگرامر (حالا آره برای pic میشد روی برد با تمهیداتی این کار رو کرد) خوب فرایند توسعه رو کند می کرد. سرعت محدود حافظه های کم داخلی – وقتی avr اومد اولین چیزی که به چشم می اومد معماری و سرعتش بود این که میشد رو برد پروگرام کرد – حتی دیباگ کرد قیمت پایین (مثل الان st) همخوانی خوب با کامپایلر همه و همه باعث شد که واقعا تو اون دوره انقلابی اتفاق بیفته !‌
      مورد دوم – همه ی همه رو که نه ولی هر چیزی که لازم بوده و یا لازم شده رو مطالعه کردم – باید در نظر داشته باشید که الگو یکی است و شاید نیاز نباشه همه رو خط به خط مطالعه کنی. ولی مطالعه خیلی خوبه و کار درستی رو داری انجام میدی
      مورد سوم – زبان واقعا مساله ای هست که باید توی دنیای امروز خوب بلدش بود- خود اموزی زبان علاقه و پشتکار خیلی زیادی میخواد شاید بهتر باشه که از کلاس های زبان شروع کنید ! فکر کن روزی که با ۳۰ سال سن بخوای کتاب بچه های ده ساله رو بخونی پس همیشه شرایط بد تر وجود داره به این فکر کن هرچه دیرتر اقدام کنی وضع بد تره.

  3. رایان گفت:

    سلام. قبلا از اینکه سوال بی ریط مطرح می کنم پوزش میخوام.
    اول اینکه بفرمایید محیط لینوکس رو به افرادی که جدیدآ قصد ورود به دنیای کدنویسی و پروگرامینگ دارند، میشه پیشنهاد داد؟
    از این جهت میپرسم که همین الان دیده میشه دوستانی که با کدویژن و یا کامپایلر دیگه ای سالها کار کردند، وقتی به اسباب کشی فکر می کنند بدن درد می گیرند! اگه اینطوره بندگان خدایی که تازه قصد ورود دارند رو به درستی خط بدیم تا در دراز مدت از اینجور مشکل ها نداشته باشن! چه در قسمت API ها مثل Eclipse ، Cube و یا AtmelStudio و چه در سطح بالاتری مثل OS که ویندوز باشه یا لینوکس یا هردو.
    از طرفی وقتی میخوان برد بزنن یا مثلا پروگرامرشون رو مثل همین ST-Link که معرفی کردید بسازند، به آلتیوم و ویندوز نیازمند میشن! خب یعنی ویندوز در کنار لینوکس بایستی رو سیستمشون باشه. اگر جای یک مبتدی باشیم این دو تا سنگ رو چه جوری از سر راه برداریم؟ این مطالبی که عرض کردم سوالاتی بوده که از من پرسیده شده بودند و من هم به فراخور توانایی که در پرسش کننده میدیدم پاسخ می دادم. ولی واقعا صرف نظر از توانایی افراد روش منطقی و اصولی برای شروع در این زمانه چیه؟
    دوم اینکه وقتی این سایت رو به همین دسته تازه کار معرفی کردم تا برای شروع با AVR از راهنمایی های درج شده در مقالات استفاده کنند، بیشترشون گفتند مفید نبوده!! می پرسید چرا؟ میگن تعدادی آموزش بازنویسی شده از ویدیوهای مهندس کی نژاد تو قسمت آموزش AVR داره که با کدویژن طرح شده! ولی تو یک جایی دیگه میگن کدویژن اصولی نیست بیاید با Eclipse و . . . شروع کنید.! خب با چی شروع کنیم.؟ اینجا یه چشمک زن هم با Eclipse و Sisoog-Link واسه یه دونه Atmega8 عملی اجرا نشده!
    من فقط سعی کردم منعکس کننده باشم و خدای ناکرده قصد جسارت هم ندارم. و سوادی هم ندارم که مدعی آن باشم و اطمینان دارم دوستان باسوادتری، هم در مسند سایت , و هم بازیدکننده وجود دارند.علی ای حال با بررسی که خودم برای صحت این بازخوردها داشتم، این دو نکته ای که عرض می کنم، به نظرم مهم رسید:
    1- افرادی که در حال کار در صنعت یا پروژه های دانشجویی با ARM بودند، از مطالب سایت بسیار استقبال می کردند.
    2- قسمت AVR مخصوصآ با نگاه آموزش از صفر و بروز، فقیر و پراکنده دیده میشه.
    3-احتمال میدم قسمت جستجوی سایت دقیق نباشه.
    با توجه به پاسخ هایی که محبت می کنید، ممکنه سوالاتی رو مطرح کنم. از زحمات بی مزد و منت تان بسیار متشکرم. و قطعآ اینگونه نقدها ذره ای از ارزش شما نخواهد کاست.

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

      سلام و درود
      بسیار خوشحالم از کامنت شما ، مدتی است به همین مساله ای که اشاره کردید فکر میکنم اموزشهایی داریم که پراکنده هستند و هیچ یک از آموزش ها تا حالا مسیری را ایجاد نکرده اند ! البته شاید این سیاست کلی ما بوده که سیسوگ را یک وبسایت برای حرفه ای ها ببنیم افرادی که مدتی است در بازار الکترونیک مشغول به کار هستند و نیاز است بروزرسانی داشته باشند و مسائل مهمی را بدانند ! اما جدیدا روندی را پیش گرفته ایم که آموزش هایی را برای افراد تازه کار منشتر میکنیم
      دقیقا نقد شما به جاست و باید مسیر سازی کنیم – مسیر هایی که افراد با دنبال کردن مسیر به یک هدف کلی تر نزدیک شوند.
      ۲. آموزش های avr به دلیل مشغله و مساله ای که در آن داشتیم نیمه کاره رها شده اند و انشالله در فرایند مسیر سازی سعی خواهیم کرد که کامل کنیم این مساله را
      ۳. جستجوی سایت ایجکس هست و اگر سرعت اینترنت خوب نیاشه به مشکل میخوره البته سعی خواهیم کرد پایداری سایت را بالاببریم تا مساله کمتری پیش بیاید.
      + خوشحال خواهیم شد کامنت های این چنینی بگیریم – ممنون از شما

  4. علی رضا گفت:

    دیدگاه یکی دوستان فرنگی در مورد کامپایلر های ARM
    – IAR is very easy to use – generates good code and has a fast and reliable debugger.
    Instruction level debugger useful for testing configurations and start-up code. If you can afford it it is a safe bet. For small projects, the 32k limited kick start version is useful.

    – Keil is also easy to use – generates good code and has a fast and reliable debugger. Instruction level debugger useful for testing configurations and start-up code. Personally I find its editor and project manager a little less capable than IAR. For existing Keil users, Keil will probably be the preference. Limited version is available but less useful than the IAR Kick start since it throws in extra code to limit use. Note that Keil has a Freescale only version which costs about $600 but is otherwise full functional; this is however a 1 year term license so expires after this period.

    – CW10.1 – Very interesting 128k limited version which is adequate for even quite large projects and is often the choice for low budget projects where Keil and IAR are too expensive. It is Eclipse base so people either love it or hate it – it is rather slow (due to Eclipse and Java script) and a bit quirky (again due to the Eclipse based operation and ‘mentality’) but useable with a bit of determination – but usually not as simple as the classical approach that IAR and Keil take.

    – GCC CodeSourcery – GCC produces very good code for ARM (only a few % larger code size than the ‘big-boys’). CodeSourcery offers a free GCC tool chains and also their own Eclipse based IDE. This I haven’t used but expect it to be similar to CW10.1 without the Freescale plug-ins but with CodeSourcery’s own.

    – GCC Standalone – for lowest budgets, building from GCC make file works well

    – Rowley Crossworks for ARM – their Beta version contains Kinetis support which works very well. It is GCC based with their own optimised libraries and bridges the gap between the ‘top-end’ IAR and Keil and the GCC world with their own high-performance IDE which gives ease of use and speed of operation as well as wide debugger support. Good licensing plans from $150 for a personal license and good support when needed.

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

      بسیار عالی 🙂
      ای کاش لینک مطلب رو هم می گذاشتید

  5. Melsom گفت:

    بسیار عالی

  6. masoud گفت:

    مولفه های مثل
    حجم کد خروجی
    حجم حافظه اشغال شده رم
    و تعداد ریجسترهای عمومی استفاده که معمولا توی اینجور مواقع فایلهای گزارشش را شیر و ضیمه می کنند
    البته دست شما هم درد نکنه من که عرضه انجامش ندارم

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

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

  7. Panda ! جواد گفت:

    سلام
    به نظرتون مولفه های دیگه به جز فرکانس برای بررسی نبود؟

    امکانش هست stm32cubeide رو با gcc مقایسه کنین؟

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

      مثلا چی ؟ شما پیشنهاد بدید ؟
      stm32cubeide دقیقا از gcc استفاده میکنه 🙂

  8. M.r.pourmalaekeh محمدرضا گفت:

    سلام
    ببخشید میخواستم بپرسم که برای استفاده از کامپایلر gcc برای میکرو های شرکت st و میکروهای cortex m از چه نرم‌افزاری باید استفاده کنیم؟

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

      سلام دوست عزیز
      برای این کار راه های زیادی وجود داره از ترکیب کامپایلر gcc با انواع ادیتورهای حرفه ای موجود مثل eclipse , vscode, codeblock و ….
      اما راهی که به شما پیشنهاد میکنم استفاده از ابزار جدید خود شرکت st است یعنی cubeide که در واقع همون ترکیب eclipse و gcc و cubemx است و برای شروع دغدغه های فنی رو برای شروع کم میکنه
      قبلا در موردش مطلب نوشتیم :
      سورپرایز شرکت ST – نرم‌افزار STM32CubeIDE
      از اونجایی که شرکت اس تی ایران رو تحریم کرده ما این نرم افزار رو برای دانلود هم قرار دادیم که از لینک زیر میتونید دریافتش کنید
      دانلود نرم افزار STM32CubeIDE

    2. Melsom گفت:

      بسیار عالی

  9. علیرضا گفت:

    سپاسگذارم برای مطالب مفیدتون .فک کنم کامپایلر V6 در کیل همون gcc . ممنوع میشم زئوس Zeus جان بررسی کنید.
    طبق لینک زیر گفتم.
    http://www.keil.com/support/man/docs/armclang_intro/armclang_intro_chr1372941335569.htm

    1. علیرضا گفت:

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

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

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

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

      خواهش میکنم
      ببینید v6 همون gcc نیست ! در واقع تو توضیحات کیل اومده که این کامپایلر بیشتر همخوانی رو داره با gcc که در واقع قادر باشید کدهای نوشته شده برای gcc رو با کیل هم کامپایل کنید و البته در انتها اشاره کرده که این نسخه همخوانی صد درصدی نداره

      1. علی رضا گفت:

        به نظر من رفتار GCC رو داره وتست کردم حس میکنم سرعتم رفته بالا یه تحقیق و بررسی میتونه جواب های خوبی داشته باشه

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

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

        2. علی رضا گفت:

          Option-target-code generation – arm compiler

  10. رضا گفت:

    بسیار تست عالی بود، مرسی بابت زحمتی که کشیدین

    چقدر عالی میشد اگر کامپایلر iar رو هم تست کنین ، مشتاقانه منتظرم بگین بزودی اینکارو میکنین 🙂

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

      اتفاقا میخواستم این کار رو انجام بدم که به دلیل کمبود وقت فرصت شد چرا که نسخه iar رو هم نداشتم
      ولی یادمه قبلا برای نسخه avr این تست رو انجام داده بودم تا ولی اصلا یادم نیست چطور تست کرده بودم و نتیجه کدام شده بود
      اگر فرصت شد این تست رو هم انجام میدم

      1. رضا گفت:

        چون من زیاد شنیدم که IAR از KEIL خیلی بهتره ( نمیدونم چقدر واقعیه)
        حالا با gcc مقایسه بشه جذاب میشه
        بازم ممنون

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

          iar واقعا جزو کامپایلرهای خوب هستش
          بعیدم نیست از gcc بهتر باشه

  11. مهدی عبدالهی مهدی گفت:

    سلام برادر کیل که اصلا کرک نمیشه لایسنس میشه پس در نتیجه نباید مشکلی داشته باشه
    راستی یک سوال کیوب ای دی ای هم در اصل با goo کار میکنه دیگه درسته؟

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

      بله درسته کیل کرک نمیشه ولی معلوم هم نیست تا کی این رواله
      در ضمن آیا تو قضیه فرقی میکنه وقتی کرک میکنید یا لایسنس تقلبی میدید !
      من گفتم به لحاظ اخلاقی مشکل داره
      خیلی دیگه از کامپایلر ها هم کرک میکنن

  12. دهقان گفت:

    به نام آغاز هر آغاز و پایان هر پایان
    سلام به همگی
    خدا قوت نظر شخصیم این است که برای انجام همچین پروژهایی نیازمند تخصص بالا در نرم افزار و سخت افزار در
    بعد حرفه ای در عمل و تجربه و کار گروهی نیاز دارد که از همه مهمتر صبر و حوصله و وقت است .
    یک پیشنهاد:
    در صورت امکان نرم افزارهای {اتمل استودیو=>کد ویژن=> کیل=>آردینو=>جی جی سی سی و… .} را در دو کوتاه تا ماراتون اجرا کنید . برنامه یک برنامه کامل و جامعی باشد. ولی با وصل یک کلید به هر کدام نتایج عملکرد از سطح پایین تا سطح پیشرفته بصورت گرافیکی نشان داده شود.
    موفق باشید

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

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

  13. مجتبی گفت:

    من کلی پروژه با کیل دارم، فرایند انتقال به GCC زمان بره؟ موضوع اخلاقیش کمی ذهنمو مشغول کرده؟

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

      اگر کد رو اسمبلی ننوشته باشید – تنها به اندازه چند تا کپی پیست زمان خواهد برد نه بیشتر
      و البته از کتابخانه های کلوز سورس کیل مثل rtx استفاده نکرده باشید

      1. مجتبی گفت:

        ممنون از شما

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

  15. محمدرضا عابدینی محمدرضاعابدینی گفت:

    دوبرنامه یکسان برای دوکامپایلر مختلف کیل و gcc نوشتم به این صورت که حداکثر فرکانسی که برای تغییر وضعیت پایه ها بدست میاد 18 مگاهرتز هسش (برگرفته شده از مقاله stm32تاکجا میتواند پیش برود سیسوگ)
    نکته جالب اینجا بود که فرکانس پایه هنگامی که با کیل برنامه رو اجرا کردم نوسان داشت بین ده ، چهارده و هجده مگاهرتز .چرا؟🤷‍♂️
    ولی بنظرم تو سری دوم حتما سایرپریفرال هارو هم اضافه کنیم تست بگیریم بهتر میشه کامپایلر رو بررسی کرد …همچنین بهینه سازی فعال بشه ببینیم نتایج تغییر میکنه یانه ..ولی خب درمورد نتیجه الگوریتم عجیب بود برام

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

      خوب این نوسان داشتن بخاطر پایپ لاین است و احتمالا بخاطر نحوه مدیریت پرش های شرطی در سطح اسمبلی 🙂
      حالا اگه گفتید چرا توی مقاله stm تا کجا میتوانید پیش برود خروجی عدد خیلی بالاتری بوده نسبت به این مقاله ؟
      سری بعدی – احتمالا کتابخانه های مختلف را بررسی خواهم کردم 🙂

  16. محمد صادق جعفری محمد صادق گفت:

    بسیار عالی ممنون خسته نباشید

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

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

  17. حسین گفت:

    سلام.

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

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

      ممنونم دوست عزیز
      بله تفاوت های زیادی وجود داره بین عملکرد این دو کامپایلر
      توصیه شخصی خودم استفاده از gcc است :))
      و این که ترجیه دادید از نرم افزار آزاد استفاده کنید تا نرم افزارهای قفل شکسته واقعا ستودنی است

    2. محمد گفت:

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

      1. حسین گفت:

        سلام .
        نرم افزاری که استفاده کردم true studio هست . که از سایت شرکت st دانلود کردم . IDE اون در واقع همون اکلیپس هست .که به کمپایلر gcc متصل شده فقط تنظیماتش میمونه که توی اینترنت ازجمله همین سایت سیسوگ مطلب در مورد اکلیپس منتشر شده . خودش هم داکیومنتهای خیلی خوب و مفصلی برای استفاده داره که به لطف مترجم گوگل میشه استفاده کرد . ازتوی همون محیط هم میشه دیباگ و پروگرام کرد .
        خوبیش اینه که چون ادیتور اکلیپس هست هم امکاناتش زیاده ، هم میشه برای کمپایلر های دیگه استفاده کرد . مثلا یک آموزش برای کمپایلر SDCC توی همین سایت بود که برای برنامه نویسی stm8 در محیط اکلیپس استفاده میشه . من همون آموزش را برای avr توی true studio پیاده کردم جواب گرفتم .
        فقط من از cube MX برای پیکر بندی استفاده میکنم . یک محیط دیگه هم هست به اسم cube IDE که من تا حالا باهاش کار نکردم .
        و در مورد gcc محیط true studio خودش یک سری داکیومنت داره که در مورد gcc توضح داده .
        اگر هم مشکل بود خود این سایت مشوق gcc هست …. سوالاتت رو بپرسی راهنماییت میکنن .

  18. سهیل گفت:

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

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

      😐 – سخته درک این مطلب عنوان کردید :/
      الان شرکت ماکروسافت دشمن شماست یا شرکت کیل ؟

      1. سهیل گفت:

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

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

          من کاری به آمریکا و مسائل مربوطه ندارم
          بحث من بحث اخلاقی است – آیا همه نرم افزارهایی که استفاده میکنید آمریکایی است ؟
          آیا زندگی مردم رو آمریکا سخت کرده ؟
          واقعا نمیدونم چی بگم! من در این زمینه نه بحثی دارم و دانشی که بحث کنم

    2. احسان گفت:

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

      1. سهیل گفت:

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

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

          دوس عزیز اون شرکت خیلی شفاف بیان کرده که تابع قوانین کشورش هست برای همین نمیتونه خدمات بده شما که این مهم رو میدونی چرا باید بخری اون محصول رو ؟
          مثل این میمونه که بقال محل بگه جنس بهت نمیفروشم (بنا به هر دلیل منطقی یا غیر منطقی) بگی غلط کردی بری تو مغازه اش دزدی کنی 😐
          تا اونجا که میدونم ماکروسافت نگفته به شما خدمات نمیدم – آیا ویندوز رو خریداری کردید ؟ یا کدویژن همینطور یا حتی دانلود منیجر که نمایندگی داخلی داره لایسنسش ۵۰ تومنه چی ؟
          مشکل جای دیگه است.