اطلاعیه

Collapse
No announcement yet.

وقفه

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

    وقفه

    سلام
    برنامه ای داریم که دارای چند وقفه است. فرض کنید پس از وقوع یکی از وقفه ها، در حین اجرای برنامه ی وقفه، وقفه ی دیگری رخ دهد.
    سوال این که آیا میکرو به وقفه جدید پاسخ می دهد؟ اگر جواب مثبت است، حداکثر زمان مجاز برای اجرای زیربرنامه ی هر وقفه به منظور از دست ندادن بقیه وقفه ها چه قدر است؟
    لطفا پاسخ خود را با ذکر منبع بفرمایید.
    خیلی ممنون.

    #2
    پاسخ : وقفه

    تمام وقفه ها دارای یه اولویت اجرایی هستند که میتونی بعضی ها شون رو به دلخواه تغییر بدی

    دیدگاه


      #3
      پاسخ : وقفه

      دوست عزیز، تو avr وقفه ها تو در تو اجرا نمیشن و این یکی از ضعفهای بزرگ ای وی آره.
      یعنی اگه برنامه تو زیر برنامه سرویس یه وقفه باشه و وقفه دیگه ای اتفاق بیفته؛ اون وقفه دومی نادیده گرفته میشه.

      اینهم دیتاشیت یه سری میکروی پرکابرد avr :
      ATmega8
      ATmega16
      ATmega32

      اما تو میکرو های دیگه مثل 8051؛ میشه اولویت وقفه ها رو تعیین کرد و وقفه های با اولویت بالاتر میتونن موقع اجرای یه وقفه با اولویت پایین تر بیان و اجرا بشن.
      دانلود بدون دردسر از راپیدشر و فور شرد و ...

      دیدگاه


        #4
        پاسخ : وقفه

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

        اینهم دیتاشیت یه سری میکروی پرکابرد avr :
        ATmega8
        ATmega16
        ATmega32

        اما تو میکرو های دیگه مثل 8051؛ میشه اولویت وقفه ها رو تعیین کرد و وقفه های با اولویت بالاتر میتونن موقع اجرای یه وقفه با اولویت پایین تر بیان و اجرا بشن.
        :twisted: :twisted: :twisted:

        جناب تهران 11 عزیز
        وقفه های تو در تو تا جایی که حافظه پشته اجازه بده انجام می شن و یکی از مزایای بزرگ avr همینه
        اگه وقفه دومی در زیر روال وقفه اول اتفاق بیفته حتماً اجرا می شه و به هیچ وجه نادیده گرفته نمیشه
        حتی وقتی که حافظه پشته رو هم زیاد کنی تا جایی که رم جواب بده می شه وقفه تو در تو اجرا کرد

        منبع ندارم ولی تست عملی کردم

        لازم به ذکره
        در میکرو ها اولویت وقفه نمیشه تعریف کرد
        اما به اتفاق نظر خیلی ها وقفه ای که در خطوط پایین تر از برنامه نوشته شده باشه اولویت بیشتری داره



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

        دیدگاه


          #5
          پاسخ : وقفه

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

          دیدگاه


            #6
            پاسخ : وقفه

            تقریبا حق با Tehran11 هستش

            اما این خصوصیت تنها مخصوص سری های ATmega در avr نیستند و در دیگر میکرو ها هم هستن

            اصولا وقتی میکرو وقتی داره روتین وقفه ای رو اجرا میکنه به صورت سخت افزاری وقفه ها رو disable میکنه و برای همین هم هست که توصیه میشه روتین وقفه ها رو هم تا میتونید کوتاه بنویسید

            برای این منظور توصیه میشه هر وقفه یک پرچم یا بیتی رو در روتین وقفه تغییر بده (Set کنه) و برنامه اصلی میکرو در یک حلقه بینهایت این پرچم ها رو چک کنه و اگر شرط برقرار شد زیربرنامه دلخواه اجرا بشه

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

            دیدگاه


              #7
              پاسخ : وقفه

              سلام

              در میکروهای AVR اگه 2 وقفه به هم به صورت هم زمان رخ دهند وقفه ای که الویت بالاتری دارد اجرا میشه.توی معماری AVR تقدم با وقفه ای است که بردار وقفه آن توی آدرس پایینتری قرار داره .

              میشه توسط بیت IVSEL در رجیستر GICR و فیوز بیت BOOTRST مکان شروع برداری های وقفه رو تغییر داد (البته نه به هر آدرس که بخواهیم این آدرسها توی دیتا شیت ذکر شدند) اما آدرس نسبی بردارهای وقفه

              نسبت به تغییر نمیکنه و درنتیجه تقدمها همیشه یکسان میمونه.

              برای اینکه وقفه ای فعال شه علاوه بر پیکربندی رجیستر وقفه اختصاصی اون باید بیت I در رجیستر SREG یک بشه. در هنگام اجرای تابع وقفه به صورت اتوماتیک این بیت صفر میشه و بعد اتمام روتین وقفه دوبار به

              صورت اتوماتیک یک میشه در نتیجه اگه بخواهیم اجرا روتین یک وقفه رو دچار وقفه کنیم باید به صورت نرم افزاری در ابتدای روتین وقفه این بیت و یک کنیم.

              دیدگاه


                #8
                پاسخ : وقفه

                نوشته اصلی توسط پیمان ذوالنوری
                سلام

                در میکروهای AVR اگه 2 وقفه به هم به صورت هم زمان رخ دهند وقفه ای که الویت بالاتری دارد اجرا میشه.توی معماری AVR تقدم با وقفه ای است که بردار وقفه آن توی آدرس پایینتری قرار داره .

                میشه توسط بیت IVSEL در رجیستر GICR و فیوز بیت BOOTRST مکان شروع برداری های وقفه رو تغییر داد (البته نه به هر آدرس که بخواهیم این آدرسها توی دیتا شیت ذکر شدند) اما آدرس نسبی بردارهای وقفه

                نسبت به تغییر نمیکنه و درنتیجه تقدمها همیشه یکسان میمونه.

                برای اینکه وقفه ای فعال شه علاوه بر پیکربندی رجیستر وقفه اختصاصی اون باید بیت I در رجیستر SREG یک بشه. در هنگام اجرای تابع وقفه به صورت اتوماتیک این بیت صفر میشه و بعد اتمام روتین وقفه دوبار به

                صورت اتوماتیک یک میشه در نتیجه اگه بخواهیم اجرا روتین یک وقفه رو دچار وقفه کنیم باید به صورت نرم افزاری در ابتدای روتین وقفه این بیت و یک کنیم.
                تا حدودی حرفهای شما درسته

                نوشته اصلی توسط ehsan_akbari
                تقریبا حق با Tehran11 هستش

                اما این خصوصیت تنها مخصوص سری های ATmega در avr نیستند و در دیگر میکرو ها هم هستن

                اصولا وقتی میکرو وقتی داره روتین وقفه ای رو اجرا میکنه به صورت سخت افزاری وقفه ها رو disable میکنه و برای همین هم هست که توصیه میشه روتین وقفه ها رو هم تا میتونید کوتاه بنویسید

                برای این منظور توصیه میشه هر وقفه یک پرچم یا بیتی رو در روتین وقفه تغییر بده (Set کنه) و برنامه اصلی میکرو در یک حلقه بینهایت این پرچم ها رو چک کنه و اگر شرط برقرار شد زیربرنامه دلخواه اجرا بشه

                اما در بعضی از میکرو های سری جدید قابلیت تغییر اولویت وقفه ها وجود داره
                اما به صورت گروهی نه اونکه فکر کنی میشه هرجور که خواسته باشید اولویت دهی کنید
                :twisted: :twisted: :twisted:
                به هیچ وجه حق با Tehran11 نیست
                اولویت در وقفه چیه دیگه :mrgreen: :mrgreen:
                اگه می تونی یک اولویت برای وفقه خارجی 0و1 ایجاد کن :applause: :applause:

                من 100 تا وقفه در وقفه ایجاد می کنم حتی وقفه در خود همون وقفه یعنی قبل از اینکه وقفه تموم بشه دوباره خودشو فعال می کنم
                مثلا برای شمارش پالس


                نوشته اصلی توسط tehran11
                دوست عزیز اتفاقا من منبع علمیشم دارم و تستشم کردم و تو اولین فرصت حتما پیداش میکنم.
                اگه راست میگی منبع بیار :mrgreen: :mrgreen: :mrgreen:
                ما منتظر اون اولین فرصت هستیم :mrgreen: :mrgreen: :mrgreen:

                بجاش یک برنامه کوچولو گذاشتم برو تستش کن و حالشو ببر
                بعدش ببین با برنامه ای که خودت تست کردی چفدر فرق داره :mrgreen: :mrgreen: :mrgreen:


                زحمت فایل پروتئوس رو هم خودتون بکشین لطفاً
                فقط مقاومت پول پ برای وقفه ها یادتون نره
                بعدش ببین چند بار می تونی وفقه در وقفه ایجاد کنی :applause: :applause: :applause:

                $regfile = "m32def.dat"
                $crystal = 1000000
                Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.0 , Rs = Porta.1
                Config Lcd = 16 * 2
                Config Lcdbus = 4
                Locate 1 , 1
                Lcd "1388/11/01"
                Locate 2 , 1
                Lcd "test interrupts "
                Wait 1
                Cls
                Config Timer0 = Timer , Prescale = 1024
                Config Int0 = Falling
                Config Int1 = Falling



                On Int0 Int0_isr
                On Int1 Int1_isr
                On Ovf0 Ovf0_isr

                Enable Int0 'enable the interrupt
                Enable Int1
                Enable Timer0
                Enable Ovf0
                Start Timer0

                Locate 1 , 1

                Enable Interrupts
                Do
                Idle

                Loop

                End

                Int0_isr:
                Enable Interrupts
                Lcd "0"
                Wait 100
                Return


                Int1_isr:
                Enable Interrupts
                Lcd "1"
                Wait 100
                Return


                Ovf0_isr:
                Disable Ovf0
                Enable Interrupts
                Lcd "T"
                Wait 100
                Enable Ovf0
                Return


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

                دیدگاه


                  #9
                  پاسخ : وقفه

                  تا حدودی حرفهای شما درسته
                  :surprised:

                  میشه اون قسمتی رو که اشتباه گفتم رو بگید ؟

                  دیدگاه


                    #10
                    پاسخ : وقفه

                    نوشته اصلی توسط پیمان ذوالنوری
                    سلام

                    در میکروهای AVR اگه 2 وقفه به هم به صورت هم زمان رخ دهند وقفه ای که الویت بالاتری دارد اجرا میشه.توی معماری AVR تقدم با وقفه ای است که بردار وقفه آن توی آدرس پایینتری قرار داره .
                    می تونی آدرس رو تعیین کنی
                    برای سادگی کار فقط بین وقفه خارجی 0و1 این کار رو بکن
                    اگه می تونی حق با شماست
                    حتی توی همون برنامه ای که گزاشتم این کار رو بکنی بازم حق با شماست


                    یک سوال

                    به نظر شما از وقفه های خارجی کدوم یکی اولویت بالاتری دارن در صورتی که هر دوی اونها در یک زمان اتفاق بیفته

                    برخلاف بعضی منابع که وقفه خارجی 0 رو معرفی کردن وقفه 1 اول اجرا می شه
                    کاری هم نداره که کجای برنامه اونو نوشته باشی
                    با این توضیحات اولویت وقفه رو شما تعیین کن
                    یعنی برنامه رو طوری بنویس(یا همون برنامه ای که گزاشتم رو ویرایش کن ) که اول وقفه 0 اجرا بشه در این صورت حق با شماست





                    اگه مردم می دونستن زمان چقدر با ارزشه دیگه هیچ وقت کفش بند دار نمی خریدن البرت انیشتن

                    دیدگاه


                      #11
                      پاسخ : وقفه

                      برخلاف بعضی منابع که وقفه خارجی 0 رو معرفی کردن وقفه 1 اول اجرا می شه
                      ببین دوست عزیز اگه منظور از بعضی منابع، سازنده همون ایسیه . من شخصا تو این زمینه با شما مخالفم چون وقته سازنده یه وسیله چیزیه رو میگه (اونم ATMEL ) اولا از خودش در نمیاره دوما برای مقایسه دو وقفه

                      مثل همون که شما گفتین باید شرایط مساوی بر قرار باشه

                      من نوشته بودم که هنگام بروژ دووقفه به صورت همزمان پس در نتیجه اگه شرط همزمانی درست باشه بقیه نوشته هام صادقه . درسته ؟

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

                      دیدگاه


                        #12
                        پاسخ : وقفه

                        من منظور از منابع شرکت اتمل نبود
                        توی منبع فارسی بگرد ببین چند تا جواب درست پیدا می کنی

                        اگه مردم می دونستن زمان چقدر با ارزشه دیگه هیچ وقت کفش بند دار نمی خریدن البرت انیشتن

                        دیدگاه


                          #13
                          پاسخ : وقفه

                          من منظور از منابع شرکت اتمل نبود
                          :surprised:


                          آخه ببخشید سواد ما کمه میریم سایت اتمل نگاه میکنیم :biggrin: نمی دونستم منبع فارسی معتبرتره :sad:

                          دیدگاه


                            #14
                            پاسخ : وقفه

                            سلام .من هم نظرم مثل پیمانه کاملا درست میگه منبع سایت اتمل معتبرترین منبعه .

                            دیدگاه


                              #15
                              پاسخ : وقفه


                              اگه منبعی از اتمل دارید بیارید
                              کسی هم نگفت منابع فارسی معتبر تره ولی مطمئن باش 90 درصد و حتی بیشتر توی ایران دنبال منابع فارسی می گردن
                              در ثانی شما خودت زمانی که دنبال 1 مطلب می گردی اگه هم فارسی اونو داشته باشی و هم انگلیسی به کدوم رجوع می کنی
                              اگه فارسی :
                              پس چرا اینقدر چوب اتمل رو بخودت می زنی تا اونجا که من می دونم اتمل فارسی چیزی چاپ نکرده
                              اگه انگلیسی :
                              پس تمامی کتابهای فارسی رو دور بریز چون منابع رفرنس لاتین زیاده


                              نوشته اصلی توسط sajad ebrahimi

                              سلام .من هم نظرم مثل پیمانه کاملا درست میگه منبع سایت اتمل معتبرترین منبعه .
                              شکی توی اعتبار اتمل نیست
                              اصلا ما جوجه برنامه نویس ها کی هستیم که بخواهیم توی کار اتمل دخالت کنیم
                              اگه اینقدر هم منابع اتمل رو مهم می دونی چرا خودت می ری دنبال منابع فارسی

                              اگه مردم می دونستن زمان چقدر با ارزشه دیگه هیچ وقت کفش بند دار نمی خریدن البرت انیشتن

                              دیدگاه

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