اطلاعیه

Collapse
No announcement yet.

معرفی بهترین کامپایلر برای c

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    معرفی بهترین کامپایلر برای c

    سلام
    همیشه یه بحث بوده اونم معرفی بهترین زبان برای برنامه نویسی
    ولی تا الان تاپیکی زده نشده که در مورد نرم افزارهای مختلفی که برای یک زبان ساخته شدند توضیحی داده بشه .
    من به شخصه به غیر از codevision و یه نمه winavr و iar با چیز دیگه ای کار نکردم ، ولی کامپایلرهای زیاد دیگه ای هم هستند که برای خیلی ها ناشناخته موندند !
    خواهشاً دوستانی که حرفه ای هستند و متخصص تو زمینه C لطفاً کامپایراها رو معرفی و نقاط قوت و ضعف اونها رو هم بگند.
    امیدوارم این تاپیک خیلی هارو مثل خودم از سردرگمی دربیاره !
    ممنون از همگی دوستان
    1,187
    AVR Studio
    0%
    374
    CodeVisionAVR
    0%
    305
    CAVR
    0%
    139
    Crosswords
    0%
    129
    GCC
    0%
    128
    IAR
    0%
    31
    ICC
    0%
    25
    KamAVR
    0%
    51
    WinAVR
    0%
    5

    #2
    پاسخ : معرفی بهترین کامپایلر برای c

    واقعا همچین تاپیکی لازم بود. منم فقط با کد ویژن و win avr کار میکنم.ولی IAR وmicro C هم کامپایلر های خوبی هستند.به نظر من یه نظر سنجی هم اضافه کنید تا مشخص بشه کدوم از این 4 نرم افزار پرکاربرد ترند.
    فکر میکنید باید به غیر از سرعت اجرا و حجم کد ملاک دیگه ای رو هم مد نظر بگیریم یا نه؟
    [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

    دیدگاه


      #3
      پاسخ : معرفی بهترین کامپایلر برای c

      من تقریباً همین چند نوع رو میشناختم !
      البته امکان تغییر نظر رو هم فعال کردم چون امکان داره با داغ شدن بحث نظر بعضی ها عوض بشه !
      منتظر شما دوستان هستیم

      دیدگاه


        #4
        پاسخ : معرفی بهترین کامپایلر برای c

        من خودم با کامپایلر های متفاوتی کار کرده و میکنم. روی avr و 68000 و 8086 و غیره. ولی قاعدتا یک کامپایلر خوب الزاما کامپایلری نیست که امکانات عجغ وجغ داشته باشه. بلکه بایستی سورس را در نهایت امنیت به کد نهایی تبدیل کنه و تمام مشخصات زبانی رو پوشش بده. به خاطر همین یک کامپایلری مثل codevision با اون همه محدودیت ها و باگ هاش چیز خوبی نیست. اما هر چیزی به جای خود. من از wizard اش استفاده میکنم ولی سورس نهایی رو دست winavr یا بهتر بگم gcc میدم. نتیجه معرکه است.
        ایضا شما مجبور نیستین با "بهترین ها" کار کنین تا کار "عالی" تحویل بدین. یک "خوب" هم کارتون رو راه میندازه.

        دیدگاه


          #5
          پاسخ : معرفی بهترین کامپایلر برای c

          جسارتا گزینهآ‌ای در نظرسنجی ایراد داره.
          GCC یا GNU Compiler Collection کامپایلری است که برای تعداد زیادی معماری پورت شده و همچنین از چندین زبان برنامه نویسی مختلف پشتیبانی میآ‌کند.
          پورت مربوط به معماری AVR آن ، avr-gcc نام دارد.

          البته avr-gcc به خودی خود کافی نیست و ابزارهای دیگر مثل اسمبلر (avr-as) و لینکر (avr-ld) و ... نیاز است که به مجموعهٔ اینها GNU-Toolchain گفته میشود.

          Winavr هم همان GNU-Toolchain برای معماری AVR است که برای ویندوز پورت شده است تا کاربران ویندوز هم از مزایای آن بیآ‌بهره نمانند.

          پس به نظر میاد اگر گزینهٔ GCC حذف شود و گزینهآ‌ای مانند avr-gcc (Winavr)j اضافه شود بهتر است.
          چگونه هوشمندانه بپرسیم

          دیدگاه


            #6
            پاسخ : معرفی بهترین کامپایلر برای c

            گزینه ها مشکل نداره؟!!؟!
            فکر میکنم avr studio خودش کامپایلر c نیست. با پلاگ این avrgcc میتونه c کامپایل کنه.
            اصلا گزینه ها یه طوریه!! winavr هم با avrgcc کامپایل میکنه دیگه!
            https://www.linkedin.com/in/mohammadhosseini69

            http://zakhar.blog.ir

            دیدگاه


              #7
              پاسخ : معرفی بهترین کامپایلر برای c

              یه تاپیک قدیمی بود که یکی لیست کرده بود .
              در ضمن ، AVRSTUDIO هم بوسیله avr-gcc می شه C نوشت و بحث اینجا هم در مورد نرم افزارهاست !
              خود نرم افزار FLOWCODE هم با نرم افزار WINAVR کار می کنه ولی برای خودش سیستم خاص خودش رو داره ، که می بینم اونو هم جا انداختم !
              کسی اگر طبقه بندی خاصی مد نظرشه بگه تا تغییرات رو انجام بدم

              دیدگاه


                #8
                پاسخ : معرفی بهترین کامپایلر برای c

                سلام دوستان.
                بنده با اکثر کامپایلر های C مربوط به AVR کار کردم.Codevision ,WinAVR ,IAR, ICCAVR و MikroC for AVR .
                شاید خیلی از دوستان از گفتن چیزی که بهش یرخورم خوششون نیاد.
                اولین کامپایلر C که با اون کار کردم Codevision بود. هرچند که وضعیت این کامپایلر از نظر کد های hex تولید شده مخصوصاً زمانی که با رشته ها و توابع مربوط به اون سر و کار دارید زیاد جالب نیست ولی کدهای تولید شده اکثر اوقات چه در خود میکروکنترلر و چه در شبیه سازهایی مانند Proteus به خوبی کار میکنند.
                بعد از تمجیدها و ستایش هایی که در باب GCC و WinAVR در سایتها و فروم ها شنیدم و خوندم تصمیم گرفتم که با این کامپایلر به اصطلاح قدرتمند و سورس باز که کتابخانه های زیادی هم به صورت رایگان برای اون وجود داره کار کنم.البته این کامپایلر رو در کنار AVRStudio و به صورت Plugin استفاده کردم.
                پس از مدت زیادی سر وکله زدن و یادگیری در سطح متوسط نتیجه ای که بدست اومد این بود:
                بسیار افتضاح است.
                این کامپایلر هم از نظر کد تولید شده و هم ازنظر کارایی کدها در میکرو و سیمولاتور بسیار بد عمل کرد.به طوری که چنانچه Optimization چه برای کد و چه برای سرعت اگر در بالاترین سطح باشد کدها به هیچ وجه در میکرو و سیمولاتور کار نخواهد کرد. حتی زمانی که سطح Optimization پایین تر قرار گیرد با وجود افزایش کد خروجی باز برنامه بر روی میکرو کنترلر به درستی کار نخواهد کرد و تنها زمانی که Optimization در پایین ترین سطح قرار گیرد کدها در شبیه ساز درست عمل نموده و شما از صحت برنامه نوشته شده خود اطمینان حاصل میکنید. ولی با این حال کد خروجی چنان افزایش یافته که نمیتوانید آن را در میکرو بریزید.
                این موردی بود که مدت زیادی با اون درگیر بودم و با تعاریفی که از این کامپایلر شنیده بودم کاملاً متعجب شدم و البته ناراحت از اینکه معروفترین کامپایلر منبع باز AVR اینقدر بد عمل میکند. فکر میکنم دوستانی که در مورد این کامپایلر تعصب دارند اصلاً میکرو پروگرم نکرده بودند یا نمیکنند و فقط برنامه ها رو در شبیه سازی مثلProteus تست میکنند. چون اگه به کد خروجی این کامپایلر نگاه می انداختند دیگه اسمش رو هم نمی آوردند.
                لازم به ذکر است که خود بنده در ابتدا به نسخه WinAVR که باهاش کار میکردم مشکوک شدم. نسخه ای که در ابتدا با اون کار میکردم WinAVR-20100110 بود که آخرین ورژن این برنامه است. برای همین نسخه های قبلی رو هم تست کردم که نتیجه بدتر شد.

                بعد از این ضربه روحی که از WinAVR خوردم تصمیم گرفتم برم سراغ کامپایلر های شرکت Mikroelektronika که در ابتدا فقط کارش PIC بود. نسخه اولی که تست کردم MikroC Pro for AVR 1.25 بود. این کامپایلر فقط شیک بود و با اینکه توابع زیادی رو مثل تومار لیست کرده بود ولی اکثر اونها کمبود ها و اشکالاتی دارند. نمونه اش رو در اولین تابع یعنی ADC میشد دید که در اون شما نمیتوانید مرجع ولتاژ داخلی 2.56v داخلی رو انتخاب کنید.
                این اشکالات هنوز هم سر جای خود باقی ان و الان که ورژن MikroC Pro for AVR 4.60 رو تست میکنم هنوز رفع نشده.

                به طور کلی شما در این کامپایلر آزادی عمل بسیار کمی دارید مخصوصاً که سورس این کامپایلر باز نیست. به علاوه با اینکه کدهای خروجی این کامپایلر کار میکردند ولی کدهای تولیدشده نسبت به برنامه مشابه در Codevision حجم بیشتر و نسبت به WinAVR حجم کمتری داشتند. بنابراین این کامپایلر هم منو راضی نکرد.

                ادامه دارد...


                دیدگاه


                  #9
                  پاسخ : معرفی بهترین کامپایلر برای c

                  کامپایلر بعدی که تست کردم ImageCraft C, V 6.26 بود. این کامپایلر با اینکه کمتر طرفدار داره و کرک خوب هم به سختی براش پیدا میشه ولی کارایی متوسط رو به بالا داشت. میشد گفت که خیلی شبیه Codevision است و یک Wizard هم داره که البته به خوبی Codevision نیست. جدید ترین نسخه ای که در حال حاضر وجود داره ورژن 8 است که محیط IDE اون از نرم افزار منبع باز Code::Blocks که تحت مجوز GNU هست گرفته شده.
                  کدهای خروجی این کامپایلر هم مثل Codevision در حد متوسط بودن و با اینکه درست کار میکردند ولی حجمشون زیاد راضی کننده نبود.

                  آخرین کامپایلری که با اون کار کردم و منو شیفته خودش کرد IAR for AVR بود. من از نسخه 5.5 این نرم افزار استفاده میکنم. این نرم افزار هر چند تقریباً هیچ تابع اضافی و کمکی برای تجهیزات جانبی میکروکنترلر در خودش نداره و شما حتی برای delay و LCD باید خودتون تابع بنویسید و همچنین از نظر رابط گرافیکی ضعیفه ولی از نظر کارایی و راحتی برنامه نویسی و انطباق با استاندارد زبان C و مخصوصاً حجم کد خروجی ، اختلاف بسیار زیادی نسبت به کامپایلر های دیگه ای که تست کردم نشون داد.
                  به طوری که حجم کد hex خروجی نسبت به Codevision و ImageCraft حدود 20% و نسبت به MikroC حدود 30% و نسبت به WinAVR ، حدود 50% درصد کمتر بود. حالا میشد فهمید که چرا Atmel تو دیتاشیت های میکروهای AVR تمام مثال هایی که به زبان C زده همش مربوط به کامپایلر IAR میشه.

                  نتیجه نهایی این شد که بنده مدتیه کامپایلر های دیگه رو گذاشتم کنار و با IAR کار میکنم.

                  در پایان اینو هم بگم که برنامه ای که من در همه کامپایلرها تست کردم یک برنامه ساده مربوط به خوندن یک مقدار آنالوگ توسط مبدل A2D و نمایش اون بر روی LCD بود که برای IAR تابع LCD رو مجبور شدم خودم ایجاد کنم.

                  و مطلب دیگه اینکه با اینکه هممون میدونیم قاعدتاً کامپایلرهای C باید کدهای کمتری نسبت به زبان هایی مثل Basic تولید کنند ولی همین برنامه ای که این کامپایلرهای C کدهای زیادی براش تولید کردند در محیط Bascom هم تست شد که نتیجه شگفت آور بود. کد تولید شده نسبت به Codevision و ImageCraft حدود 50% کاهش یافت و حتی نسبت به IAR هم حدود 20% کمتر بود و البته هم در میکرو و هم در Proteus کار میکرد ، که این مورد نشون دهنده قدرت این مفسر Basic است.

                  دیدگاه


                    #10
                    پاسخ : معرفی بهترین کامپایلر برای c

                    سلام
                    شما با تست یک برنامه به این نتیجه ها رسیدید که گفتید؟
                    میشه برنامه ای که تست کردید رو این جا بگذارید؟
                    { خلاف قوانین - پاک شد }

                    دیدگاه


                      #11
                      پاسخ : معرفی بهترین کامپایلر برای c

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

                      دیدگاه


                        #12
                        پاسخ : معرفی بهترین کامپایلر برای c

                        جالبه. چون من حداقل 10 پروژه متفاوت با این نسخه باگ دار WinAVR انجام دادم و هیچ وقت هم کارم رو لنگ نکرده.
                        میبینین که برای هر کامپایلری میشه افرادی رو پیدا کرد که ازش راضی باشند و همینطور افرادی هستن که ازش ناراضی یا حتی متنفر. و این دلیلی برای خوب بودن با بد بودن اون نمیشه.
                        مثلا روی PC کامپایلر های متفاوتی برای C اومد. Turbo-C و MSC و Aztec-C و Lattice-C و Watcom-C. سالهای سال همه میگفتن این Watcom-C یک جونور به تمام معنی هست. از بابت قدرت بهینه سازی کد و غیره. اما تنها کامپایلر هایی که در بازار دوام آوردن یکی Turbo-C بود و یکی هم MSC. اولی با اینکه کامپایلر مزخرفی بود ولی با امکانات راحتش در اون زمان یک ابزار خوب برای برنامه نویسان بود (یه چیزی تو مایه های همین کد ویژن شما) و MSC با اینکه کامپایلر خوبی بود با مجموعه ابزارهایی اومده بود که پوست از کله همه میکند تا بتونی دو خط کد باهاش بنویسی اما کد های خوبی از کار درمیومد (شاید تو مایه های gcc) بعد ها turbo-C بخاطر کم آوردن شرکت بورلند از بازر بیرون رفت و الان فقط بطور عام MSC یا همون چیزی که من و شما میشناسیم VisualStudio باقی موند.
                        از بابت تکنیک های مورد استفاده در بهینه سازی کد Watcom خیلی گردن کلفت بود (اگر میخواستیم مثل قدیمی ها وسواسی باشیم) اما غافل از اینکه چه Watcom و چه MSC مهمترین مسئله در درجه اول جواب دادن کد هست.

                        دیدگاه


                          #13
                          پاسخ : معرفی بهترین کامپایلر برای c

                          با وجود آنکه معمولا در چنین بحث هایی شرکت نمی کنم، اما از آنجا که مطالب اینگونه تاپیک ها می تواند مسیر افراد زیادی را به اشتباه تغییر دهد و ضمن ادای احترام به دوست عزیزی که زحمت کشیده اند و نتیجه تجربیات خود را در اختیار دیگران قرار داده اند، وظیفه خود می بینم مواردی را بیان کنم.
                          اول اینکه استفاده از یک کامپایلر پیشرفته C مستلزم گاهی از نکات زیادی مانند شیوه مدیریت حافظه توسط کامپایلر و تاثیر نحوه تعریف متغیرها و توابع و مسائل متعدد دیگری است و به صرف نوشتن یک برنامه ساده که معلوم نیست اینگونه ملاحظات در آن تا چه حد رعایت شده باشد، نمی توان چنین احکام کلی را صادر کرد. برای انجام یک Task خاص می توان ده ها برنامه مختلف را نوشت که همگی هم در ظاهر عملیات مورد نظر را انجام دهند، اما از نظر حجم کد تولید شده و میزان Load ایجاد شده برای CPU و حافظه مورد مصرف با یکدیگر متفاوت باشند. پس برای قضاوت صحیح باید یک برنامه مشخص و واحد را که بصورت اصولی و با رعایت تمام جوانب لازم نوشته شده باشد در معرض آزمایش قرار داد و سپس بر مبنای نتیجه بدست آمده، ارزیابی صحیح را انجام داد.
                          به عنوان یک مصداق از اینکه چطور نا گاهی از این موارد می تواند منجر به عدم کارکرد نرم افزار شود، دو مثال زیر را در کامپایلر IAR در نظر می گیریم:

                          مثال 1:

                          کد:
                          #include"ioavr.h"
                           unsigned char a[512];
                          void main()
                          { 
                           unsigned int i;
                           for(i=0;i<512;i++) a[i]=0xaa;
                           while(1);
                          }


                          مثال 2:

                          کد:
                          #include"ioavr.h"
                          void main()
                          { 
                           unsigned char a[512];
                           unsigned int i;
                           for(i=0;i<512;i++) a[i]=0xaa;
                           while(1);
                          }


                          اگر این دو مثال بصورت پروژه ای در IAR تشکیل شوند، هر دو بدون خطا کامپایل می شوند. اما در عمل مثال دوم به درستی کار نمی کند و جواب نمی دهد. دلیل جواب ندادن برنامه دوم این است که یک آرایه با 512 عنصر در حافظه SRAM تشکیل شده که در داخل تابع main قرار داده شده و کسی که این برنامه را می نویسد باید از این مسئله اطلاع داشته باشد که متغیرهای تعریف شده در توابع و از جمله تابع main در بخشی از حافظه ذخیره می شوند که در IAR به عنوان CSTACK شناخته می شود. اما در مثال اول که آرایه در بیرون تابع main تعریف شده، محل آرایه در ناحیه متفاوتی است. از آنجایی که مقدار CSTACK دارای پیش فرض 0x20 است، بنابراین اگر متناسب با آرایه تعریف شده به آن مقدار داده نشود، خطایی در کامپایل بوجود نمی آید، اما برنامه هم به درستی عمل نمی کند. اما با مقداردهی صحیح به CSTACK این مشکل حل می شود و برنامه به درستی عمل خواهد کرد.
                          حال آیا به دلیل عدم اطلاع از این مورد و عدم مقدار دهی صحیح به CSTACK می توان اعلام کرد به واسطه این مثال، کامپایلر IAR دارای مشکل است و مثلا بسکام از آن بهتر است؟ منظور از ذکر این دو مثال این بود که باید با احتیاط بیشتری در مورد اینگونه قضاوت های کلی برخورد کرد و ای بسا مواردی که عدم اطلاع از آن می تواند منجر به جواب نگرفتن از یک کامپایلر باشد و اشکال در این موارد متوجه شخص برنامه نویس است.
                          مورد دوم این است قضاوت بر مبنای فایل Hex در مورد حجم کد تولید شده توسط یک کامپایلر کار چندان اصولی نیست و ملاک قضاوت، حجم فایل Binary نهایی و یا میزان Flash اشغال شده است که از روی فایل های List هم قابل استخراج است و ممکن است چند فایل Hex با حجمهای مختلف در نهایت به یک کد مشابه منجر شوند.
                          اوژن: به معنای افکننده و شکست دهنده است
                          دانایی، توانایی است-Knowledge is POWER
                          برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                          وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                          قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                          اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                          ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                          دیدگاه


                            #14
                            پاسخ : معرفی بهترین کامپایلر برای c

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

                            یکی از نکات مهمی که یک کامپایلر باید داشته باشه به نظر من اینترفیس کاریش هست که برنامه نویس وفتشو صرف نوشتن برنامه می کنه نه تولید مثلا تابع lcd
                            و با توجه به حرف های جناب طراح یکی دیگر از مزیت های کامپایلر ،چینش و معماری هستش که داره
                            من برنامه نوشته بودم که 50 % رم یک مگا 8 رو تو استک نگه میداشت ،معمولا کدویژن یک مقدار پیشفرضی از رم رو به استک میده که تو config قابل تنظیم هستش
                            خوب اینجا خود کدوِیژن خطای مبنی بر کم بودن فضای استک میده که باید تنظیم بشه، به نظر من اگر اونطوری که من فهمیدم IAR در مثال بالا باید خطای مبنی افزایش فضای استک نمایش میداد
                            اینکه IAR از خیلی نظرات از هر کامپایلری دیگه ای بهتره حرفی نیست ولی کدوِیژن با این امکانت و اینترفیس کاربری خوبی که داره
                            به نظر من بهترین کامپایلر هستش
                            البته من با Winavr و imagecraft هم کمی کار کردم که باز مزیت های کدویژن رو نداشتند
                            البته یک نکته هم بگم شرکتی مثل نوکیا هم از کدویژن استفاده می کنه
                            هرچه سعی کنیم لایه های نرم افزاری زیاد کرده و از سخت افزار دور کنیم مشکلات(باگ ها) کمتر خواهد شد(امنیت بیشتری خواهید داشت)
                            بهترین جواب دهنده برای سوال شما، خود شما هستید البته بعد تلاش،پشتکار و مطالعه بیشتر
                            میدونی مشکل ما کجاست؟سرمایه و مغز ها رو نمیتونیم یکجا جمع کنیم...

                            تعدادی ماژول GPS GP5MX1513F1 با بالاتریت حساسیت -170db به قیمت خرید بفروش میرسد

                            دیدگاه


                              #15
                              پاسخ : معرفی بهترین کامپایلر برای c

                              سلام،
                              avr-gcc رایگان
                              CodeVisionAVR 175$
                              ImageCraft for AVR 400$
                              IAR Embedded Workbench for AVR 3500$
                              به نظرتون این اختلاف قیمت بالای مورد اخیر نباید توجیه داشته باشه؟ قطعاً اگر بدون دلیل بود تا الان این محصول فروش نرقته بود و IAR ورشکست شده بود. در حالیکه لیست موجود در بخش مشتریان نشون میده بیشتر شرکت های بزرگ دنیا از ابزارهای IAR استفاده می کنند:
                              http://www.iar.se/website1/1.0.1.0/525/1

                              پی نوشت1: قیمتها تقریبی هستند و شاید کمی با قیمت فعلی اختلاف داشته باشند.
                              پی نوشت 2: ابزارهایی مثل FlowCode و MikroC رو مقایسه نکردم چرا که اصلاً به نظر نمیاد برای کاربردهای حرفه ای مناسب باشند.

                              There is nothing so practical as a good theory. — Kurt Lewin, 1951

                              دیدگاه

                              لطفا صبر کنید...
                              X