اطلاعیه

Collapse
No announcement yet.

آموزش AVR-GCC

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

    #61
    پاسخ : آموزش AVR-GCC

    یعنی بجای اینکه اشاره گر از نوع ساختمان Personalباشه از نوع Person
    اگر این طوری بشه دلیلش چیه ؟ آیا این روش کاربرد خاصی داره؟
    اخه person که نوع نیست ، خودش یه متغیره!
    من متوجه نشدم ، تا حالا چنین چیزی ندیدم ، بنظرم بی معنی میاد شایدم اشتباه! میشه اون کدی که این مورد رو توش دیدید بزارید .

    البته یه حدسی هم که میزنم احتمالا typedef باشه!

    دیدگاه


      #62
      پاسخ : آموزش AVR-GCC

      نوشته اصلی توسط mojtaba_led
      البته یه حدسی هم که میزنم احتمالا typedef باشه!
      با سلام
      زدید تو خال :applause:
      قبل از تعریف ساختمان عبارت typedefآورده:
      کد:
      }typedef struct xclass
      ;uchar  obj1
      ;uchar  obj2
      ;word  xobj 
      ;xclass_t{

      دیدگاه


        #63
        پاسخ : آموزش AVR-GCC

        21. مختصری در رابطه با type-casting
        معنی تحت لفظش فکر کنم همین تبدیل نوع میشه ، یعنی عوض شدن نوع یه متغیر از یک نوعی که براش تعریف شده به نوع دیگه.
        خوب تو زبان های برنامه نویسی دو نوع تبدیل نوع داریم ، 1. ضمنی 2. صریح
        1. تبدیل ضمنی :
        دو حالت داره یا درصورت انتساب اتفاق میوفته یا در صورت محاسبه ،
        در مورد انتساب ، فرض کنید دو تا متغیر داریم ، یکیش از نوع uchar هست و یکیش هم از نوع uint اولی یه متغیر یک بایتی هست و دومی یه متغیر 2 بایتی ، خوب تو اینجا ما فقط میتونیم مقدار متغیر کوچکتر رو به متغیر بزرگتر منتسب کنیم اما برعکس اش امکان نداره مگر اینکه مقداری که تو متغیر بزرگتر قرار داره از ظرفیت متغیر کوچکتر بیشتر نباشه :

        کد:
        unsigned char a;
        unsigned int b;
        
        a=100;
        b=a;//it's right
        
        b=254;
        a=b;//it's right
        
        b=500;
        a=b;//it's wrong


        حالت دوم ، تو عبارات محاسباتی امکان داره ما روی چند تا متغیر از انواع مختلف عملیات حسابی انجام بدیم نتیجه چنین عبارت هایی هر چی که بشه در قالب اون متغیری ظاهر میشه که دارای بزرگترین اندازه بوده باشه . در عبارات محاسباتی ایتن قانون حاکم هست که انواع کوچکتر به انواع بزرگتر تبدیل می شوند .
        به ترتیب اولویت:
        اگر یکی از عملوند ها long double باشد، عملوند دیگر به long double تبدیل می شود.
        اگر یکی از عملوند ها double باشد، عملوند دیگر به double تبدیل می شود.
        اگر یکی از عملوند ها float باشد، عملوند دیگر به float تبدیل می شود.
        اگر یکی از عملوند هاunsigned long باشد، عملوند دیگر بهunsigned long تبدیل می شود.
        اگر یکی از عملوند ها long باشد، عملوند دیگر به long تبدیل می شود.
        اگر یکی از عملوند ها unsigned int باشد، عملوند دیگر به usigned int تبدیل می شود.
        توچه داشته باشید که اگر یکی از عملوندها مثلا از نوع long باشد و دیگری از نوع unsigned int باشد، ولی مقدارunsigned int نتواند توسط long نمایش داده شود ، هر دو عملوند به unsigned long تبدیل می شوند و همین مورد رو میشه به ترکیبات دیگه تعمیم داد.

        برای مثال :

        کد:
        unsigned char a;
        unsigned int b;
        float c;
        
        a=5;
        b=8;
        
        c=a/b;//result is 0 in uint 
        
        ------------------------------
        float a;
        unsigned int b;
        float c;
        
        a=5;
        b=8;
        
        c=a/b;//result is 0.625 in float


        2. تبدیل صریح : تو این نوع تبدیل برنامه نویس خودش تعیین میکنه که متغیر مورد نظر به چه نوعی تبدیل بشه ، این عمل به فرم کلی زیر صورت میگیره :

        کد:
        (new_type) expression


        expression ، متغیر یا عبارت مورد نظر هست که میخواهیم تبدیل روی اون انجام بشه.
        new_type ، نوعی هست که میخواهیم تبدیل به اون صورت بگیره .

        برای مثال :

        کد:
        	int a=5,b=8;
        	float c = 0, d = 0;
        
        	c = a/b;//result is 0 (c=0)
        	
        
        	d = (float)a/(float)b;//result is 0.625 (d=0.625)


        یا مثلا typecasting توی اشاره گر ها ، به برنامه زیر دقت کنید :


        کد:
        #include<stdio.h>
        
        int main(void)
        {
        	char arr_char[]= {'l','m','n','o','p','q','r','s','t'};
        	int arr_int[]= {1,2,3,4,5,6,7,8,9};
        
        	char *ptr_char = arr_char;
        	int *ptr_int = arr_int;
        
        	int i = 0;
        
        	printf("\n Output when char ptr is pointing to char array and int ptr to integer array\n");
        
        	for(i=0;i<9;i++)
        	{
        		printf(" %d ",*ptr_int);
        		ptr_int++;
        	}
        	printf("\n");
        
        	for(i=0;i<9;i++)
        	{
        		printf(" %c ",*ptr_char);
        		ptr_char++;
        	}
        	printf("\n");
        
        
        	printf("\n Output when char ptr is pointing to integer array and int ptr to char array without any typecasting\n");
        
        	ptr_int = arr_char;
        	ptr_char = arr_int;
        
        	for(i=0;i<9;i++)
        	{
        		printf(" %d ",*ptr_char);
        		ptr_char++;
        	}
        	printf("\n");
        
        	for(i=0;i<9;i++)
        	{
        		printf(" %c ",*ptr_int);
        		ptr_int++;
        	}
        	printf("\n");
        
        	printf("\n Output when char ptr is pointing to integer array and int ptr to char array with typecasting\n");
        
        	ptr_int = arr_char;
        	ptr_char = arr_int;
        
        	for(i=0;i<9;i++)
        	{
        		printf(" %d ",*ptr_char);
        		ptr_char = (int*)ptr_char + 1;
        	}
        	printf("\n");
        
        	for(i=0;i<9;i++)
        	{
        		printf(" %c ",*ptr_int);
        		ptr_int = (char*)ptr_int + 1;
        	}
        	printf("\n");
        
        	return 0;
        }


        اگه این رو تو برلند c کامپایل =و اجراش کنید خواهیم داشت :


        کد:
        Output when char ptr is pointing to char array and int ptr to integer array
         1 2 3 4 5 6 7 8 9 
         l m n o p q r s t 
        
         Output when char ptr is pointing to integer array and int ptr to char array without any typecasting
         1 0 0 0 2 0 0 0 3 
         l p t  ? ?    
        
         Output when char ptr is pointing to integer array and int ptr to char array with typecasting
         1 2 3 4 5 6 7 8 9 
         l m n o p q r s t



        تو مثال بالا ما دو تا اشاره گر تعریف کردیم و نوع متغیری هم که قراره به آدرس اون ها اشاره کنند هم به ترتیب اولی char و دومی int تعیین کردیم.

        علاوه بر اشاره گر های بالا دو تا آرایه هم تعریف کردیم که قصد داریم مقادیر شون رو نمایش بدیم اولی از نوع char (اندازه هر درایه یک بایت هست) و دومی از نوع int (انداره هر درایه 4 بایت هست)
        .

        یاد آوری :
        1. آدرس اولین بایتی از حافظه که به متغیر (از هر نوعی که میخواد باشه) اختصاص پیدا میکنه ، آدرس اون متغیر هست .

        2. چیزی که تو یه اشاره گر نوشته ، خونده و ذخیره میشه آدرس یک بایت از حافظه هست .

        خوب ، تو قسمت اول کد یعنی اینجا :

        کد:
        char *ptr_char = arr_char;
        	int *ptr_int = arr_int;
        
        	int i = 0;
        
        	printf("\n Output when char ptr is pointing to char array and int ptr to integer array\n");
        
        	for(i=0;i<9;i++)
        	{
        		printf(" %d ",*ptr_int);
        		ptr_int++;
        	}
        	printf("\n");
        
        	for(i=0;i<9;i++)
        	{
        		printf(" %c ",*ptr_char);
        		ptr_char++;
        	}


        آدرس آرایه از نوع کاراکتر در اشاره گر از نوع کاراکتر و آدرس آرایه از نوع int هم در اشاره گر از نوع int
        نوشته میشه.

        بعد تو حلقه for اول مقداری که در آدرسی از حافظه که اشاره گر از نوع int داره به اون اشاره میکنه در قالب یه عدد صحیح نمایش داده میشه و بعد مقدار اشاره گر یک واحد (با توجه به این که نوع متغیری که به اون اشاره میکنه 4 بایتی هست پس واحد ما اینجا برابر با 4 هست) زیاد میشه و دوباره مقداری که تو این آذرس هست رو نمایش میده و ... تا 9 بار .

        بعد تو حلقه for دوم مقداری که در آدرسی از حافظه که اشاره گر از نوع char داره به اون اشاره میکنه در قالب یه کاراکتر نمایش داده میشه و بعد مقدار اشاره گر یک واحد (با توجه به این که نوع متغیری که به اون اشاره میکنه 1 بایتی هست پس واحد ما اینجا برابر با 1 هست) زیاد میشه و دوباره کاراکتری که تو این آدرس هست رو نمایش میده و ... تا 9 بار .

        و نتیجتا خروجی این قسمت از کد میشه این :

        کد:
        pOutput when char ptr is pointing to char array and int ptr to integer array
         1 2 3 4 5 6 7 8 9 
         l m n o p q r s t


        تو قسمت دوم کد داریم :

        کد:
        printf("\n Output when char ptr is pointing to integer array and int ptr to char array without any typecasting\n");
        
        	ptr_int = arr_char;
        	ptr_char = arr_int;
        
        	for(i=0;i<9;i++)
        	{
        		printf(" %d ",*ptr_char);
        		ptr_char++;
        	}
        	printf("\n");
        
        	for(i=0;i<9;i++)
        	{
        		printf(" %c ",*ptr_int);
        		ptr_int++;
        	}


        تو اینجا آدرس آرایه از نوع کاراکتر در اشاره گر از نوع int و آدرس آرایه از نوع int هم در اشاره گر از نوع char نوشته میشه.

        بعد تو حلقه for اول مقداری که در آدرسی از حافظه که اشاره گر از نوع char داره به اون اشاره میکنه در قالب یه عدد صحیح نمایش داده میشه و بعد مقدار اشاره گر یک واحد (با توجه به این که نوع متغیری که به اون اشاره میکنه 1 بایتی هست پس واحد ما اینجا برابر با 1 هست) زیاد میشه و دوباره مقداری که تو این آدرس هست رو نمایش میده و ... تا 9 بار .

        بعد تو حلقه for دوم مقداری که در آدرسی از حافظه که اشاره گر از نوع int داره به اون اشاره میکنه در قالب یه کاراکتر نمایش داده میشه و بعد مقدار اشاره گر یک واحد (با توجه به این که نوع متغیری که به اون اشاره میکنه 4 بایتی هست پس واحد ما اینجا برابر با 4 هست) زیاد میشه و دوباره کاراکتری که تو این آدرس هست رو نمایش میده و ... تا 9 بار .

        و نتیجتا خواهیم داشت :

        کد:
         Output when char ptr is pointing to integer array and int ptr to char array without any typecasting
         1 0 0 0 2 0 0 0 3 
         l p t  ? ?  


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

        خوب برای حل این مشکل کاری که باید انجام بدیم اینه که واحد ها رو درست کنیم یعنی اونجا که باید واحد برابر با 1 باشه 1 بشه و اونجا که قرار واحد 4 باشه 4 بشه ، خوب این امر میسر نیست مگر با تغییر نوع متغیر اشاره گر و این تغییر نوع هم به کمک type-casting انجام میشه، به ترتیب زیر :

        کد:
        printf("\n Output when char ptr is pointing to integer array and int ptr to char array with typecasting\n");
        
        	ptr_int = arr_char;
        	ptr_char = arr_int;
        
        	for(i=0;i<9;i++)
        	{
        		printf(" %d ",*ptr_char);
        		ptr_char = (int*)ptr_char + 1;
        	}
        	printf("\n");
        
        	for(i=0;i<9;i++)
        	{
        		printf(" %c ",*ptr_int);
        		ptr_int = (char*)ptr_int + 1;
        	}


        تو اینجا آدرس آرایه از نوع کاراکتر در اشاره گر از نوع int و آدرس آرایه از نوع int هم در اشاره گر از نوع char نوشته میشه.

        بعد تو حلقه for اول مقداری که در آدرسی از حافظه که اشاره گر از نوع char داره به اون اشاره میکنه در قالب یه عدد صحیح نمایش داده میشه و بعد یه type-casting صورت میگیره و اشاره گر از نوع char به int تبدیل میشه و یک واحد بهش اضافه میشهم (با توجه به type-casting واحد وا اینجا برابر با 4 هست ) زیاد میشه و دوباره مقداری که تو این آدرس هست رو نمایش میده و ... تا 9 بار .

        بعد تو حلقه for دوم مقداری که در آدرسی از حافظه که اشاره گر از نوع int داره به اون اشاره میکنه در قالب یه کاراکتر نمایش داده میشه و بعد یه type-casting صورت میگیره و اشاره گر از نوع int به char تبدیل میشه و یک واحد بهش اضافه میشهم (با توجه به type-casting واحد ما اینجا برابر با 1 هست ) زیاد میشه و دوباره کاراکتری که تو این آدرس هست رو نمایش میده و ... تا 9 بار .

        و نتیجتا خواهیم داشت :

        کد:
        Output when char ptr is pointing to integer array and int ptr to char array with typecasting
         1 2 3 4 5 6 7 8 9 
         l m n o p q r s t



        خوب ،
        در مورد typdef باید گفت زمانی که مثلا ما میخواهیم یه اسم با مصما به یه نوع داده اختصاص بدیم تا بعد از اون دیگه برای تعریف یه متغیر از اون داده دیگه مجبور به استفاده از ترکیبات طولانی و غریب استفاده نکینم مخصوصا زمانی که این نوع داده ما از جنس ساختمان داده باشه که باید اونوقت از struct هم اولش نوشته بشه برای پرهیز از این کار میاییم از typdef در ابتدای تعریف استفاده میکنیم و درانتها بعد از آکولاد بسته اسم جدیدمون رو که میخواهیم متغیر های از این جنس داده جدید رو با اون تعریف کنیم ، مینویسیم و در انتهای اون یه t میزاریم که هر کی اینو دید بدونه که این اسم یه نوع داده هست . برای مثال همین ساختمان داده ای که خودتون گزاشتید ، یه ساختمان داده تعریف شده با نام xclass و با عنوان xclass_t هم typefef شده ، به این ترتیب هر جا که بخواهیم یه داده از این نوع تعریف کنیم به دو صورت میتونیم عمل کنیم :
        1.

        کد:
        /Declare a variable on xclass structure:
        struct xclass data;
        
        //Declare a pointer on xclass structure:
        struct xclass *data;


        2.

        کد:
        //Declare a variable on xclass structure:
        xclass_t data;
        
        //Declare a pointer on xclass structure:
        xclass_t *data;




        پایان قسمت بیست و یکم

        دیدگاه


          #64
          پاسخ : آموزش AVR-GCC

          از توضیحاتی که توقسمت آخر (typedef)دادید و (سوال برادر کیان)یه برداشتی کردم می خواستم ببینم درسته:
          اگر اول تعریف ساختمان typedef بیاد، اسم بعد از آکولاد میشه اسم مستعار همان ساختمان و نه اسم یه متغییر از نوع اون ساختمان؟؟؟
          باتشکر فراوان از پست های ارزشمندتون

          دیدگاه


            #65
            پاسخ : آموزش AVR-GCC

            از توضیحاتی که توقسمت آخر (typedef)دادید و (سوال برادر کیان)یه برداشتی کردم می خواستم ببینم درسته:
            اگر اول تعریف ساختمان typedef بیاد، اسم بعد از آکولاد میشه اسم مستعار همان ساختمان و نه اسم یه متغییر از نوع اون ساختمان؟؟؟
            باتشکر فراوان از پست های ارزشمندتون
            بله دقیقا.البته انتهاش هم یه t_ اضافه میکنن.
            خواهش میکنم برادر.

            دیدگاه


              #66
              پاسخ : آموزش AVR-GCC

              آقا مجتبی سلام
              باز من اومدم
              دوتا سوال داشتم :
              1-در مورد دستور define ، هرچیزی بادستور define تعریف بشه بهش می گن ماکرو؟
              2-در مورد یونیون ها یه مقدار مطالعه کردم،بی زحمت یه چند تامثال از کاربرداش می زنید.
              با تشکر پیشاپیش از مطالب راهگشاتون

              دیدگاه


                #67
                پاسخ : آموزش AVR-GCC

                نوشته اصلی توسط kiyan90
                آقا مجتبی سلام
                باز من اومدم
                دوتا سوال داشتم :
                1-در مورد دستور define ، هرچیزی بادستور define تعریف بشه بهش می گن ماکرو؟
                2-در مورد یونیون ها یه مقدار مطالعه کردم،بی زحمت یه چند تامثال از کاربرداش می زنید.
                با تشکر پیشاپیش از مطالب راهگشاتون
                گویا جناب استاد از سوالات فقیرانه ی بنده خسته شدن(البته حق دارن)
                گفتم خودم یه جوابی به خودمو و امثال خودم بدم
                مثل اینکه برای تعریف ماکرو از دستور define استفاده می شه، که نه تنها برای مقدارهای ثابت ها میتونه استفاده بشه بلکه می تونه آرگومان هم داشته باشه.
                در مورد سوال دوم هم نوعی از داده های جمعی هستن که با استفاده از یک مکان حافظه مشترک بین دو چند متغیر به اشتراک گذاشته می شوند.درمورد کاربرد های عملی هنوز مثال مناسبی ندارم

                دیدگاه


                  #68
                  پاسخ : آموزش AVR-GCC

                  اقا توابع cbi , sbi تو اتمل استودیو کجانند؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟

                  دیدگاه


                    #69
                    پاسخ : آموزش AVR-GCC

                    سلام دوستان دیدم این تاپیک مربوط به آموزش avr-gccهست ....منم تازه کارم واس همین این چند روز کلی گشتم و...تا اینکه این پی دی اف رو پیدا کردم ..به نظرم خوب میومد ..خیلی هم شبیه مباحثی است که اینجا مطرح شده(شایدم کار یکی از همین بچه ها باشه ...همه ی پست ها رو نخوندم)لینکش:
                    http://s3.picofile.com/file/75723284...R_GCC.rar.html
                    امیدوارم بدرد شما بخوره.

                    دیدگاه


                      #70
                      پاسخ : آموزش AVR-GCC

                      نوشته اصلی توسط friendchp
                      سلام دوستان دیدم این تاپیک مربوط به آموزش avr-gccهست ....منم تازه کارم واس همین این چند روز کلی گشتم و...تا اینکه این پی دی اف رو پیدا کردم ..به نظرم خوب میومد ..خیلی هم شبیه مباحثی است که اینجا مطرح شده(شایدم کار یکی از همین بچه ها باشه ...همه ی پست ها رو نخوندم)لینکش:
                      http://s3.picofile.com/file/75723284...R_GCC.rar.html
                      امیدوارم بدرد شما بخوره.
                      دوست عزیز سلام
                      این فایلی که لینکشو قرار دادید مربوط مباحثی هست که خود جناب استاد رستمی در این تایپکی که خودشون ایجاد کردن،قرار دادن و نسخه ی pdf مطالب بررسی شده رو توسایتشون قراردادن.

                      دیدگاه


                        #71
                        پاسخ : آموزش AVR-GCC

                        سلام
                        من به تازگی به سمت نرم افزار AVR studio برای برنامه نویسی کشیده شدم

                        میخوام از بچه هایی که تا الان کار کردن بپرسم که زبان c کد ویژن چه تفاوتهایی با GCC استادیو داره ؟
                        همچنین چرا اسمش GCC هست؟

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

                        دیدگاه


                          #72
                          پاسخ : آموزش AVR-GCC

                          با سلام
                          gcc یه زبون نیست، یه کامپایلره.
                          البته خوب gcc مختص زبان سی نیست چندین زبان و خیلی از پلت فورم ها رو ساپورت میکنه برخلاف کامپایلر های دیگر زبان سی.
                          http://gcc.gnu.org/
                          http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/C-Extensions.html

                          چیزی که تو برنامه نویس برای avr به زبان c تو این کامپایلر در مقایسه با کامپایلرهای دیگه برای ما مهمه، یا به طور کل بین کامپایلر های موجود برای avr، کدی که تولید میکنه به لحاظ حجم و سرعت اجرا، که به نظر و در عمل، avr-gcc و iar خروجی های بهینه تری نسبت به کامپایلرهایه دیگه دارند، البته این مسئله وقتی مطرح میشه که این مسائل براتون مهم باشه. پیشنهاد میکنم در این رابطه به تاپیک زیر مراجعه کنید:
                          http://www.eca.ir/forum2/index.php?topic=41450.0

                          و اون چیزی که باعث زدن این تاپیک و مشابه این میشه، تفاوت سینتکس برنامه نویسی کامپالیرهاست و الا زبان که همون C هست، در این تاپیک فقط به این مسئله پرداخته شده.
                          همچنین چرا اسمش GCC هست؟
                          http://en.wikipedia.org/wiki/GNU_Compiler_Collection


                          ایا من کار درستی میکنم که از کد ویژن اسباب کشی کنم به سمت avrstudio ؟
                          مجددا به این تاپیک مراجعه کنید:
                          http://www.eca.ir/forum2/index.php?topic=41450.0

                          دیدگاه


                            #73
                            پاسخ : آموزش AVR-GCC

                            پس با این حساب من دارم کار خوبی میکنم که دارم میرم سمت نرم افزار خود شرکت تولید کننده چرا که هم رایگانه و هم مهندسین ساخت خود AVR نرم افزار رو ساختند پس هیچ کم و کسری نداره :wow: فقط سختی کار توی منابعش هست :read:
                            الکترونیک همه کاره دنیا

                            دیدگاه


                              #74
                              درخواست کمک

                              با سلام :
                              قبلا از کد ویژن استفاده میکردم نرم افزار avr studio 6.2را دانلود و نصب کردم چطور میتونم از <lcd.h> استفاده کنم با نوشتن برنامه بعد از کامپایل , نداشتنlcd.hخطا می ده به نظر در کتاب خانه وجود نداره لطفا راهنمایی ام کنید (varesh356@gmail.com)
                              با تشکر- مبتدی و علاقه مند به میکرو

























                              ,

                              دیدگاه


                                #75
                                پاسخ : آموزش AVR-GCC

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

                                --
                                از dvd همراه multi avr programer فروشگاه سایت win avr رو نصب کردم و همه مراحلی که اینجا نوشته شده بود دنبال کردم ولی نمیدونم چرا هیچ برنامه ای کامپایل نمیشه
                                کد:
                                > "make" clean
                                "make": Interrupt/Exception caught (code = 0xc00000fd, addr = 0x4217b3)
                                makeall و make clean هر دو همین ارور رو میدن
                                
                                
                                > Process Exit Code: 255
                                > Time Taken: 00:00



                                برنامه
                                کد:
                                int main(void)
                                {
                                }
                                makefile
                                کد:
                                MCU = attiny13
                                F_CPU = 8000000
                                FORMAT = ihex
                                TARGET = main
                                OBJDIR = .
                                SRC = $(TARGET).c
                                CPPSRC = 
                                ASRC =
                                OPT = s
                                DEBUG = dwarf-2
                                EXTRAINCDIRS = 
                                CSTANDARD = -std=gnu99
                                CDEFS = -DF_CPU=$(F_CPU)UL
                                ADEFS = -DF_CPU=$(F_CPU)
                                CPPDEFS = -DF_CPU=$(F_CPU)UL
                                CFLAGS = -g$(DEBUG)
                                CFLAGS += $(CDEFS)
                                CFLAGS += -O$(OPT)
                                CFLAGS += -funsigned-char
                                CFLAGS += -funsigned-bitfields
                                CFLAGS += -fpack-struct
                                CFLAGS += -fshort-enums
                                CFLAGS += -Wall
                                CFLAGS += -Wstrict-prototypes
                                CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)
                                CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
                                CFLAGS += $(CSTANDARD)
                                CPPFLAGS = -g$(DEBUG)
                                CPPFLAGS += $(CPPDEFS)
                                CPPFLAGS += -O$(OPT)
                                CPPFLAGS += -funsigned-char
                                CPPFLAGS += -funsigned-bitfields
                                CPPFLAGS += -fpack-struct
                                CPPFLAGS += -fshort-enums
                                CPPFLAGS += -fno-exceptions
                                CPPFLAGS += -Wall
                                CPPFLAGS += -Wundef
                                CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)
                                CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
                                ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
                                PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
                                PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
                                PRINTF_LIB = 
                                SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
                                SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
                                SCANF_LIB = 
                                MATH_LIB = -lm
                                EXTRALIBDIRS = 
                                EXTMEMOPTS =
                                LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
                                LDFLAGS += $(EXTMEMOPTS)
                                LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
                                LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
                                AVRDUDE_PROGRAMMER = avr910
                                AVRDUDE_PORT = usb
                                AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
                                AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
                                AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
                                AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
                                AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
                                DEBUG_MFREQ = $(F_CPU)
                                DEBUG_UI = insight
                                DEBUG_BACKEND = avarice
                                GDBINIT_FILE = __avr_gdbinit
                                JTAG_DEV = /dev/com1
                                DEBUG_PORT = 4242
                                DEBUG_HOST = localhost
                                SHELL = sh
                                CC = avr-gcc
                                OBJCOPY = avr-objcopy
                                OBJDUMP = avr-objdump
                                SIZE = avr-size
                                AR = avr-ar rcs
                                NM = avr-nm
                                AVRDUDE = avrdude
                                REMOVE = rm -f
                                REMOVEDIR = rm -rf
                                COPY = cp
                                WINSHELL = cmd
                                MSG_ERRORS_NONE = Errors: none
                                MSG_BEGIN = -------- begin --------
                                MSG_END = -------- end --------
                                MSG_SIZE_BEFORE = Size before: 
                                MSG_SIZE_AFTER = Size after:
                                MSG_COFF = Converting to AVR COFF:
                                MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
                                MSG_FLASH = Creating load file for Flash:
                                MSG_EEPROM = Creating load file for EEPROM:
                                MSG_EXTENDED_LISTING = Creating Extended Listing:
                                MSG_SYMBOL_TABLE = Creating Symbol Table:
                                MSG_LINKING = Linking:
                                MSG_COMPILING = Compiling C:
                                MSG_COMPILING_CPP = Compiling C++:
                                MSG_ASSEMBLING = Assembling:
                                MSG_CLEANING = Cleaning project:
                                MSG_CREATING_LIBRARY = Creating library:
                                OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) 
                                LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) 
                                GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
                                ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
                                ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)
                                ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
                                all: begin gccversion sizebefore build sizeafter end
                                build: elf hex eep lss sym
                                elf: $(TARGET).elf
                                hex: $(TARGET).hex
                                eep: $(TARGET).eep
                                lss: $(TARGET).lss
                                sym: $(TARGET).sym
                                LIBNAME=lib$(TARGET).a
                                lib: $(LIBNAME)
                                begin:
                                	@echo
                                	@echo $(MSG_BEGIN)
                                
                                end:
                                	@echo $(MSG_END)
                                	@echo
                                HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
                                ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf
                                
                                sizebefore:
                                	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
                                	2>/dev/null; echo; fi
                                
                                sizeafter:
                                	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
                                	2>/dev/null; echo; fi
                                gccversion : 
                                	@$(CC) --version
                                program: $(TARGET).hex $(TARGET).eep
                                	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
                                gdb-config: 
                                	@$(REMOVE) $(GDBINIT_FILE)
                                	@echo define reset >> $(GDBINIT_FILE)
                                	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
                                	@echo end >> $(GDBINIT_FILE)
                                	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
                                	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)
                                ifeq ($(DEBUG_BACKEND),simulavr)
                                	@echo load >> $(GDBINIT_FILE)
                                endif
                                	@echo break main >> $(GDBINIT_FILE)
                                
                                debug: gdb-config $(TARGET).elf
                                ifeq ($(DEBUG_BACKEND), avarice)
                                	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
                                	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
                                	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
                                	@$(WINSHELL) /c pause
                                
                                else
                                	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
                                	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
                                endif
                                	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
                                COFFCONVERT = $(OBJCOPY) --debugging
                                COFFCONVERT += --change-section-address .data-0x800000
                                COFFCONVERT += --change-section-address .bss-0x800000
                                COFFCONVERT += --change-section-address .noinit-0x800000
                                COFFCONVERT += --change-section-address .eeprom-0x810000
                                
                                
                                
                                coff: $(TARGET).elf
                                	@echo
                                	@echo $(MSG_COFF) $(TARGET).cof
                                	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
                                
                                
                                extcoff: $(TARGET).elf
                                	@echo
                                	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
                                	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
                                
                                %.hex: %.elf
                                	@echo
                                	@echo $(MSG_FLASH) $@
                                	$(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock $< $@
                                
                                %.eep: %.elf
                                	@echo
                                	@echo $(MSG_EEPROM) $@
                                	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
                                	--change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0
                                
                                %.lss: %.elf
                                	@echo
                                	@echo $(MSG_EXTENDED_LISTING) $@
                                	$(OBJDUMP) -h -S -z $< > $@
                                
                                %.sym: %.elf
                                	@echo
                                	@echo $(MSG_SYMBOL_TABLE) $@
                                	$(NM) -n $< > $@
                                .SECONDARY : $(TARGET).a
                                .PRECIOUS : $(OBJ)
                                %.a: $(OBJ)
                                	@echo
                                	@echo $(MSG_CREATING_LIBRARY) $@
                                	$(AR) $@ $(OBJ)
                                
                                
                                .SECONDARY : $(TARGET).elf
                                .PRECIOUS : $(OBJ)
                                %.elf: $(OBJ)
                                	@echo
                                	@echo $(MSG_LINKING) $@
                                	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
                                
                                
                                $(OBJDIR)/%.o : %.c
                                	@echo
                                	@echo $(MSG_COMPILING) $<
                                	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
                                $(OBJDIR)/%.o : %.cpp
                                	@echo
                                	@echo $(MSG_COMPILING_CPP) $<
                                	$(CC) -c $(ALL_CPPFLAGS) $< -o $@ 
                                %.s : %.c
                                	$(CC) -S $(ALL_CFLAGS) $< -o $@
                                
                                
                                %.s : %.cpp
                                	$(CC) -S $(ALL_CPPFLAGS) $< -o $@
                                $(OBJDIR)/%.o : %.S
                                	@echo
                                	@echo $(MSG_ASSEMBLING) $<
                                	$(CC) -c $(ALL_ASFLAGS) $< -o $@
                                %.i : %.c
                                	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
                                clean: begin clean_list end
                                clean_list :
                                	@echo
                                	@echo $(MSG_CLEANING)
                                	$(REMOVE) $(TARGET).hex
                                	$(REMOVE) $(TARGET).eep
                                	$(REMOVE) $(TARGET).cof
                                	$(REMOVE) $(TARGET).elf
                                	$(REMOVE) $(TARGET).map
                                	$(REMOVE) $(TARGET).sym
                                	$(REMOVE) $(TARGET).lss
                                	$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)
                                	$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)
                                	$(REMOVE) $(SRC:.c=.s)
                                	$(REMOVE) $(SRC:.c=.d)
                                	$(REMOVE) $(SRC:.c=.i)
                                	$(REMOVEDIR) .dep
                                
                                $(shell mkdir $(OBJDIR) 2>/dev/null)
                                
                                -include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
                                
                                
                                .PHONY : all begin finish end sizebefore sizeafter gccversion \
                                build elf hex eep lss sym coff extcoff \
                                clean clean_list program debug gdb-config
                                زندگی پر ز وجود است ولی ..
                                ما چه را می خواهیم چه را می جوییم که لب چشمه ی امید اینچنین نا امیدانه به سرابی تلخ مینگریم...

                                دیدگاه

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