اطلاعیه

Collapse
No announcement yet.

کامپایلر IAR

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

    کامپایلر IAR

    کسی میدونه چجوری باید با IAR کار کرد؟
    اینترفیسش مشخص نیست
    منظورم اینست که آموزش بدید چجوری یه برنامه با IAR بنویسیم و میکرو رو پروگرام کنیم ترجیحا برای ورژن ATMEL باشه
    با تشکر

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

    روش ایجاد پروژه در IAR برای کار با XMEGA یا AVR:
    بعد از اجرای نرم افزار از طریق منوی Project/Create new project یک پنجره باز می شود. در گزینه C یا ++C عبارت AVR Studio 4 compatible output را انتخاب کنید. سپس پنجره ای باز می شود که محل ذخیره سازی فایل با پسوند ewp را می خواهد. برای یک پروژه جدید بهتر است فولدری متناسب با نام آن ایجاد و انتخاب شود و برای فایل مذکور هم نام مناسبی انتخاب شود. در مرحله بعدی فایل main برنامه توسط کامپایلر ایجاد می شود.
    سپس در Project/Options/General Options/Target/Processor configuration نوع میکروکنترلر مورد استفاده را انتخاب کنید. بعد از نوشتن نرم افزار مورد نظر در محیط کامپایلر، با زدن F7 پنجره ای باز می شود و محل ذخیره فایل با پسوند eww را سوال می کند. با انتخاب نام مناسب و محل فولدر تشکیل شده برای این پروژه، برنامه کامپایل می شود.
    فایل خروجی با پسوند d90 توسط IAR برای نرم افزار AVR Studio قابل شناسایی خواهد بود.این فایل در فولدر Exe ذخیره می شود.
    اوژن: به معنای افکننده و شکست دهنده است
    دانایی، توانایی است-Knowledge is POWER
    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

    دیدگاه


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

      توجه: مطالب زیر بطور خاص در مورد رجیسترهای XMEGA نوشته شده است.
      برای خواناتر بودن و امکان استفاده مجدد از کدهای نوشته شده و پشتیبانی و نگهداری از نرم افزار ، بجای نوشتن مقادیر عددی برای رجیسترها بهتر است از نامگذاری هایی که در فایل Header مربوط به هر شماره وجود دارد، استفاده شود. 5 نوع نامگذاری مقادیر با پسوند های bp_ و bm_ و gp_ و gm_ و gc_ وجود دارد که با ذکر مثال هایی در این مورد توضیح داده می شود.
      برای تعیین مقدار یک رجیستر روش اول مقداردهی بصورت عددی است. به عنوان مثال:
      PORTA_OUT=0X02;

      روش دوم که بصورت سنتی مورد استفاده قرار می گیرد، استفاده از نامهای معادل بر اساس محل بیت ( Bit position) است. این مقادیر برای یک رجیستر 8 بیتی در محدوده 0 تا 7 هستند که نشان دهنده ارزش بیت است و با bp_ ختم می شوند:
      PORTA_OUT=(1<<PIN1_bp);

      اما روش راحت تر استفاده از مقادیر تعریف شده بر اساس Bit mask است که در آن نیازی به اپراتور شیفت وجود ندارد و در تعریف آن لحاظ شده است. این مقادیر در نامگذاری با bm_ ختم می شوند:
      PORTA_OUT=PIN1_bm;

      برای یک کردن چند بیت متناظر در یک رجیستر می توان از عملیات OR استفاده کرد:
      PORTA_OUT=PIN1_bm | PIN0_bm;

      حال اگر تغییر چند بیت در یک رجیستر مورد نظر باشد، به نحوی که سایر بیت ها در وضعیت خود باقی بمانند، از اپراتور =| و =& استفاده می شود:
      PORTA_OUT |= PIN1_bm;

      PORTA_OUT &= ~(PIN1_bm);

      دستور اول بیت شماره یک از رجیستر را با حفظ وضعیت بقیه بیت ها یک می کند و دستور دوم همین بیت را صفر می کند.
      به غیر از تعریف بیت های مجزا در یک رجیستر، برای دسترسی به گروه هایی از بیت ها که وظایف مشخصی دارند، 3 نوع نام گذاری با پسوندهای gm_ و gc_ و gp_ وجود دارد. به عنوان مثالی از این نوع مقداردهی، برای انتخاب منبع کلاک یک تایمر لازم است به 4 بیت بصورت همزمان مقداردهی شود. دستور زیر با مقداردهی مستقیم سبب می شود که کلاک وسایل جانبی تقسیم بر 4 به عنوان منبع کلاک TCC0 انتخاب شود:
      TCC0_CTRLA = 0X03;

      در شکل دوم بجای این دستور می توان از شکل زیر بر اساس تک تک بیت های فعال هم استفاده کرد:
      TCC0_CTRLA = TC0_CLKSEL1_bm | TC0_CLKSEL0_bm;

      اما روش اصولی تر آن است که وضعیت مجموعه این 4 بیت را که با پسوند gc_ تعریف شده و منظور از آن Group configuration است، در یک مرحله در رجیستر مورد نظر قرار داده شود:
      TCC0_CTRLA = TC_CLKSEL_DIV4_gc;

      برای فهم بهتر دستورات مذکور می توانیم به تعریف هریک از این مقادیر در فایل Header مربوطه مراجعه کنیم:
      #define TC0_CLKSEL0_bm (1<<0) // Clock Selection bit 0 mask
      #define TC0_CLKSEL1_bm (1<<1) // Clock Selection bit 1 mask

      و در مورد Group configuration مورد نظر:
      typedef enum TC_CLKSEL_enum {
      TC_CLKSEL_OFF_gc = (0x00<<0), // Timer Off
      TC_CLKSEL_DIV1_gc = (0x01<<0), // System Clock
      TC_CLKSEL_DIV2_gc = (0x02<<0), // System Clock / 2
      TC_CLKSEL_DIV4_gc = (0x03<<0), // System Clock / 4
      TC_CLKSEL_DIV8_gc = (0x04<<0), // System Clock / 8
      TC_CLKSEL_DIV64_gc = (0x05<<0), // System Clock / 64
      TC_CLKSEL_DIV256_gc = (0x06<<0), // System Clock / 256
      TC_CLKSEL_DIV1024_gc = (0x07<<0), // System Clock / 1024
      TC_CLKSEL_EVCH0_gc = (0x08<<0), // Event Channel 0
      TC_CLKSEL_EVCH1_gc = (0x09<<0), // Event Channel 1
      TC_CLKSEL_EVCH2_gc = (0x0A<<0), // Event Channel 2
      TC_CLKSEL_EVCH3_gc = (0x0B<<0), // Event Channel 3
      TC_CLKSEL_EVCH4_gc = (0x0C<<0), // Event Channel 4
      TC_CLKSEL_EVCH5_gc = (0x0D<<0), // Event Channel 5
      TC_CLKSEL_EVCH6_gc = (0x0E<<0), // Event Channel 6
      TC_CLKSEL_EVCH7_gc = (0x0F<<0), // Event Channel 7
      } TC_CLKSEL_t;


      همانطور که مشاهده می شود، ترکیبات مورد نظر به عنوان یک نوع متغیر تعریف شده و خاصیت این نوع تعریف این است که در تعریف توابع می توان نوع متغیر ورودی را بجای unsigned char از نوع TC_CLKSEL_t تعریف کرد. در این شرایط اگر مقدار اشتباهی در ورودی تابع اعمال شود، منجر به ایجاد خطا در کامپایلر و تشخیص خطای برنامه نویسی می شود.
      سوال بعدی که مطرح می شود این است که برای تغییر چند بیت از یک رجیستر با حفظ سایر بیت های آن باید به چه شیوه ای عمل شود؟ در این مرحله است که مقادیر تعریف شده با پسوند gm_ که معرف Group mask است، اهمیت خود را نشان می دهد. در این مقادیر تمام بیت های مربوط به یک گروه از بیت ها یک هستند و با استفاده از آن می توان تغییرات مورد نظر را انجام داد. مثلا در رجیستر PINxCTRL عملا 4 گروه مختلف از بیت ها وجود دارند و تغییر یک گروه می تواند با حفظ وضعیت بقیه بیت ها انجام شود.اگر لازم باشد با حفظ وضعیت سایر بیت ها مقاومت Pull down در PA0 فعال شود، می توان از دستور زیر استفاده کرد:
      PORTA_PIN0CTRL=( PORTA_PIN0CTRL & ~ PORT_OPC_gm) | PORT_OPC_PULLDOWN_gc;

      دستور اخیر در ابتدا 3 بیت OPC را با عملیات AND صفر می کند و بعد در محل آن مقدار مناسب را با OR قرار می دهد. با مراجعه به تعریف زیر مفهوم این دستور روشن تر می شود:
      #define PORT_OPC_gm 0x38 // Output/Pull Configuration group mask

      آخرین نوع مقادیر که با پسوند gp_ تعریف شده اند، اهمیت چندانی در برنامه نویسی ندارند و تنها مکان اولین بیت با ارزش کمتر را در گروه بیت ها در رجیستر مشخص می کنند:
      #define PORT_OPC_gp 3 // Output/Pull Configuration group position

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

      دیدگاه


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

        Fatal Error[Cp001]: Copy protection check, No valid license found for this product [24]
        Error while running C/C++ Compiler
        این یعنی چی؟لایسنسش مشکل داره؟اینو که از فروشگاه خود سایت خریدم

        دیدگاه


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

          نوشته اصلی توسط شهریار رجب زاده
          Fatal Error[Cp001]: Copy protection check, No valid license found for this product [24]
          Error while running C/C++ Compiler
          این یعنی چی؟لایسنسش مشکل داره؟اینو که از فروشگاه خود سایت خریدم
          احتمالا مشکلی در crack نرم افزار وجود دارد که باید از فروشگاه سایت سوال کنید.

          نوشته اصلی توسط innovation
          آیا IAR چیزی شبیه به codewizard در codevisionداره که نیازی به مقدار دهی registerها به طور وستقیم نباشه؟ :redface:
          چنین محیطی در IAR وجود ندارد و در بسیاری از کار بردهایی که متناسب با توان XMEGA باشد، چنین محیط هایی اصولا فایده چندانی ندارد. زیرا این تصور که یکبار در ابتدای برنامه سخت افزارهای مختلف توسط یک wizardدر یک وضعیت ثابت تنظیم شوند و بعد از آن فقط عملکرد نرم افزاری وجود داشته باشد، چندان پیش فرض صحیحی نیست. برای بکارگیری حداکثر توان XMEGA و حتی AVR لازم است این توانایی در برنامه نویس وجود داشته باشد که در هر نقطه از برنامه به تناسب نیاز روی آرایش سخت افزاری کنترل داشته باشد و کسانی که عادت می کنند برای تنظیم سخت افزار به چنین محیط هایی وابسته باشند، در بسیاری موارد در انجام منظور خود ناتوان خواهند بود. ضمنا Atmel برای IAR و GCC کتابخانه هایی را در اختیار قرار داده که اکثر سخت افزارهای XMEGA را فعال می کند و از آن می توان برای تنظیم آرایش سخت افزاری استفاده کرد.
          اوژن: به معنای افکننده و شکست دهنده است
          دانایی، توانایی است-Knowledge is POWER
          برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
          وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
          قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
          اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
          ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

          دیدگاه


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

            در پست دوم این تاپیک،روش ایجاد پروژه در IAR شرح داده شد. با مراجعه به نمونه کدهایی که در تاپیک دیگر این انجمن برای IAR نوشته شده می توان مشاهده کرد که در IAR نوع میکروکنترلر در متن برنامه ذکر نمی شود و بلکه در انتخاب های پروژه تعیین می شود. یک حسن بزرگ این مسئله این است که کدهای نوشته شده را می توان بدون هیچ تغییری برای شماره های مختلف بکار برد و تغییر نوع میکروکنترلر در متن برنامه منعکس نمی شود.
            برای شناخت رجیسترهای داخلی شماره مورد نظر توسط برنامه، باید فایل header زیر در ابتدای برنامه include شود:
            #include <ioavr.h>

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

            دیدگاه


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

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

              دیدگاه


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

                جهت شروع به کار با ]َxmegaو َARM,بدلیل امکانات جالب IAR که اکثر میکرو ها را ساپورت می کندچه 8 چه 16 چه 32بیتی و نیز helpبسیار کامل ان,به این compiler علاقه مند شده ام.اما بعد از برسی تمام پست های مرتبط باIARدر انجمن های برق,متوجه این موضوع شده ام که اکثر دوستان در موارد زیر با IARمشکل دارند:
                1-عدم کامپایل بعضی برنامه ها(با توجه به حالت full Dlib)و عدم خروجی hexدر این حالت
                2-عدم وجود libraryهای آماده.
                3-مثال های شرکتNXPدر رابطه با LPCها مثال های keil هستند نهIAR.


                ایا این موارد دلیل خوبی برای کنار گذاشتن :redface: IAR می باشند؟
                هرگز زانو نخواهم زد,حتی اگر سقف آسمان کوتاهتر از
                قامتم شود 'کوروش بزرگ'

                دیدگاه


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

                  0- به دلیل ارسال یک پست مشابه در دوتاپیک مختلف، پست دیگر شما در همین انجمن حذف شد.

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

                  دیدگاه


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

                    نوشته اصلی توسط شهریار رجب زاده
                    Fatal Error[Cp001]: Copy protection check, No valid license found for this product [24]
                    Error while running C/C++ Compiler
                    این یعنی چی؟لایسنسش مشکل داره؟اینو که از فروشگاه خود سایت خریدم
                    بالاخره مشکلش حل شد و من تونستم یه چراغ چشمک زن بسازم :wow: :mrgreen:
                    یه سوال جناب طراح
                    بعد از هر بار مقدار دهی به رجیستر Toggle سیکل بعدی مقدار آن صفر میشود؟
                    سوال بعد اینکه IAR چه کتابخانه هایی دارد؟برای LCD؟اگر ندارد چطور میتوان کتابخانه نوشت؟
                    با تشکر از آموزش های خوبتون انشاالله بعد از اینکه تونستم به طور کامل با IAR کار کنم یک PDF خوب راجع به همین موضوع و آموزش قدم به قدم میگذارم

                    دیدگاه


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

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

                      دیدگاه


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

                        سوالات دیگری داشتم:
                        1- آیا بعد از مقدار دهی رجیستر TOGGLE رجیستر اصلی یعنی OUT را مقدار دهی کنیم تاثیر TOGGLE از بین خواهد رفت؟یا به همان وضعیت خواهد ماند؟
                        2- آیا تاثیرات رجیستر CLEAR همانند TOGGLE است؟
                        3- از کجا میتوان نام رجیستر ها در کامپایلر را بدست آورد؟
                        4- روش تهیه کتابخانه را لطفا توضیح دهید
                        با تشکر

                        دیدگاه


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

                          - آیا بعد از مقدار دهی رجیستر TOGGLE رجیستر اصلی یعنی OUT را مقدار دهی کنیم تاثیر TOGGLE از بین خواهد رفت؟یا به همان وضعیت خواهد ماند؟
                          2- آیا تاثیرات رجیستر CLEAR همانند TOGGLE است؟
                          نوشتن در رجیسترهای Toggleفقط یکبار سبب Not شدن بیت های مورد نظر می شود و تاثیری روی دستورات بعدی ندارد. در مورد رجیسترهای Clear هم به همین صورت است و فقط با هر بار اجرا سبب صفر شدن بیتهای مورد نظر می شود.
                          3- از کجا میتوان نام رجیستر ها در کامپایلر را بدست آورد؟
                          بعد از تعیین نوع میکروکنترلر که روش آن در پست های قبلی گفته شده، با کامپایل کردن پروژه در بین فایلهای پروژه که در سمت چپ صفحه نمایش داده می شود، فایلی با پسوند h و با نام میکروکنترلر مورد نظر وجود دارد که فهرست رجیسترها در آن وجود دارد.(مثلا ATXMEGA64A3.h)
                          4- روش تهیه کتابخانه را لطفا توضیح دهید
                          روش ایجاد کتابخانه نیاز به یک توضیح مفصل تر و یک پست مجزا دارد. شما با همین اطلاعات موجود برای انجام کاربردهای ساده اقدام کنید و نتیجه کار خود را به اطلاع دوستان برسانید تا در فرصتی در این مورد هم توضیح کافی ارائه شود.
                          اوژن: به معنای افکننده و شکست دهنده است
                          دانایی، توانایی است-Knowledge is POWER
                          برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                          وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                          قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                          اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                          ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                          دیدگاه


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

                            با توجه به اینکه دوستان در مورد کرک کردن IAR مشکل دارند آموزش زیر را برای کرک کردن در ویندوز 7 میگذارم
                            لایسنس اساسا برای windows xp طراحی شده به هر حال بنده توانستم در ویندوز 7 هم جواب بگیرم
                            مراحل 0 تا 0000 صرفا برای کسانی است که قبلا نرم افزار را نصب کرده اند ولی کار نمیکرده است
                            0- نرم افزار را به طور کامل پاک کنید
                            00- در پوشه program files پوشه common files را باز کنید سپس پوشه مربوط به IAR را پاک کنید
                            000- سیستم را ریست کنید
                            0000- قبل از استفاده از کرک سریال را پاک کنید
                            1- فایل IARID را اجرا کنید کد داده شده را جایی بنویسید مثلا کد 0x27E7D
                            2- روی فایل IAR کلیک راست کرده و گزینه Edit را انتخاب کرده یک فایل note pad باز میشود به جای کد موجود کدی که یادداشت کرده اید عینا به جای آن بنویسید
                            3- فایل note pad را save کرده و سپس آن را ببندید برای اطمینان دوباره مرحله 2 را تکرار کرده و فقط ببینید کد مورد نظر ذخیره شده است یا نه
                            4- روی فایل IAR کلیک کنید به طوری که اجرا شود
                            5- سریال شما آماده است
                            6- فایل نصب IAR را اجرا کنید و شماره لایسنس مورد نظر را از فایل سریال کپی کرده و در برنامه نصب محل license number پیست کنید
                            7- در صفحه بعد باید license key وارد شود در فایل سریال زیر هر license number خطوطی شامل اعداد و حروف هست سومین خط آن را از زیر خطی که نوشته شده Key اعداد و حروف شروع میشود و تاجایی که به # ختم شود این قشمت را به همراه # کپی کرده و در قسمت license key پیست کنید
                            8- برنامه نصب را تا آخر اجرا کرده و نرم افزار را نصب کنید
                            9- ممکن است در بخش license manager لایسنسی برای AVR مشاهده نکنید اما برای اطمینان نرم افزار را باز کرده و یک پروژه را در آن کامپایل کنید
                            اگر با اروری غیر از ارور زیر در بخش مسیج مواجه شدید
                            نوشته اصلی توسط شهریار رجب زاده
                            Fatal Error[Cp001]: Copy protection check, No valid license found for this product [24]
                            Error while running C/C++ Compiler
                            نرم افزار به درستی کار میکند
                            اکنون من موفق شده ام به وسیله xmega و کامپایلر IAR یک Dot Matrix را راه اندازی کنم و روی آن حروف را نمایش دهم
                            فعلا در تلاشم قسمت وقفه ها یا بخش تایمر کانتر را راه اندازی کنم ولی دیتاشیت درست نگفته است کدام رجیستر با رجیستر های کامپایلر مطابقت دارد فعلا میخوانم تا شاید چیزی فهمیدم بعدا عکس های دات ماتریکس را خواهم گذاشت تا بقیه امیدوار شوند :rolleyes:
                            نوشته اصلی توسط طراح
                            توجه: مطالب زیر بطور خاص در مورد رجیسترهای XMEGA نوشته شده است.
                            برای خواناتر بودن و امکان استفاده مجدد از کدهای نوشته شده و پشتیبانی و نگهداری از نرم افزار ، بجای نوشتن مقادیر عددی برای رجیسترها بهتر است از نامگذاری هایی که در فایل Header مربوط به هر شماره وجود دارد، استفاده شود. 5 نوع نامگذاری مقادیر با پسوند های bp_ و bm_ و gp_ و gm_ و gc_ وجود دارد که با ذکر مثال هایی در این مورد توضیح داده می شود.
                            برای تعیین مقدار یک رجیستر روش اول مقداردهی بصورت عددی است. به عنوان مثال:
                            PORTA_OUT=0X02;

                            روش دوم که بصورت سنتی مورد استفاده قرار می گیرد، استفاده از نامهای معادل بر اساس محل بیت ( Bit position) است. این مقادیر برای یک رجیستر 8 بیتی در محدوده 0 تا 7 هستند که نشان دهنده ارزش بیت است و با bp_ ختم می شوند:
                            PORTA_OUT=(1<<PIN1_bp);

                            اما روش راحت تر استفاده از مقادیر تعریف شده بر اساس Bit mask است که در آن نیازی به اپراتور شیفت وجود ندارد و در تعریف آن لحاظ شده است. این مقادیر در نامگذاری با bm_ ختم می شوند:
                            PORTA_OUT=PIN1_bm;

                            برای یک کردن چند بیت متناظر در یک رجیستر می توان از عملیات OR استفاده کرد:
                            PORTA_OUT=PIN1_bm | PIN0_bm;

                            حال اگر تغییر چند بیت در یک رجیستر مورد نظر باشد، به نحوی که سایر بیت ها در وضعیت خود باقی بمانند، از اپراتور =| و =& استفاده می شود:
                            PORTA_OUT |= PIN1_bm;

                            PORTA_OUT &= ~(PIN1_bm);

                            دستور اول بیت شماره یک از رجیستر را با حفظ وضعیت بقیه بیت ها یک می کند و دستور دوم همین بیت را صفر می کند.
                            به غیر از تعریف بیت های مجزا در یک رجیستر، برای دسترسی به گروه هایی از بیت ها که وظایف مشخصی دارند، 3 نوع نام گذاری با پسوندهای gm_ و gc_ و gp_ وجود دارد. به عنوان مثالی از این نوع مقداردهی، برای انتخاب منبع کلاک یک تایمر لازم است به 4 بیت بصورت همزمان مقداردهی شود. دستور زیر با مقداردهی مستقیم سبب می شود که کلاک وسایل جانبی تقسیم بر 4 به عنوان منبع کلاک TCC0 انتخاب شود:
                            TCC0_CTRLA = 0X03;

                            در شکل دوم بجای این دستور می توان از شکل زیر بر اساس تک تک بیت های فعال هم استفاده کرد:
                            TCC0_CTRLA = TC0_CLKSEL1_bm | TC0_CLKSEL0_bm;

                            اما روش اصولی تر آن است که وضعیت مجموعه این 4 بیت را که با پسوند gc_ تعریف شده و منظور از آن Group configuration است، در یک مرحله در رجیستر مورد نظر قرار داده شود:
                            TCC0_CTRLA = TC_CLKSEL_DIV4_gc;

                            برای فهم بهتر دستورات مذکور می توانیم به تعریف هریک از این مقادیر در فایل Header مربوطه مراجعه کنیم:
                            #define TC0_CLKSEL0_bm (1<<0) // Clock Selection bit 0 mask
                            #define TC0_CLKSEL1_bm (1<<1) // Clock Selection bit 1 mask

                            و در مورد Group configuration مورد نظر:
                            typedef enum TC_CLKSEL_enum {
                            TC_CLKSEL_OFF_gc = (0x00<<0), // Timer Off
                            TC_CLKSEL_DIV1_gc = (0x01<<0), // System Clock
                            TC_CLKSEL_DIV2_gc = (0x02<<0), // System Clock / 2
                            TC_CLKSEL_DIV4_gc = (0x03<<0), // System Clock / 4
                            TC_CLKSEL_DIV8_gc = (0x04<<0), // System Clock / 8
                            TC_CLKSEL_DIV64_gc = (0x05<<0), // System Clock / 64
                            TC_CLKSEL_DIV256_gc = (0x06<<0), // System Clock / 256
                            TC_CLKSEL_DIV1024_gc = (0x07<<0), // System Clock / 1024
                            TC_CLKSEL_EVCH0_gc = (0x08<<0), // Event Channel 0
                            TC_CLKSEL_EVCH1_gc = (0x09<<0), // Event Channel 1
                            TC_CLKSEL_EVCH2_gc = (0x0A<<0), // Event Channel 2
                            TC_CLKSEL_EVCH3_gc = (0x0B<<0), // Event Channel 3
                            TC_CLKSEL_EVCH4_gc = (0x0C<<0), // Event Channel 4
                            TC_CLKSEL_EVCH5_gc = (0x0D<<0), // Event Channel 5
                            TC_CLKSEL_EVCH6_gc = (0x0E<<0), // Event Channel 6
                            TC_CLKSEL_EVCH7_gc = (0x0F<<0), // Event Channel 7
                            } TC_CLKSEL_t;


                            همانطور که مشاهده می شود، ترکیبات مورد نظر به عنوان یک نوع متغیر تعریف شده و خاصیت این نوع تعریف این است که در تعریف توابع می توان نوع متغیر ورودی را بجای unsigned char از نوع TC_CLKSEL_t تعریف کرد. در این شرایط اگر مقدار اشتباهی در ورودی تابع اعمال شود، منجر به ایجاد خطا در کامپایلر و تشخیص خطای برنامه نویسی می شود.
                            سوال بعدی که مطرح می شود این است که برای تغییر چند بیت از یک رجیستر با حفظ سایر بیت های آن باید به چه شیوه ای عمل شود؟ در این مرحله است که مقادیر تعریف شده با پسوند gm_ که معرف Group mask است، اهمیت خود را نشان می دهد. در این مقادیر تمام بیت های مربوط به یک گروه از بیت ها یک هستند و با استفاده از آن می توان تغییرات مورد نظر را انجام داد. مثلا در رجیستر PINxCTRL عملا 4 گروه مختلف از بیت ها وجود دارند و تغییر یک گروه می تواند با حفظ وضعیت بقیه بیت ها انجام شود.اگر لازم باشد با حفظ وضعیت سایر بیت ها مقاومت Pull down در PA0 فعال شود، می توان از دستور زیر استفاده کرد:
                            PORTA_PIN0CTRL=( PORTA_PIN0CTRL & ~ PORT_OPC_gm) | PORT_OPC_PULLDOWN_gc;

                            دستور اخیر در ابتدا 3 بیت OPC را با عملیات AND صفر می کند و بعد در محل آن مقدار مناسب را با OR قرار می دهد. با مراجعه به تعریف زیر مفهوم این دستور روشن تر می شود:
                            #define PORT_OPC_gm 0x38 // Output/Pull Configuration group mask

                            آخرین نوع مقادیر که با پسوند gp_ تعریف شده اند، اهمیت چندانی در برنامه نویسی ندارند و تنها مکان اولین بیت با ارزش کمتر را در گروه بیت ها در رجیستر مشخص می کنند:
                            #define PORT_OPC_gp 3 // Output/Pull Configuration group position

                            ببخشید جناب طراح ولی هر دفعه که این را میخوانم گیج تر میشوم تقرییا هیچی نفهمیدم :redface: فقط فهمیدم این را از روی AVR1000 ترجمه کرده اید میشود ساده تر توضیح دهید؟

                            دیدگاه


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

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

                              دیدگاه

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