اطلاعیه

Collapse
No announcement yet.

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

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

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

    اخیرا مشغول نوشتن یک کتابخانه LCD کاراکتری برای XMEGA و در کامپایلر IAR هستم و به همین دلیل به منابع و کتابخانه های موجود برای LCD مراجعه می کنم. از جمله در مطالعه نحوه عملکرد کتابخانه LCD در نرم افزار کدویژن نسخه 2.4.4 به نکته ای برخورد کردم که به عنوان یک مصداق می توان از روی آن قضاوت کرد که آیا این کامپایلر تا چه حد حرفه ای طراحی شده و آیا فرمایش آقای سپاس یار در مورد درجه دوم بودن این کامپایلر را در این مثال به خصوص می توان مشاهده کرد یا خیر.
    اصولا برای ارتباط با LCD کاراکتری می توان دو راهکار خواندن Busy Flag و یا تاخیر زمانی را انتخاب کرد که روش اول در جایی بکار می رود که حداکثر سرعت ارتباط با LCD مورد نظر باشد و به محض آماده شدن آن، بقیه مراحل انجام شود. در کدویژن ارتباط با LCD از نوع اول است و بنابراین انتظار می رود روتین ارتباط آن به گونه ای نوشته شده باشد که بصورت بهینه و با حداقل تاخیر عمل کند. تابع انتظار برای خارج شدن LCD از وضعیت Busy در کدویژن بصورت زیر است:

    کد:
    void _lcd_ready(void)
    {
    #asm
      in  r26,__lcd_direction
      andi r26,0xf         ;set as input
      out  __lcd_direction,r26
      sbi  __lcd_port,__lcd_rd   ;RD=1
      cbi  __lcd_port,__lcd_rs   ;RS=0
    __lcd_busy:
    #endasm
    _lcd_delay();
    #asm
      sbi  __lcd_port,__lcd_enable ;EN=1
    #endasm
    _lcd_delay();
    #asm
      in  r26,__lcd_pin
      cbi  __lcd_port,__lcd_enable ;EN=0
    #endasm
    _lcd_delay();
    #asm
      sbi  __lcd_port,__lcd_enable ;EN=1
    #endasm
    _lcd_delay();
    #asm
      cbi  __lcd_port,__lcd_enable ;EN=0
      sbrc r26,__lcd_busy_flag
      rjmp __lcd_busy
    #endasm
    }


    در این تابع بین تغییرات وضعیت سیگنال های کنترلی از تابع دیگری با نام lcd_delay_ استفاده شده است.

    کد:
    static void _lcd_delay(void)
    {
    #asm
      ldi  r31,15
    __lcd_delay0:
      dec  r31
      brne __lcd_delay0
    #endasm
    }


    توجه به کد اسمبلی موجود در تابع نشان می دهد که اجرای آن 45 سیکل زمان می برد و چند سیکل هم برای فراخوانی آن زمان صرف می شود. نکته قابل تامل آن است که در این شیوه برنامه نویسی بجای تعریف یک تاخیر ثابت که به کلاک سیستم وابسته نباشد، از تاخیر متغیری استفاده شده که هرچه کلاک سیستم کمتر باشد، این تاخیر هم بیشتر می شود و سرعت ارتباط با LCD کندتر می شود. این درحالی است که هر برنامه نویس متوسطی باید بداند که تاخیرهای سیستم باید مستقل از کلاک آن باشد و با تغییر کلاک، کم و زیاد نشود. این شیوه برنامه نویسی نشان دهنده آن است که پشتوانه چندان حرفه ای (حداقل در سطح این مصداق) در نوشتن کدویژن وجود ندارد و حتی همین یک مورد هم که بر حسب اتفاق با آن برخورد شد، اصولی و حرفه ای بودن این کامپایلر را به شدت زیر سوال می برد.
    اوژن: به معنای افکننده و شکست دهنده است
    دانایی، توانایی است-Knowledge is POWER
    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

    دیدگاه


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

      سلام،

      از این مواردی که جناب طراح فرمودن در CVAVR زیاده. این مورد LCD رو من خودم برخود کردم که کیفیت و صحت عملکرد کتابخانه ی LCD وابسته به کلاک میکروست.
      این مورد هم جالبه:
      http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=6 1687&highlight=&sid=b4cf5b90da458fbc9f0be8 2c06c98bca

      در مورد دوستانی که معیار قیمت رو رد میکنن باید بگم که این پست رو لطفاً مطالعه کنید:
      http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=7 8458&highlight=&sid=b4cf5b90da458fbc9f0be8 2c06c98bca

      اینجا طرفدارای پر و پا قرص ابزارهای GNU که به سختی از اون دفاع میکنن و حرفه ای هم هستند فاکتور Price/Performance یا PP رو ملاک قرار میدن:

      Competition factor = Efficiency / Price

      حالا در کشور ما که با تقریب خوبی، Price برای همه ی ابزارها به سمت صفر میل میکنه چطور میشه چنین فاکتوری رو ملاک رقابت قرار داد؟!
      There is nothing so practical as a good theory. — Kurt Lewin, 1951

      دیدگاه


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

        میشه یه توضیح بدید که چه طور باید کاری کرد که به کلاک میکرو بستگی نداشته باشه چون اگر از هر دستوری یا از تایمر یا هر چیزه دیگه ای استفاده کنیم فکر کنم به کلاک میکرو بستگی داره اگر ممکنه یه توضیح بدید ممنون میشم

        دیدگاه


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

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

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

          دیدگاه


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

            نوشته اصلی توسط زوار
            میشه یه توضیح بدید که چه طور باید کاری کرد که به کلاک میکرو بستگی نداشته باشه چون اگر از هر دستوری یا از تایمر یا هر چیزه دیگه ای استفاده کنیم فکر کنم به کلاک میکرو بستگی داره اگر ممکنه یه توضیح بدید ممنون میشم

            این کار توسط خود کامپایلر امکانپذیره. یعنی باید ابتدا فرکانس مورد استفاده رو معرفی کنید و برنامه رو طوری بنویسید که در فرکانسهای کاری مختلف یک تاخیر ثابت ایجاد کنه. این همان روشی که در دستورات تاخیر Codevision یا bascom به کار میره و شما در ابتدای برنامه فرکانس رو به کامپایلر اعلام میکنید

            دیدگاه


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

              نوشته اصلی توسط n340
              خیلی عذر می خوام
              من هنوز یک برنامه نویس خوب نشدم
              پس یه سوال
              حالا اگه به کلاک میکرو بستگی داشته باشه چه اتفاقی می افته
              چون در این تابع delay از یک عدد ثابت بدون در نظر گرفتن فرکانس میکرو استفاده شده تاخیر ایجاد شده با افزایش فرکانس کاهش و با کاهش فرکانس افزایش پیدا میکنه. در مورد LCD حد اقل طول پالسی که پایه EN نیاز داره حدود 500ns است. حالا اگه فرکانس خیلی بالا باشه این تاخیر حد اقل طول پالس رو فراهم نمیکنه ودستورات LCD درست اجرا نمیشن. ولی از اونجایی که اغلب میکروهای AVR با فرکانس زیر 20Mhz کار میکنند ، عملاً مشکلی پیش نخواهد آمد

              دیدگاه


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

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

                دیدگاه


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

                  بنظر میاد این تاپیک بیش از اونی که باید داره از مسیر خودش منحرف میشه. که البته خوب هم داره منحرف میشه. چون توی این چند پست آخری شما به خود کامپایلر کاری ندارین و فقط با آت و آشغالای اطراف کامپایلر کار دارین. مثلا به کد LCD گیر میدین. که ربط چندانی به کامپایلر نداره. فقط جزئی از lib های اونه. یا اینکه عمدتا در رنکینگ ها به کد ویژن رای داده میشه چون ویزارد داره و خیلی کد ها رو ویزارد برای شما تولید میکنه. این برای کسی که مبتدی هست (برای مبتدی ها عرض کردم. نه اینکه بگم همه مبتدی هستین. اشتباه نشه) یا حال نگاه کردن به دیتا شیت رو نداره (مثل خودم) خیلی عالیه. اما از ابتدای بحث تا بحال کسی نیومده بگه "محیطی که این دو کامپایلر توش کار میکنن چطوریه".
                  بذارین اینجوری بگم. در مورد زبانهایی که من کار کردم زبان #C خیلی بهم حال داده. چرا؟ چون خیلی خوش دسته. اما این خوش دست بودن به خاطر محیط Visual Studio هست که code completion داره. و هزار دنگ و فنگ دیگه. اما فراموش نکنیم اینها با اینکه بطور پیش فرض همراه این کامپایلر csc توی بازار اومدن ولی جزئی از زبان #C نیستن.
                  فرض کنین تمام برنامه نویس های دات نت بخوان با notepad کد بنویسن و با csc کامپایل کنن. فکر میکنین چند تاشون به کار با دات نت ادامه بدن. من میگم کمتر از 5 تا 10 درصد. چرا؟ چون اون موقع کار با این ابزار در این محیط مصیبت میشه.

                  برگردیم سر مشکل خودمون.
                  اگه میگین کامپایلر. به کد ویزارد کد ویژن کاری نداشته باشین. به اینکه یک پروگرامر یا یک ترمینال روش هست کاری نداشته باشین. خود کامپایلر رو بچسبین. مشخصات یک کامپایلری مثل کد ویژن عمرا با پای کامپایلری مثل WinAVR یا IAR نمیرسه. چون هدف این کامپایلرها فقط AVR نیست. IAR برای ARM هم کامپایلر تولید کرده و بعید بنظر میرسه که بخواد از ابتدا به ساکن برای هر target یک کامپایلر جدید بنویسه. محدودیت هایی که ممکنه یک target برای یک کامپایلر ایجاد کنه به بقیه ربطی نداره. مثلا نگاه کنین در cv لغاتی مثل sfr و sfrw و bit داریم. که مشخصا به سمت سخت افزار نهایی نشونه رفتن. اما در winavr همچین لغاتی وجود نداره. و تنها با استفاده از ماکروها اینها رو توصیف کردن. و عمل بهینه کردن کد رو به دوش کامپایلر گذاشتن. روشهای کد نویسیی همچون:
                  PORTA.1 = 0 ربطی به زبون C نداره و این روش کد نویسی به زبون C استاندارد اضافه شده تا کد ویژن حالشو ببره. اما بقول آخوند ها این یک بدعته و باعث میشه برنامه نویس با چیزی اخت بشه که C نیست. بلکه یک چیزی شبیه اونه.
                  از طرف دیگه شما کنترل زیادی روی نحوه تولید کد روی کد ویژن ندارین. زمانی که شما در روال وقفه قرار دارین میخوایین عمل وقفه هر چه سریعتر تموم بشه. اما تازه آقا خوشش میاد بیاد کد شما رو با استفاده از توابع فرضی و call کردن اونها بهینه کنه. که البته حجم کد رو ممکنه کم کنه ولی سرعتش رو خیلی پایین میاره.

                  کسی فکر نکنم با توابع isxxx کار کرده باشه.مثل isascii یا isalpha و غیره. اما اینها با اینکه اغلب کار میکنن ولی غلط نوشته شدن. فرم پیشتاز اینا اینه:


                  in code vision: unsigned char isalnum(char c);
                  in standard lib: int isalnum(int c);


                  بنظر میاد که این گیر من بیخوده ولی این فرم نوشتن درسته در اغلب موارد کار میکنه. ولی در همه موارد نه. و این یک باگ اساسی در توابع کتابخانه ای این کامپایلر هست. چرا؟ تحلیل کنین بین موقعی که کاراکتر 255 رو به این توابع پاس میکنین و موقعی که EOF به این توابع پاس میشه.
                  توضیح واضحات: EOF در فایل stdio.h برابر با منفی یک تعریف شده. این مقدار وقتی به این توابع پاس میشه به یک char شکسته میشه و مقدار خام 0xff رو پیدا میکنه یعنی همون نتیجه ای که از ارسال کد 255 حاصل میشه.
                  شاید بعد از صد سال هم کسی به این مشکل بر نخوره. شاید اونجا از تکنیک جدول برای تشخیص نوع کاراکتر استفاده نشه. ولی طرز نوشتن این توابع درست نیست.

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

                  توابع مربوط به lcd در کد ویژن به اعتراف help برنامه خیلی محدودیت های دیگه ای هم داره ولی ما نبایستی به اینا کار داشته باشیم. شما میتونین این توابع رو عوض کنین. چون تابع هستن. ولی نمیتونین خود کامپایلر رو عوض کنین. نمونه اش که نوع float و double هم در کدویژن و هم در WinAVR بفرم 32 بیتی در نظر گرفته میشن و در حقیقت double همون float هست. و طبق اطلاع آقای طراح فقط در IAR این پیاده سازی کامل انجام شده.
                  این مسئله رو دیگه نمیشه با ست کردن پشن های کامپایلر یا عوض کردن کد های کتابخونه رفعش کرد.

                  دیدگاه


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

                    اقا سلام - با iar اگه درست نوشته باشم چطور باید شروع کنم - یه فایل آموزش بزلرین - علاقه شدید بهش دارم ( چون استانداردترین کامپایلره ) - اخه یه بار اومدم من بدبخت باهاش برنامه بنویسم نگو همه چیزو باید خودت بنویسی و به رجیسترها مقدار بدی و ----- خلاصه هیچ - تازه برنامش آبکی بود ( رجیسترها و توابع السیدی دهنمو صاف کرد ) - آقا چطور میتونم iar فول کنم- آقای reza -agha - لطفا راه درست و بگین - نپیچونمون -

                    دیدگاه


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

                      ببین عزیزم. هر کسی بیاد بگه این درست نیست و اون درسته دلیل نمیشه بهترین راه و جواب قطعی رو بدونه. عمدتا اینجور مواقع جوابها نسبی هستش. و نه قطعی. من خودم شاید تا بحال فقط یکی دو خط با IAR نوشته باشم. بنابراین کسی نیستم که بخوام راجع به این کامپایلر صحبتی کنم. معمولا هم برای راحتی با کد ویزارد کد ویژن کار میکنم ولی بعد میبرمش توی WinAVR و اون تو دخلشو میارم. اگر لاجیکش هم خیلی عجق وجق باشه معمولا قبل از این فاز روی PC و تحت ویندوز تستش میکنم و بعد روی WinAVR. تا حالا هم مشکلی نداشتم. حالا اگر به مشکلی برخوردم که نتونستم توی WinAVR از پسش بربیام و عقلا هم بهش میومد که مشکل بخاطر ضعف کامپایلر هست اونوقت میرم سراغ IAR یا هر چیز دیگه ای.
                      چون جسارتا این جور بحث ها رو وقتی دیگه از حد خودش میگذره مشابه اون بحثی میدونم که کسی سالهای آخر عمر حضرت علی ازش پرسیده بود "تعداد موهای ریش من چند تاست" و خوب احتمالا جوابی هم که قنبر بهش داده بود میدونین. آیا به مشکلی برخوردین که کارتون رو لنگ گذاشته؟ که مجبورین "بهتر" رو پیدا کنین؟ یا فقط (با عرض معذرت) از زور بیکاری دنبال "بهترین" میگردین؟
                      از نظر من مهم این نیست که با "بهترین" کار کنین بلکه بهتره با چیزی که کار میکنین محدودیت ها و امکاناتش رو بشناسین تا بتونین به بهترین وجه ازش استفاده کنین.

                      دیدگاه


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

                        نوشته اصلی توسط رضا سپاس یار
                        سلام،
                        ضعف که نه اما همین avr-gcc چون IDE نداره شما باید Editor رو از یه جا تهیه کنید، Debugger رو از جای دیگه، Manualاش هم برای کسی که قبلاً تجربه ی کار با کامپایلرهای GNU رو نداشته خیلی سر راست نیست. در مورد avr-gcc و CodeVisionAVR در هر نسخه ی جدید کلی باگ های نسخه های قبلی رفع شده. (http://www.hpinfotech.ro/html/cvavr_history.htm) اما من به شخصه هیچ وقت ندیدم IAR باگ داشته باشه چراکه IAR از سال 1983 داره کامپایلر C می سازه و الان هسته ی کامپایلرش کاملاً دیباگ شده.
                        این که به نظر من یه قابلیت هم هست بتونه با انواع ادیتور و دیباگر کنه و مجبور نباشی با یه IDE داغون کار کنی (به نسبت می گم)
                        خودش IDE نداره و لازم نیست هم داشته باشه (به نظر من) چون وقتی با یه پلاگین می تونی توی eclipse باش برنامه بنویسی دیگه چی از زندگی می خوای؟
                        این eclipse نظیر نداره محشره
                        اگر این طور نبود خود IAR هم پلاگین نمی داد برای کار با Eclipse با استفاده از کامپایلرهاش:
                        http://www.iar.com/website1/1.0.1.0/2611/1/
                        http://www.iar.com/website1/1.0.1.0/79/1/

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

                        پس این IAR که ورژن تازه ازش میاد چیشو تغییر میدن؟
                        کتابخانه اضافی که نداره
                        ظاهرشم ماشالا که همچین چیزی نداره
                        خوب برا چی پدیت میکنن؟
                        { خلاف قوانین - پاک شد }

                        دیدگاه


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

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

                          1- چقدر می خواهید وقت بگذارید؟
                          2- چه انتظاری از کامپایلر دارید؟

                          مجموعه اطلاعات ناشی از این دو پاسخ منجر به این می شود که برای بعضی بسکام بهترین باشد و برای برخی دیگر کدویژن و به همین ترتیب GCC و IAR و شاید برنامه نویسی اسمبلی. واقعیت آن است که بدون توجه به این دو مورد، بحث کردن از بهترین کامپایلر منجر به یک سری مباحث بدون حاصل و بعضا غیرکارشناسی می شود که معمولا هم به نتیجه خاصی منجر نمی شود و تنها موجب گیج تر شدن مخاطبان کم تجربه تر می گردد.
                          برای کسی که قصد استفاده از یک زبان برنامه نویسی و انتخاب کامپایلر مرتبط با آن را دارد، به غیر از مسئله هزینه ( که خوشبختانه یا متاسفانه در کشور ما موضوعیتی ندارد) توجه به تبعاتی که استفاده از آن ابزار از نظر زمانی ایجاد می کند بسیار مهم است. قدر مسلم آن است که انتخاب ابزار برنامه نویسی مانند بسکام و در مرتبه بعد کدویژن، بطور کلی زمان بسیار کمتری را از یک برنامه نویس نسبت به کامپایلری مانند IAR اشغال می کند و اصولا بحث و شکی در این مورد وجود ندارد. بنابراین با توجه به واقعیات موجود و سطح انتظاراتی که برای اکثر مخاطبین از برنامه نویسی AVR وجود دارد و با توجه به وقتی که می توانند در این مورد صرف کنند، با اطمینان می توان گفت که همان بسکام برای این اکثریت، بهترین محسوب می شود و حتی اصولا نیازی به برنامه نویسی C برای آنها وجود ندارد. در گروه برنامه نویسی C هم کامپایلر کدویژن برای اکثر قریب به اتفاق مخاطبانی که امروز در جامعه مهندسی برق ما مشغول فعالیت هستند و با توجه به سطح انتظارات و میزان وقت و انگیزه آنها،در زمره بهترین ها محسوب می شود.
                          اما برای شخص یا مجموعه ای که بالاترین سطح انتظار از عملکرد یک کامپایلر C را توقع داشته باشد و تبعات زمانی این انتخاب را هم بپذیرد، قطعا کدویژن انتخاب اول نخواهد بود و اینجاست که باید به گزینه هایی مانند IAR بصورت ویژه ای توجه کرد. در یک شرکت بزرگ که صرف مثلا 5000 نفر-ساعت زمان برای انجام یک پروژه برنامه نویسی رقمی محسوب نمی شود و قرار است یک برنامه نویسی مبتنی بر ARM یا AVR را مثلا 20 نفر بصورت کتابخانه های مختلف انجام دهند و نهایتا نتیجه کار آنها توسط یک کامپایلر لینک شود، استفاده از ابزار حرفه ای مانند IAR است که پاسخگوی چنین مقیاس هایی از برنامه نویسی است.
                          حاصل آنکه "بهترین کامپایلر" بر اساس مخاطب تعریف می شود و هر کس بنا به انتظاری که از یک کامپایلر دارد و زمانی که می تواند بنابر تبعات انتخاب خود صرف کند، باید تعیین کند که بهترین کامپایلر برای او کدام است؟ بنابر تجربیات شخصی خود، انتخاب IAR را تنها به کسانی توصیه می کنم که قصد دارند برنامه نویسی را به عنوان جزئی از حرفه خود انتخاب کنند و صدها و بلکه هزاران ساعت از وقت خود را در آینده برای برنامه نویسی رزرو کرده اند و البته کسانی که بیشترین انتظار را از یک کامپایلر دارند.
                          (دو نفر از دوستان در پست های قبلی، سوالاتی را مطرح کردند که در فرصت دیگری به آنها پاسخ خواهم داد).
                          اوژن: به معنای افکننده و شکست دهنده است
                          دانایی، توانایی است-Knowledge is POWER
                          برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                          وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                          قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                          اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                          ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                          دیدگاه


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

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

                            شاید واسه همینه که از کدویژن بیشترین استقبال شده. با اینکه تاپ نیست اما کار مارو سریع راه میندازه. واسه بیشتر ماها که حرفه اصلیمون برنامه نویسی نیست عالیه.
                            جالب اینجاست که من بعد از 20 سال برنامه نویسی هنوز هم به زبان پاسکال بیستر از C علاقه دارم اما کمپایلر درست و حسابی واسه پاسکال (AVR) وجود نداره.
                            حتی فلوکد رو بیشتر از C می پسندم چون همیشه واسه برنامه هام فلوچارت میکشم و اگه دیگه برنامه ننویسم کارم سریعتر پیش میره.
                            بدون اینکه ادعایی در کار باشه می خوام بگم تاحالا واسه سرگرمی مدار نساختم و برنامه ننوشتم و کل حرفایی که زدم در اثر تجربه کار با مشتری های مختلف بدست اومده.
                            با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

                            دیدگاه


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

                              نوشته اصلی توسط n340
                              حالا اگه به کلاک میکرو بستگی داشته باشه چه اتفاقی می افته
                              اجرای تابع تاخیر 45 سیکل زمان می برد که در بهترین شرایط برای احضار و بازگشت از آن حداقل 7 سیکل زمان لازم است. این 52 سیکل (یا بیشتر) به ازای کلاک 16 مگاهرتز برابر 3.25 میکرو ثانیه می شود. اما اگر برای همین میکروکنترلر کلاک 1 مگاهرتز انتخاب شود، تاخیر ایجاد شده برابر حداقل 52 میکروثانیه می شود که اگر فرض کنیم همان 3.25 میکروثانیه کافی باشد،48.75 میکروثانیه بیجهت وقت میکروکنترلر تلف می شود. بنابراین در کلاک 1 مگاهرتز که سرعت پردازش میکروکنترلر بسیار پائین تر است، این روش غیر اصولی سبب می شود که هر چه احضار این تابع در برنامه بیشتر باشد، به همان نسبت بار پردازشی بی موردی به CPU تحمیل شود و و راندمان آن را کاهش دهد. در بحث LCD کاراکتری ممکن است به دلیل تعداد دفعات کم تغییرات خروجی LCD چنین موردی چندان محسوس نباشد، اما مسئله اینجاست که مجموعه همین توابع غیر اصولی در کل سبب می شود که برنامه ای که با یک کامپایلر نوشته می شود، بهتر یا بدتر از برنامه نوشته شده با کامپایلر دیگر عمل کند (از نظر بار تحمیل شده بر CPU و یا حجم کد تولید شده) و همین تفاوت های میکروثاتیه ها در مجموع اجرای یک برنامه حجیم می تواند سرنوشت ساز باشد.

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

                              کد:
                              #if F_CPU >= 16000000
                              #define LCD_DELAY	asm volatile ("nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n");
                              #else
                              #if F_CPU >= 12000000
                              #define LCD_DELAY	asm volatile ("nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n");
                              #else
                              #if F_CPU >= 8000000
                              #define LCD_DELAY	asm volatile ("nop\n nop\n nop\n nop\n nop\n nop\n nop\n");
                              #else
                              #if F_CPU >= 4000000
                              #define LCD_DELAY	asm volatile ("nop\n nop\n nop\n nop\n nop\n");
                              #else
                              #define LCD_DELAY	asm volatile ("nop\n nop\n nop\n");
                              #endif
                              #endif
                              #endif
                              #endif
                              اوژن: به معنای افکننده و شکست دهنده است
                              دانایی، توانایی است-Knowledge is POWER
                              برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                              وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                              قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                              اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                              ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                              دیدگاه


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

                                نوشته اصلی توسط Mohpooria
                                این که به نظر من یه قابلیت هم هست بتونه با انواع ادیتور و دیباگر کنه و مجبور نباشی با یه IDE داغون کار کنی (به نسبت می گم)
                                خودش IDE نداره و لازم نیست هم داشته باشه (به نظر من) چون وقتی با یه پلاگین می تونی توی eclipse باش برنامه بنویسی دیگه چی از زندگی می خوای؟
                                این eclipse نظیر نداره محشره
                                اگر این طور نبود خود IAR هم پلاگین نمی داد برای کار با Eclipse با استفاده از کامپایلرهاش:
                                http://www.iar.com/website1/1.0.1.0/2611/1/
                                http://www.iar.com/website1/1.0.1.0/79/1/

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

                                پس این IAR که ورژن تازه ازش میاد چیشو تغییر میدن؟
                                کتابخانه اضافی که نداره
                                ظاهرشم ماشالا که همچین چیزی نداره
                                خوب برا چی پدیت میکنن؟
                                Mohpooria:

                                Eclipse ادیتور خوبیه تا حدی که TI نسخه ی 4 CCS رو بر مبنای اون عرضه کرده. حتی میتونم بگم از ادیتور IAR هم بهتره. چون خودم با دو تاش کار کردم این رو میگم. اما این ربطی به avr-gcc یا arm-gcc نداره چون مشکل باگ همچنان در این کامپایلرها وجود داره:
                                http://www.nongnu.org/avr-libc/bugs.html

                                در مورد اینکه IAR تو نسخه های جدیدش چه کار می کنه بهتره به سایت خودش مراجعه کنید، مثلا در مورد نسخه ی ARM:
                                http://www.iar.com/website1/1.0.1.0/1070/1
                                و در مورد AVR:
                                http://www.iar.com/website1/1.0.1.0/107/1

                                در مورد نسخه ی 6.1 ARM، از هسته های Cortex-A5 پشتیبانی می کنه. پردازنده ای که هنوز تجاری نشده و نوامبر 2010 معرفی شده! یا در مورد نسخه ی AVRاش یادمه که هنوز XMEGA در بازار عرضه نشده بود (در مرحله ی Sample) بود و IAR اون رو پشتیبانی می کرد!
                                There is nothing so practical as a good theory. — Kurt Lewin, 1951

                                دیدگاه

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