اطلاعیه

Collapse
No announcement yet.

کامپایلر IAR

Collapse
این موضوع برجسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #31
    پاسخ : کامپایلر IAR

    آقا مشکلم رو حل کردم
    //----------------------------------------------------------------------
    int putchar(int c)
    {
    while(!(USARTE0_STATUS & 0x20));
    USARTE0_DATA = c;
    return c;
    }
    این کد رو قبل از main نوشتم و روی usarte0 فرستادم.
    منتها تنظیمات حافظه رو هم باید تغییر میدادم ، مثلا Data Stack برابر 32 بایت بود که گذاشتم 1024 بایت.

    حالا یه مشکل دیگه :
    من توی تنظیمات گفتم زبان C ، اما من میخوام از Class استفاده کنم. اگر زبان رو بکنم Embedded C++ 1 میتونم از کلاس استفاده کنم اما printf از کار میفته. یعنی ظاهرا دیگه از تابع putchar که نوشتم استفاده نمیکنه . برای تست توی تابع putchar یه Beep گذاشتم که اگر رفت Buzzer روی برد یه بوق کوتاه بزنه. اما انگار putchar رو آدم حساب نمیکنه.
    فکر میکنید مشکل از کجاست؟؟؟

    دیدگاه


      #32
      پاسخ : کامپایلر IAR

      در مورد stream اگر به لینک داده شده AVRFreaks مراجعه کنید، در چند پست پائین تر مشاهده می کنید که برای GCC هم برنامه معادلی نوشته شده که در تعریف توابع، stream هم آورده شده است. اما در IAR به این شیوه عمل نمی شود و مانند همان مثال اول و یا به ترتیبی که در ادامه خواهد آمد، روال اجرایی printf قابل تعریف است.
      منظور از مدهای printf سه وضعیت small و medium و large برای کتابخانه های CLIB و tiny و small و large و full برای DLIB است که امکانات قابل استفاده در این دستور بستگی به مد آن دارد. مثلا در CLIB در مد medium امکان تعریف آرگومان float برای printf وجود ندارد. برای جزئیات این موارد باید به راهنمای کامپایلر مراجعه کنید.
      برای تعریف عملکرد دلخواه برای putchar از طریق یک فایل جداگانه باید به صورت زیر عمل کنید:
      الف- وضعیت Library configuration باید در CLIB تنظیم شود. زیرا printf در DLIB از putchar استفاده نمی کند.
      ب- در مسیر نصب IAR، از فولدر avr/src/lib/clib فایل putchar.c را در مسیر پروژه خود کپی کنید.
      ج- در تابع موجود در فایل مذکور، عملیات دلخواه خود را بنویسید.
      د- در کامپایلر از طریق Project/Add files فایل putchar.c تغییر داده شده را به پروژه اضافه کنید و پروژه را Rebuild کنید.
      در این وضعیت اجرای printf موجب دسترسی به putchar خواهد شد. در نهایت به شما توصیه می شود به دلیل حجم بالای تولید شده توسط printf حتی الامکان از آن استفاده نکنید و توابع مورد نظر را بصورت مستقیم بنویسید.

      اما وضعیت کتابخانه DLIB برای printf، از write__ استفاده می شود که توضیح آن مفصل است و می توانید مواردی را در این تاپیک مطالعه کنید و یا به مثال موجود در manual کامپایلر مراجعه کنید:

      http://www.avrfreaks.net/index.php?n...;postorder=asc
      اوژن: به معنای افکننده و شکست دهنده است
      دانایی، توانایی است-Knowledge is POWER
      برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
      وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
      قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
      اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
      ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

      دیدگاه


        #33
        پاسخ : کامپایلر IAR

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

        دیدگاه


          #34
          پاسخ : کامپایلر IAR

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

          دیدگاه


            #35
            پاسخ : کامپایلر IAR

            سلام جناب کی نژاد
            شاید سوالم تکراری باشد اما به هر جهت
            ایا شما ebook کامل درباره کاربا iar وزبان c دارید که برای من اپلود کنید (به غیر از هلپ نرم افزار )
            مرسی

            دیدگاه


              #36
              پاسخ : کامپایلر IAR

              نوشته اصلی توسط احسان پورسینا
              سلام جناب کی نژاد
              شاید سوالم تکراری باشد اما به هر جهت
              ایا شما ebook کامل درباره کاربا iar وزبان c دارید که برای من اپلود کنید (به غیر از هلپ نرم افزار )
              مرسی
              سلام

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

              دیدگاه


                #37
                پاسخ : کامپایلر IAR

                سلام.استاد کی نژاد این ارور مربوط به چیه؟
                Error[Pe020]: identifier "PORTA_OUTSET" is undefined C:\Documents and Settings\ALI\Desktop\New Folder\main.cpp 5
                تنظیماتی که گفتید رو انجام دادم.
                اینم کد:
                کد:
                #include <ioavr.h>
                #define PIN7_bp 7
                int main()
                {
                 PORTA_OUTSET=PIN7_bm;
                 PORTA_OUTSET=PIN7_bm;
                 return 0;
                }

                ممنون
                همیشه در حال یادگیری.سعی می کنم موانع سر راهم را بردارم.

                دیدگاه


                  #38
                  پاسخ : کامپایلر IAR

                  نوشته اصلی توسط احسان پورسینا
                  ایا شما ebook کامل درباره کاربا iar وزبان c دارید که برای من اپلود کنید (به غیر از هلپ نرم افزار )
                  در گزینه Help به غیر از بخش Contents که وارد توضیحات بخش های مختلف می شود، یکسری فایل PDF هم وجود دارد که توضیحات گسترده ای در مورد بخش های مختلف کامپایلر ارائه کرده است. اما شما کمتر به این توضیحات نیاز دارید و بیشتر باید انرژی خود را صرف استفاده از کتابخانه های حاضر و آماده ارائه شده توسط Atmel نمائید.

                  نوشته اصلی توسط ali-electoronic
                  سلام.استاد کی نژاد این ارور مربوط به چیه؟
                  Error[Pe020]: identifier "PORTA_OUTSET" is undefined C:\Documents and Settings\ALI\Desktop\New Folder\main.cpp 5
                  تنظیماتی که گفتید رو انجام دادم.
                  اینم کد:
                  کد:
                  #include <ioavr.h>
                  #define PIN7_bp 7
                  int main()
                  {
                   PORTA_OUTSET=PIN7_bm;
                   PORTA_OUTSET=PIN7_bm;
                   return 0;
                  }
                  (پست شما را برای نمایش کدها از چپ به راست ادیت کردم. ) آیا در Project/Options/General Options/Target نوع میکروکنترلر را مشخص کرده و در Project/Options/General Options/System گزینه Enable bit definitions in I/O include files را فعال کرده اید؟ ضمنا در برنامه باید یک حلقه while قرار دهید و برنامه شما درست به نظر نمی رسد.
                  اوژن: به معنای افکننده و شکست دهنده است
                  دانایی، توانایی است-Knowledge is POWER
                  برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                  وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                  قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                  اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                  ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                  دیدگاه


                    #39
                    پاسخ : کامپایلر IAR

                    سلام.استاد مشکل حل شد و اون تنظیمات رو که به ظاهر انجام داده بودم به درستی انجام نشده بود.پس اگر من یک ال ای دی به پورتa7 ایکسمگا وصل کنم روشن می شود دیگه؟درسته؟
                    اما چند سوال داشتم در مورد این کامپایلر:
                    1-این دستور چه کاری را انجام می دهد؟
                    کد:
                    TCC0_CTRLA = 0X03;
                    حال اگر در این کد بجای
                    کد:
                     0X03
                    ، از این استفاده شود چه مشکلی پیش خواهد آمد؟
                    کد:
                    0X02
                    2-آیا iar تابعی برای تاخیر دارد یا باید آن را هم بنویسیم؟
                    اگر می شود در مورد چگونگی نوشتن توابع نیز توضیحاتی بدهید.
                    ممنون.موفق باشید
                    همیشه در حال یادگیری.سعی می کنم موانع سر راهم را بردارم.

                    دیدگاه


                      #40
                      پاسخ : کامپایلر IAR

                      نوشته اصلی توسط ali-electoronic
                      پس اگر من یک ال ای دی به پورتa7 ایکسمگا وصل کنم روشن می شود دیگه؟درسته؟
                      در کد شما جهت پورت خروجی تعریف نشده است. اگر آند یک LED را که با یک مقاومت مناسب سری شده باشد به PA7 متصل کنید، توسط کد زیر روشن می شود:

                      کد:
                      #include <ioavr.h>
                      
                      void main()
                      {
                       PORTA_DIRSET=PIN7_bm;
                       PORTA_OUTSET=PIN7_bm;
                       while(1);
                      }


                      قرار دادن 0x03 دز TCC0_CTRLA سبب می شود که کلاک آن برابر CLKPER/4 تنظیم شود که بصورت Default مقدار CLKPER برابر 2 مگاهرتز است. به ازای 0X02 هم در مقدار CLKPER/2 تنظیم می شود.برای توضیحات بیشتر به صفحه 165 از XMEGA A Manual مراجعه کنید.

                      نوشته اصلی توسط ali-electoronic
                      -آیا iar تابعی برای تاخیر دارد یا باید آن را هم بنویسیم؟
                      اگر می شود در مورد چگونگی نوشتن توابع نیز توضیحاتی بدهید.
                      برای ایجاد تاخیر از روش های مختلفی می توان استفاده کرد. یک روش استفاده از delay_cycles__ است که به تعداد ذکر شده در دستور CPU را معطل می کند. در این روش باید intrinsics.h در ابتدا include شود. مثال استفاده از این نوع تاخیر در پست زیر آورده شده است:

                      http://www.eca.ir/forum2/index.php?t...3831#msg193831

                      یک روش دیگر استفاده از delay_us است که می توانید بجای ioavr.h فایل avr_compiler.h را که در کدهای Atmel وجود دارد، در ابتدای برنامه include کنید. این فایل باید در فولدر برنامه کپی شود. مثلا برنامه زیر سبب چشمک زدن LED با فرکانس 1Hz خواهد شد:

                      کد:
                      #include"avr_compiler.h"
                      void main(void)
                      {
                       PORTA_DIRSET=PIN7_bm;
                       while(1)
                       {
                       PORTA_OUTTGL=PIN7_bm;
                       delay_us(500000);
                       }
                      }


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

                      دیدگاه


                        #41
                        پاسخ : کامپایلر IAR

                        سلام.این کد چه کاری را انجام می دهد؟
                        [ltr]
                        کد PHP:
                        PORTA_DIRSET=PIN7_bm
                        [ltr/]
                        ممنون
                        همیشه در حال یادگیری.سعی می کنم موانع سر راهم را بردارم.

                        دیدگاه


                          #42
                          پاسخ : کامپایلر IAR

                          نوشته اصلی توسط ali-electoronic
                          سلام.این کد چه کاری را انجام می دهد؟
                          PORTA_DIRSET=PIN7_bm;
                          ممنون
                          تمام پورت ها بصورت پیش فرض ورودی هستند. این دستور جهت بیت هفتم از پورت A را خروجی می کند.( برای نحوه نوشتن از چپ به راست اینجا را ببینید).
                          اوژن: به معنای افکننده و شکست دهنده است
                          دانایی، توانایی است-Knowledge is POWER
                          برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                          وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                          قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                          اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                          ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                          دیدگاه


                            #43
                            پاسخ : کامپایلر IAR

                            نوشته اصلی توسط طراح

                            برای ایجاد تاخیر از روش های مختلفی می توان استفاده کرد. یک روش استفاده از delay_cycles__ است که به تعداد ذکر شده در دستور CPU را معطل می کند. در این روش باید intrinsics.h در ابتدا include شود. مثال استفاده از این نوع تاخیر در پست زیر آورده شده است:

                            http://www.eca.ir/forum2/index.php?t...3831#msg193831

                            یک روش دیگر استفاده از delay_us است که می توانید بجای ioavr.h فایل avr_compiler.h را که در کدهای Atmel وجود دارد، در ابتدای برنامه include کنید. این فایل باید در فولدر برنامه کپی شود. مثلا برنامه زیر سبب چشمک زدن LED با فرکانس 1Hz خواهد شد:

                            کد:
                            #include"avr_compiler.h"
                            void main(void)
                            {
                             PORTA_DIRSET=PIN7_bm;
                             while(1)
                             {
                             PORTA_OUTTGL=PIN7_bm;
                             delay_us(500000);
                             }
                            }


                            درباره نوشتن توابع هم مانند تمام برنامه های C نوشته می شود و توضیحی که خاص IAR باشد لازم به نظر نمی رسد.
                            آقای کی نژاد اگر میشود لینک این کدهایی که میگویید کتابخانه avr_compiler.h در آن قرار دارد را قرار دهید؟
                            ممنون.
                            بگذارعشق خاصیت تو باشد نه رابطه خاص تو باکسی
                            موفقیت پیش رفتن است نه به نقطه ی پایان رسیدن
                            نلسون ماندلا

                            دیدگاه


                              #44
                              پاسخ : کامپایلر IAR

                              نوشته اصلی توسط رضا بابایی
                              آقای کی نژاد اگر میشود لینک این کدهایی که میگویید کتابخانه avr_compiler.h در آن قرار دارد را قرار دهید
                              avr_compilerدر اکثر Application Note های مربوط به XMEGA وجود دارد. مثلا:

                              http://www.atmel.com/dyn/resources/p...ts/AVR1300.zip
                              اوژن: به معنای افکننده و شکست دهنده است
                              دانایی، توانایی است-Knowledge is POWER
                              برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                              وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                              قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                              اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                              ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                              دیدگاه


                                #45
                                پاسخ : کامپایلر IAR

                                آقای کی نژاد بنده یک مشکلی در مورد استفاده از دستور sprintf دارم و ان این است که خروجی به بنده نمی دهد و مقدار رشته ای که از ان در یافت میکنم بدون تغییر باقی مانده است.
                                کتابخانه ها در مد Full Dlib و printf هم در full میباشد.
                                ممنون.
                                بگذارعشق خاصیت تو باشد نه رابطه خاص تو باکسی
                                موفقیت پیش رفتن است نه به نقطه ی پایان رسیدن
                                نلسون ماندلا

                                دیدگاه

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