اطلاعیه

Collapse
No announcement yet.

آموزش برنامه نویسی ARM سری SAM7 از 0 تا 100

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

    آموزش برنامه نویسی ARM سری SAM7 از 0 تا 100

    با سلام من چند وقتی هست که دارم دنبال اموزش برنامه نویسی میکرو arm می گردم اما اموزش های موجود کامل نیستند و دارای نواقصی می باشند
    یا توضیحات ان ها کامل و واضح نیست من در این تایپک قصد اموزش برنامه نویسی زبان سی را به شما اموزش دارم البته گفتنی است که اطلاعات من هم نواقصی دارد که به کمک شما این نواقص رو برطرف می کنیم
    قبل از هر چیز جا داره از اقای علی ایمانی فر تشکر کنم که با کمک های ایشان تونستم هدر برد رو راه اندازی کنم
    و از ایشان می خواهم که این تایپک رو به صورت مهم تبدیل کنند تا کسانی که وارد arm می شوند دنبال اموزش نگردند
    سوالات خود را در تایپکسوالات در برنامه نویسی سیمطرح کنید
    این کار برای جلوگیری از شلوغی تایپک است
    اموزش برنامه نوسیس سی
    بلوگ دیاگرام یک برنامه به زبان سی تقریبا به شکل زیر است
    فراخوانی و راه اندازی پردازنده و کتاب خانه ها و فایل ها هدر و....
    پیکر بندی امکانات(مانندlcdو...)
    معرفی متغییر ها
    شروع حلقه
    برنامه ای که باید انجام شود
    پایان حلقه
    پایان برنامه
    زیر برنامه ها(در صورت وجود)
    آدلان پایا متخصص در حوضه ربات های پرنده
    https://adlanpaya.ir/

    #2
    پاسخ : آموزش برنامه نویسی ARM از 0 تا 100

    کد:
    #include <AT91SAM7X256.H>            /* AT91SAMT7X256 definitions */
    #include <lib_AT91SAM7X256.h>
    void wait(void); 
    int main (void) {
     AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, AT91C_PIO_PB0);
       AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, AT91C_PIO_PB0);
       wait();
       AT91F_PIO_SetOutput (AT91C_BASE_PIOB, AT91C_PIO_PB0);
       wait();
    }
    void wait (void) {
     unsigned int n;
     for (n = 0; n < 7372800; n++);
    }
    ادمه در تایپک بعد :mrgreen:
    آدلان پایا متخصص در حوضه ربات های پرنده
    https://adlanpaya.ir/

    دیدگاه


      #3
      پاسخ : آموزش برنامه نویسی ARM از 0 تا 100

      از سخت بودن این کد ها نترسید.وقتی با ان ها کار کنید می فهمید که هر یک چه معنی دارد
      کد:
      #include <AT91SAM7X256.H>
      این دستور نوع میکرو را مشخص می کند . شما می توانید هر یک از میکرو های موجود را انتخاب کنید
      کد:
      #include <lib_AT91SAM7X256.h>
      با این دستور فایل هدر lib_AT91SAM7X256.h را به برنامه فراخونی می کنیمدر ادامه با این هدر اشنا خواهید شد.
      کد:
      void wait(void);
      این دستور مشخص کننده وجود یک زیر برنامه است
      کد:
      int main (void) {
      دستور ها
      }
      این بخش شروع حلقه ما خواهد بود.cpuمیکرو دستورات مین دو اکولاد را اجرا می کند و فقط با دستورات پرش یا شرط که در ادامه توضیح می دهیم از این این حلقه بیرون می رود.
      کد:
       AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, AT91C_PIO_PB0);
      این دستور پایه0 از پورت bرا خروجی تعریف می کند.
      کد:
         AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, AT91C_PIO_PB0);
      این دستور مقادیر کوجود بر روی پایه راپاک می کند، پایه را صفر می کند
      کد:
      wait();
      با این دستور زیر برنامه را فراخوانی می کنیم
      کد:
      AT91F_PIO_SetOutput (AT91C_BASE_PIOB, AT91C_PIO_PB0);
      این دستور پایه مورد نظر را یک می کند
      برنامه ی بالا مثالی بود برای این که شما بر ترس خود غلبه کنید
      برنامه در کامپایلر keilنوشته می شود

      در ادامه با کلیه دستورات اشنا خواهید شد مشاهده کردید که تمام برنامه ها یک قالب یکسان دارند ودر جای خودش میاید
      آدلان پایا متخصص در حوضه ربات های پرنده
      https://adlanpaya.ir/

      دیدگاه


        #4
        پاسخ : آموزش برنامه نویسی ARM از 0 تا 100

        استفاده از توضیحات
        گاهی اوقات در برنامه نیاز به توضیح دادن یک خط یا کد یا عمل است برای درج توضیحات از//استفاده میشود یا توضیحات میان/*....*/درج می شود توضیحات در کامپایلر خوانده نمی شودو شما می توانید از انها برای توضیح برنامه استفاره کنید
        مثال:/* AT91SAMT7X256 definitions */
        آدلان پایا متخصص در حوضه ربات های پرنده
        https://adlanpaya.ir/

        دیدگاه


          #5
          پاسخ : آموزش برنامه نویسی ARM از 0 تا 100

          متغییر چیست؟
          متغییر های محلی از حافظه موقت هستند که به عمل خواصی اختصاص داده می شوند،مثلا یک متغییر از نوع CHAR که مقدار عدد روی یک پورت 16 پایه ای درونش ریخته شده است.16 بیت از حافظه را اشغال می کند
          از مغییر ها برای ذخیره اعداد یا وضعیت استفاده می شود از ان جا که وضعیت های مختلف از نظر اندازه وجود دارد،بنابراین به چندین نوع متغییر نیاز داریم.
          keilمتغییر های زیر را در اختیار برنامه نویس قرار می دهد:

          کد:
          type       size in bits   naturalcalignment bytes
          
          char         8           1 byte          
          short        16          2 harfword
          int         32          4 word
          long         32          4 word
          long long      64          8 doubleword
          float        32          4 word
          double        64          8 doubleword
          long double     64          8 doubleword
          all pointers     32          4 word
          bool(c only[1])   8           1 byte
          آدلان پایا متخصص در حوضه ربات های پرنده
          https://adlanpaya.ir/

          دیدگاه


            #6
            پاسخ : آموزش برنامه نویسی ARM از 0 تا 100

            [b]تعریف متغییر به فرم زیر است:
            کد:
            int a;
            char b;
            توجه داشته باشید:
            که نام متغییر نمی تواند شامل کلمات رزو شده:دستورات که در برنامه نویسی به کار میروند باشد
            حد اکثر طول نام متغییر 31 کارکتر است
            زبان سی بین حروف کوچک و بزرک تفاوت قائل می شود
            آدلان پایا متخصص در حوضه ربات های پرنده
            https://adlanpaya.ir/

            دیدگاه


              #7
              پاسخ : آموزش برنامه نویسی ARM از 0 تا 100

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

              ضرب *
              تقسیم /
              جمع +
              تفریق -
              افزایش یک واحد ++
              کاهش یک واحد --
              قرینه _
              بزرگتر <
              کوچکتر >
              کوچکتر کساوی =>
              بزرگتر مساوی =<
              انتساب =
              باقی مانده تقسیم \
              And &
              or |
              Xor ^
              شیفت به راست <<
              شیفت به چپ >>
              نامساوی =!
              Andمنطقی &&
              Orمنطقی ||
              نقض !
              شما می تونید کلیه اعمال بالا را بر روی متغییر ها انجام دهید حاصل ان را در یک متغییر ذخیره کنید

              مفیده؟
              آدلان پایا متخصص در حوضه ربات های پرنده
              https://adlanpaya.ir/

              دیدگاه


                #8
                پاسخ : آموزش برنامه نویسی ARM از 0 تا 100

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

                کد:
                While(x){
                برنامه
                }
                این حلقه که خود در حلقه ی اصلی قرار می گیرد یک حلقه ی بینهایت است هنگامی که برنامه به اکولاد دوم رسید به whileپرش می کند. شما می توانید به جای x عدد دلخواه خود رابگذارید و از تعداد بیشتری حلقه در برنامه خود استفاده کنید.
                آدلان پایا متخصص در حوضه ربات های پرنده
                https://adlanpaya.ir/

                دیدگاه


                  #9
                  پاسخ : آموزش برنامه نویسی ARM از 0 تا 100

                  حلقه for
                  فرم:

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

                  آدلان پایا متخصص در حوضه ربات های پرنده
                  https://adlanpaya.ir/

                  دیدگاه


                    #10
                    پاسخ : آموزش برنامه نویسی ARM از 0 تا 100

                    حلقه ی while-do:
                    کد:
                    Do
                    {
                    برنامه
                    }while(شرط);
                    دراین حلقه برخلاف دیگر حلقه ها شرط در اخر حلقه چک می شود
                    این حلقه یک بار اجرا می شود ،در صورتی که قسمت شرط مبتنی بر تکرار حلقه وجود داشته با شد،حلقه دوباره تکرار می شود.

                    امیدوارم بدردتون بخوره
                    اگه بدرد خورد یادی هم از ما بکنید
                    آدلان پایا متخصص در حوضه ربات های پرنده
                    https://adlanpaya.ir/

                    دیدگاه


                      #11
                      پاسخ : آموزش برنامه نویسی ARM از 0 تا 100

                      دستور goto:
                      کد:
                      Goto label;
                      Label:
                      برنامه
                      Return;
                      برچسب باید در داخل حلقه اصلی باشد
                      طول برچسب نباید از 31 کارکتر بیشتر باشد
                      برای برچسب نباید از کلمات رزرو شده استفاده کرد
                      آدلان پایا متخصص در حوضه ربات های پرنده
                      https://adlanpaya.ir/

                      دیدگاه


                        #12
                        پاسخ : آموزش برنامه نویسی ARM از 0 تا 100

                        دستوات مربوط به پورت ها
                        در زبان سی مجموعه از ریجستر ها وجود دارد که ما باید انها را بشناسیم ، این ریجستر ها برای کار با هر جز الزامی است.
                        در کمپایلر کیل هر یک از امکانات جانبی دارای ریجستر مخصوص به خود هستند ، برای مثال ریجستر at91f_pio مخصوص پورت های میکرو کنترلر های اتمل می باشد شما میتوانید در این ریجستر مشخص کنید که پورت در چه وضعیتی قرار داشته باشد.
                        شما می تونید پورت یا پایه ای را به عنوان ورودی یا خروجی انتخاب کنید و سپس مقادیری را در ان قرار دهید
                        در ادامه ی اموزش با کلیه ریجستر ها اشنا خواهیم شد.
                        فایل های هدر
                        در هر برناه فایل هایی با پسوند .h وجود دارد که ما ان ها را هدر می نامیم این فایل ها براس ساده تر شدن کد های برنامه به ما کمک می کنند.مثلا هدرlib_at91sam 7 x256 دستئرات مربوط به میکرو at91sam7x256 را به زبان گفتار نزدیک می کند
                        هم همچنین می توانیم هدر یا کتاب خانه دلخواه خود را بنویسیم در کیل هدر های زیادی وجود دارد که در اینده با انها اشنا خواهید شد
                        آدلان پایا متخصص در حوضه ربات های پرنده
                        https://adlanpaya.ir/

                        دیدگاه


                          #13
                          پاسخ : آموزش برنامه نویسی ARM از 0 تا 100

                          ریجستر های مخصوص به پورت :
                          این دستورات و ریجستر ها برای هدر های lib_at91sam???????? گفته می شود برای اجرای این دستورات نیاز است که این کتاب خانه ها را در برنامه خود فراخوان کنید
                          مثلا":

                          کد:
                          #include <at91sam7x256>
                          #include <lib_at91sam7x256>
                          قرار دادن پورت به عنوان ورودی یا خروجی:
                          کد:
                          At91f_pio_cfgoutput(at91c_piox,at91c_pio_pxy)
                          دستور بالا پایهy از پورت x را به عنوان خروجی تعریف می کند
                          کد:
                          At91f_pio_getinput(at91c_piox,at91c_pio_pxy)
                          دستور بالا پایهy از پورت x را به عنوان ورودی تعریف می کند
                          کد:
                          At91f_pio_clearoutput(at91c_piox,at91c_pio_pxy)
                          دستور بالا پایهy از پورت x را صفر می کند
                          کد:
                          At91f_pio_setoutput(at91c_piox,at91c_pio_pxy)
                          دستور بالا پایهy از پورت x را یک می کند
                          آدلان پایا متخصص در حوضه ربات های پرنده
                          https://adlanpaya.ir/

                          دیدگاه


                            #14
                            پاسخ : آموزش برنامه نویسی ARM از 0 تا 100

                            این هم یه مثال چشمک زن درباره یdelay.h هم بعدا توضیح میدم
                            کد:
                            #include <AT91SAM7X256.H>
                            #include <lib_AT91SAM7X256.h>
                            #include <delay.h>
                            
                            int main (void) {
                            
                            	AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, AT91C_PIO_PB19);
                            	AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, 0xFFFF);
                            
                            	while (1) {
                            
                            		AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, AT91C_PIO_PB19);
                            		AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, 0xFFFF);
                            		delay_s(1);
                            		AT91F_PIO_SetOutput (AT91C_BASE_PIOB, AT91C_PIO_PB19);
                            		AT91F_PIO_SetOutput (AT91C_BASE_PIOA, 0xFFFF);
                            		delay_s(1);
                            
                            	}
                            }
                            آدلان پایا متخصص در حوضه ربات های پرنده
                            https://adlanpaya.ir/

                            دیدگاه


                              #15
                              پاسخ : آموزش برنامه نویسی ARM از 0 تا 100

                              دستورات تاخیر:
                              گاهی مواقع لازم است برایمدتی برنام اجرا نشود،برای این کار از دستورات تاخیر استفاده می شود،در کیل تابع برای تاخیر (در برنامه)وجد ندارد.و شما باید برای ایجاد تاخیر cpu را به کاردیگری مشغول کنید یکی از این کار ها شمرده عداد میباشد:

                              کد:
                              #include <AT91SAM7X256.H>            /* AT91SAMT7X256 definitions */
                              #include <lib_AT91SAM7X256.h>
                              void wait(void); 
                              int main (void) {
                               AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, AT91C_PIO_PB19);
                                 AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, AT91C_PIO_PB19);
                                 wait();
                                 AT91F_PIO_SetOutput (AT91C_BASE_PIOB, AT91C_PIO_PB19);
                                 wait();
                              }
                              void wait (void) {
                               unsigned int n;
                               for (n = 0; n < 7372800; n++);
                              }
                              مشاهده میکنید که در هر نیم میلی ثانیه پایه b19روشن و خاموش میشود در این برنامه برای تاخیر از فراخوانی تابع استفاده شده است در تایپک بعد برنامه را تحلیل می کنیم:

                              آدلان پایا متخصص در حوضه ربات های پرنده
                              https://adlanpaya.ir/

                              دیدگاه

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