اطلاعیه

Collapse
No announcement yet.

حجم کد تولیدی بالا توسط AVR Studio

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

    حجم کد تولیدی بالا توسط AVR Studio

    با سلام خدمت اساتید گل.
    چند وقتی میشه که از بیسیک به C و البته C++ مهاجرت کردم.(در امر برنامه نویسی AVR)
    بعد از تحقیق و تفحس های مختلف در مورد کامپایلر های فراوان C برای avr به این نتیجه رسیدم که AVR Studio از همه بهتر میباشند.

    البته ناگفته نمونه که از ویزارد Code Vision برای راحتی استفاده میکنم. :mrgreen:

    بعد از مدتها کار و رضایتمندی از AVR Stuio سر یه پروژه ای مجبور شدم کدی که قبلا توسط AVR Studio نوشته بودم رو به کدویژن منتقل کنم.
    بعد از انتقال و تنظیمات و بعد از کامپایل پروژه در کمال تعجب حجم کد تولیدی از 87 درصد(در AVR Studio) به 34 درصد (در Code Vision) تغییر یافت. :eek:
    نوع میکرو ATmega8 بود.

    خیلی با خودم و برنامه ای که نوشتم و البته AVR Studio کلنجار رفتم بازم حجم کدش به سبکی کدویژن نرسید.اپتیمایز ها رو روی مقاری O1 , o2 , os و همه چی قرار دادم بازم نشد که نشد.

    فقط در کدویژن تنها چیزی که متوجه شدم اینبود که اگر Optimize رو روی حالت Speed بزارم حجم کد تولیدی 78 درصد از حافظه فلش میشه و اگر روی حالت Size بزارم میشه همون 34 درصدی که خدمتتون عرض کردم.

    حالا از دوستان و اساتیدی که در این زمینه تبهر دارن تقاضا میکنم راهنمایی کنن.آیا مشکل از AVR Studio هست یا نه میشه با تنظیمات مختلف مشکل رو برطرف کرد؟؟؟

    #2
    پاسخ : حجم کد تولیدی بالا توسط AVR Studio

    با سلام
    وقتتون بخیر اقای حسن زاده

    خب واقعیت این که atmel studio بهترین کامپایلر نیست حالا نمی خوام اینجا بحث انتخاب کامپایلر رو راه بندازیم.

    منم یه بار برای تست برنامه ای رو با سه تا کامپایلر bascom، کدویژن و atmel studio نوشتم و کامپایل کردم. در کمال تعجب دیدم هگز تولید شده توسط بسکام از همه کمتره و atmel studio از همه بیشتر .

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

    البته باید اسم IAR رو هم شنیده باشین و با توجه به گفته اساتید و این نکته که تمامی کدهای خود اتمل با این کامپایلر هست میشه فهمید که از هر لحاظ الا ظاهر :دی این کامپایلر بهترینه.
    ولی خدایی برای بار اول ادم رو این شکلی می کنه oo:

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

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

    دیدگاه


      #3
      پاسخ : حجم کد تولیدی بالا توسط AVR Studio

      سلام.
      آقا احیانا شما تو برنامتون از توابع sprintf و یا هر نوع تابعی که عدد رو به رشته تبدیل میکنه استفاده نکردید؟؟

      دیدگاه


        #4
        پاسخ : حجم کد تولیدی بالا توسط AVR Studio

        اگه منظورتون بنده هست خیر.
        چرا ناراحتی پاتریک!
        + امروز ی بچه دیدم سرچهارراه گل میفروخت
        - از دیدنش ناراحت شدی؟
        + نه
        پس چی ناراحتت کرده
        + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
        ------------------------------------------------------------------------------------------------------
        تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
        ------------------------------------------------------------------------------------------------------
        محصولات

        دیدگاه


          #5
          پاسخ : حجم کد تولیدی بالا توسط AVR Studio

          نوشته اصلی توسط retina
          سلام.
          آقا احیانا شما تو برنامتون از توابع sprintf و یا هر نوع تابعی که عدد رو به رشته تبدیل میکنه استفاده نکردید؟؟
          فک کنم استفاده کرده(اقای حسن زاده منظورمه)
          ((( تا زماني که به قدرت نرسيده اي فرمانبردار باش و چون به آن رسيدي، فروتن. )))

          ((( سکه ها هميشه سر و صدا مي کنند ، اما پول هاي کاغذي همواره ساکت اند. پس وقتي ارزش شما زياد مي شود، ساکت و فروتن باقي بمانيد.)))

          دیدگاه


            #6
            پاسخ : حجم کد تولیدی بالا توسط AVR Studio

            نوشته اصلی توسط retina
            سلام.
            آقا احیانا شما تو برنامتون از توابع sprintf و یا هر نوع تابعی که عدد رو به رشته تبدیل میکنه استفاده نکردید؟؟
            سلام گلم.نه بابا سنگین ترین تابعش Delay هست.هیچی اینکلود نشده.کلا برنامه هه ست و ریست پایه هاست.4 تا for هم توش استفاده شده.

            نوشته اصلی توسط mamaly2008
            فک کنم استفاده کرده(اقای حسن زاده منظورمه)
            مملی جان شما نظر ندی من راحت ترم.مرسی :mrgreen:

            دیدگاه


              #7
              پاسخ : حجم کد تولیدی بالا توسط AVR Studio

              پیرو مسائل بحث شده در بالا بر ان شدم تا تست کوچکی برای مقایسه حجم کد تولیدی انجام دهم که حاصل بر این شد.
              در کامپایلر کدویژن OPTIMIZATION بر حسب size و در کامپایلر avr studio optimization بر روی -01 قرار داده شد.

              کد نوشته شد در کامپایلر codevision
              کد:
              /*
               * _1st_lcd_mega64.c
               *
               * Created: 12/25/2013 8:27:33 AM
               * Author: electronic
               */ 
              
              #ifndef F_CPU
              #define F_CPU 4000000UL
              #endif F_CPU
              #include <mega64.h>
              #include <delay.h>
              #include <stdio.h>
              
              unsigned char str[16];
              int c;
                  
              void main(void)
              {   
                  ADMUX=(1<<REFS0);
                  ADCSRA=0xd6;
                while(1)      c=ADCW;
                {      	sprintf(str,"voltage = %u ",c); 
              		delay_ms(1000);
              		              
                }
              }
              کد نوشته شده در کامپایلر avr studio
              کد:
              /*
               * _1st_lcd_mega64.c
               *
               * Created: 12/25/2013 8:27:33 AM
               * Author: electronic
               */ 
              
              #ifndef F_CPU
              #define F_CPU 4000000UL
              #endif F_CPU
              #include <avr/io.h>
              #include <util/delay.h>
              
              unsigned char str[16];
              int c;
              	
              int main(void)
              {
              	ADMUX=(1<<REFS0);
              	ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1);
                while(1)
                {
              c=ADCW;
              		sprintf(str,"voltage = %u ",c);
              		_delay_ms(1000);
              		
              					
                }
              }
              که حجم کد تولیدی در هر ردو کامپایلر 5kb بود.
              فایل های هگز رو در فایل زیر قرار دادم.
              http://s5.picofile.com/file/81077089...tudio.rar.html
              Someone who can change the world
              ELECTRONIC ENGINEER

              دیدگاه


                #8
                پاسخ : حجم کد تولیدی بالا توسط AVR Studio

                نکته مهمی که باید به آن توجه کنید این است که فرمت Hex دقیقا نشان دهنده حجم کد تولید شده نیست. فرمت مورد استفاده از نوع Intel standard است که در لینک زیر توضیح داده شده است :

                http://en.wikipedia.org/wiki/Intel_HEX

                برای بررسی حجم واقعی کد باید یا به گزارش های کامپایلر مراجعه کنید و یا فرمت Hex را به binary تبدیل کنید. در همین رابطه با استفاده از فایل Hex2bin که در لینک زیر وجود دارد:

                http://www.atmel.com/tools/8051referencedocuments.aspx

                من دو فایل Hex شما را در محیط command prompt تبدیل کردم که حجم یک فایل 1798 بایت و دیگری 1586 بایت شد که این اعداد مقدار واقعی حافظه Flash اشغال شده هستند.

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

                دیدگاه


                  #9
                  پاسخ : حجم کد تولیدی بالا توسط AVR Studio

                  با تشکر از جناب Abritco و آقای کی نژاد.

                  راستش من توی برنامم از هیچ فایل سرآمدی غیر از Delay استفاده نکردم.و تمام زیربرنامه های نوشته شده در حد ست و ریست کردن پایه ها و یا یه شیفت چندتایی بود.دوتا متغیر از EEPROM دارم و باقی دستوراتم For و IF هستن.بنظرم بهترین راه تست هم همین برنامه خودم باشه.آخه فکر نمیکنم توی چند خط تفاوت خیلی چشمگیر باشه.

                  درمورد حجم کد هم من هیچوقت به حجم فایل هگز مراجعه نکردم و گزارشهای هردو کامپایلر رو مشاهده کردم.و مورد دیگری که دقت کردم هنگام پروگرم کردن برنامه بود که با نرم افزار هاتل حدود یک سوم از نوار پر میشد(برای کدویژن)اما برای AVR Studio حدود 80 درصد پر میکرد.
                  طبق یکسری دستکاری ها فهمیدم که Delay در کدویژن درصورتی که Optimize روی حالت Size باشه دقیق نیست و اگر روی حالت Speed بزارم با اینکه حجم کدم زیاد میشه اما دقت بیشتری داره.(البته حتی در حالت Speed هم کدویژن حدود 10 درصد کمتر کد تولید میکنه.)

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



                  دیدگاه


                    #10
                    پاسخ : حجم کد تولیدی بالا توسط AVR Studio

                    به عقیدهء من ، AVR stodio بهترین انتخاب هست . چون خود کمپانی سازندهء این میکروها اونو پیشنهاد کرده و حتماً دلیلی براش داشته . وگرنه میتونست بقیهء کامپایلرها رو معرفی کنه !

                    اگرچه که ممکنه اندکی حجم کد تولید شده با AVR stodio بیشتر باشه ، ولی قطعاً به استاندارد کمپانی ATMEL نزدیکتره .

                    ما چون کاربران عادی این میکروها هستیم ، ممکنه به همهء ابعاد دلایل این موضوع اشراف نداشته باشیم و بنابراین ، هر کدوم از ما ، بنا به سلیقهء خودمون ، کامپایلر مورد علاقهء خودمونو مطرح میکنیم و این به عقیدهء من اشتباه هست ...

                    با صحبت جناب "طراح" کاملاً موافقم ...
                    بر زنده باد گفتن این مردم خوش گریز

                    دل بر مَنه که یک تنه در سنگرت کنند ...

                    دیدگاه


                      #11
                      پاسخ : حجم کد تولیدی بالا توسط AVR Studio

                      یه ویژگی دیگه atmel اینکه واسه arm هم میتونه کد تولید کنه .
                      بنا به دلایلی شاید لازم شد برای یه پروژه از arm استفاده بشه اون موقع حداقل یه کامپایلری داریم که arm رو پشتیبانی میکنه.

                      دیدگاه

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